深圳教育科技网站建设,推广app赚佣金平台,湘潭高新区最新新闻,网站建设 电话咨询目录
服务容灾
21.什么是服务雪崩#xff1f;
22.什么是服务熔断#xff1f;什么是服务降级#xff1f;
什么是服务熔断#xff1f;
什么是服务降级#xff1f;
有哪些熔断降级方案实现#xff1f;
23.Hystrix怎么实现服务容错#xff1f;
24.Sentinel怎么实现限…目录
服务容灾
21.什么是服务雪崩
22.什么是服务熔断什么是服务降级
什么是服务熔断
什么是服务降级
有哪些熔断降级方案实现
23.Hystrix怎么实现服务容错
24.Sentinel怎么实现限流的
Sentinel采用的什么限流算法
Sentinel怎么实现集群限流
服务网关
25.什么是API网关
26.SpringCloud可以选择哪些API网关
27.Spring Cloud Gateway核心概念
链路追踪
28.为什么要用微服务链路追踪
29.SpringCloud可以选择哪些微服务链路追踪方案
分布式事务
30.Seata支持哪些模式的分布式事务
31.了解Seata的实现原理吗
Seata的事务执行流程是什么样的
全局事务ID和分支事务ID是怎么传递的
Seata的事务回滚是怎么实现的
服务监控
32.你们的服务怎么做监控和告警
33.你们的服务怎么做日志收集 服务容灾
21.什么是服务雪崩
在微服务中假如一个或者多个服务出现故障如果这时候依赖的服务还在不断发起请求或者重试那么这些请求的压力会不断在下游堆积导致下游服务的负载急剧增加。不断累计之下可能会导致故障的进一步加剧可能会导致级联式的失败甚至导致整个系统崩溃这就叫服务雪崩。 一般为了防止服务雪崩可以采用这些措施 服务高可用部署确保各个服务都具备高可用性通过冗余部署、故障转移等方式来减少单点故障的影响。 限流和熔断对服务之间的请求进行限流和熔断以防止过多的请求涌入导致后端服务不可用。 缓存和降级合理使用缓存来减轻后端服务的负载压力并在必要时进行服务降级保证核心功能的可用性。
22.什么是服务熔断什么是服务降级
什么是服务熔断
服务熔断是微服务架构中的容错机制用于保护系统免受服务故障或异常的影响。当某个服务出现故障或异常时服务熔断可以快速隔离该服务确保系统稳定可用。
它通过监控服务的调用情况当错误率或响应时间超过阈值时触发熔断机制后续请求将返回默认值或错误信息避免资源浪费和系统崩溃。
服务熔断还支持自动恢复重新尝试对故障服务的请求确保服务恢复正常后继续使用。
什么是服务降级
服务降级是也是一种微服务架构中的容错机制用于在系统资源紧张或服务故障时保证核心功能的可用性。
当系统出现异常情况时服务降级会主动屏蔽一些非核心或可选的功能而只提供最基本的功能以确保系统的稳定运行。通过减少对资源的依赖服务降级可以保证系统的可用性和性能。
它可以根据业务需求和系统状况来制定策略例如替换耗时操作、返回默认响应、返回静态错误页面等。
有哪些熔断降级方案实现
目前常见的服务熔断降级实现方案有这么几种 23.Hystrix怎么实现服务容错
尽管已经不再更新但是Hystrix是非常经典的服务容错开源库它提供了多种机制来保护系统 服务熔断Circuit BreakerHystrix通过设置阈值来监控服务的错误率或响应时间。当错误率或响应时间超过预设的阈值时熔断器将会打开后续的请求将不再发送到实际的服务提供方而是返回预设的默认值或错误信息。这样可以快速隔离故障服务防止故障扩散提高系统的稳定性和可用性。 服务降级Fallback当服务熔断打开时Hystrix可以提供一个备用的降级方法或返回默认值以保证系统继续正常运行。开发者可以定义降级逻辑例如返回缓存数据、执行简化的逻辑或调用其他可靠的服务以提供有限但可用的功能。 import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;/**
* 服务降级示例
**/
Service
public class MyService {HystrixCommand(fallbackMethod fallbackMethod)public String myServiceMethod() {// 实际的服务调用逻辑// ...}public String fallbackMethod() {// 降级方法的逻辑当服务调用失败时会执行此方法// 可以返回默认值或执行其他备用逻辑// ...}
} 请求缓存Request CachingHystrix可以缓存对同一请求的响应结果当下次请求相同的数据时直接从缓存中获取避免重复的网络请求提高系统的性能和响应速度。 请求合并Request CollapsingHystrix可以将多个并发的请求合并为一个批量请求减少网络开销和资源占用。这对于一些高并发的场景可以有效地减少请求次数提高系统的性能。 实时监控和度量Real-time Monitoring and MetricsHystrix提供了实时监控和度量功能可以对服务的执行情况进行监控和统计包括错误率、响应时间、并发量等指标。通过监控数据可以及时发现和解决服务故障或性能问题。 线程池隔离Thread Pool IsolationHystrix将每个依赖服务的请求都放在独立的线程池中执行避免因某个服务的故障导致整个系统的线程资源耗尽。通过线程池隔离可以提高系统的稳定性和可用性。
24.Sentinel怎么实现限流的
Sentinel通过动态管理限流规则根据定义的规则对请求进行限流控制。具体实现步骤如下 定义资源在Sentinel中资源可以是URL、方法等用于标识需要进行限流的请求。
// 原本的业务方法.
SentinelResource(blockHandler blockHandlerForGetUser)
public User getUserById(String id) {throw new RuntimeException(getUserById command failed);
}// blockHandler 函数原方法调用被限流/降级/系统保护的时候调用
public User blockHandlerForGetUser(String id, BlockException ex) {return new User(admin);
} 配置限流规则在Sentinel的配置文件中定义资源的限流规则。规则可以包括资源名称、限流阈值、限流模式令牌桶或漏桶等。
private static void initFlowQpsRule() {ListFlowRule rules new ArrayList();FlowRule rule1 new FlowRule();rule1.setResource(resource);// Set max qps to 20rule1.setCount(20);rule1.setGrade(RuleConstant.FLOW_GRADE_QPS);rule1.setLimitApp(default);rules.add(rule1);FlowRuleManager.loadRules(rules);
} 监控流量Sentinel会监控每个资源的流量情况包括请求的QPS每秒请求数、线程数、响应时间等。 限流控制当请求到达时Sentinel会根据资源的限流规则判断是否需要进行限流控制。如果请求超过了限流阈值则可以进行限制、拒绝或进行其他降级处理。 Sentinel采用的什么限流算法
Sentinel使用滑动窗口限流算法来实现限流。
滑动窗口限流算法是一种基于时间窗口的限流算法。它将一段时间划分为多个时间窗口并在每个时间窗口内统计请求的数量。通过动态地调整时间窗口的大小和滑动步长可以更精确地控制请求的通过速率。 Sentinel怎么实现集群限流
Sentinel利用了Token Server和Token Client的机制来实现集群限流。
开启集群限流后Client向Token Server发送请求Token Server根据配置的规则决定是否限流。T 服务网关
25.什么是API网关
API网关API Gateway是一种中间层服务器用于集中管理、保护和路由对后端服务的访问。它充当了客户端与后端服务之间的入口点提供了一组统一的接口来管理和控制API的访问。 API网关的主要功能包括 路由转发API网关根据请求的URL路径或其他标识将请求路由到相应的后端服务。通过配置路由规则可以灵活地将请求分发给不同的后端服务。 负载均衡API网关可以在后端服务之间实现负载均衡将请求平均分发到多个实例上提高系统的吞吐量和可扩展性。 安全认证与授权API网关可以集中处理身份验证和授权确保只有经过身份验证的客户端才能访问后端服务。它可以与身份提供者如OAuth、OpenID Connect集成进行用户认证和授权操作。 缓存API网关可以缓存后端服务的响应减少对后端服务的请求次数提高系统性能和响应速度。 监控与日志API网关可以收集和记录请求的指标和日志提供实时监控和分析帮助开发人员和运维人员进行故障排查和性能优化。 数据转换与协议转换API网关可以在客户端和后端服务之间进行数据格式转换和协议转换如将请求从HTTP转换为WebSocket或将请求的参数进行格式转换以满足后端服务的需求。 API版本管理API网关可以管理不同版本的API允许同时存在多个API版本并通过路由规则将请求正确地路由到相应的API版本上。
……
通过使用API网关可以简化前端与后端服务的交互提供统一的接口和安全性保障同时也方便了服务治理和监控。它是构建微服务架构和实现API管理的重要组件之一。
26.SpringCloud可以选择哪些API网关
使用SpringCloud开发可以采用以下的API网关选型 Netflix Zuul已停止更新Netflix Zuul是Spring Cloud早期版本中提供的默认API网关。它基于Servlet技术栈可以进行路由、过滤、负载均衡等功能。然而自2020年12月起Netflix宣布停止对Zuul 1的维护转而支持新的API网关项目。 Spring Cloud GatewaySpring Cloud Gateway是Spring Cloud官方推荐的API网关取代了Netflix Zuul。它基于非阻塞的WebFlux框架充分利用了响应式编程的优势并提供了路由、过滤、断路器、限流等特性。Spring Cloud Gateway还支持与Spring Cloud的其他组件集成如服务发现、负载均衡等。 KongKong是一个独立的、云原生的API网关和服务管理平台可以与Spring Cloud集成。Kong基于Nginx提供了强大的路由、认证、授权、监控和扩展能力。它支持多种插件和扩展可满足不同的API管理需求。 APISIXAPISIX基于Nginx和Lua开发它具有强大的路由、流量控制、插件扩展等功能。APISIX支持灵活的配置方式可以根据需求进行动态路由、负载均衡和限流等操作
27.Spring Cloud Gateway核心概念 在Spring Cloud Gateway里有三个关键组件 Route路由路由是Spring Cloud Gateway的基本构建块它定义了请求的匹配规则和转发目标。通过配置路由可以将请求映射到后端的服务实例或URL上。路由规则可以根据请求的路径、方法、请求头等条件进行匹配并指定转发的目标URI。 Predicate断言断言用于匹配请求的条件如果请求满足断言的条件则会应用所配置的过滤器。Spring Cloud Gateway提供了多种内置的断言如Path路径匹配、Method请求方法匹配、Header请求头匹配等同时也支持自定义断言。 Filter过滤器过滤器用于对请求进行处理和转换可以修改请求、响应以及执行其他自定义逻辑。Spring Cloud Gateway提供了多个内置的过滤器如请求转发、请求重试、请求限流等。同时也支持自定义过滤器可以根据需求编写自己的过滤器逻辑。
我们再来看下Spring Cloud Gateway的具体工作流程 又有两个比较重要的概念 Gateway Handler网关处理器网关处理器是Spring Cloud Gateway的核心组件负责将请求转发到匹配的路由上。它根据路由配置和断言条件进行路由匹配选择合适的路由进行请求转发。网关处理器还会依次应用配置的过滤器链对请求进行处理和转换。 Gateway Filter Chain网关过滤器链网关过滤器链由一系列过滤器组成按照配置的顺序依次执行。每个过滤器可以在请求前、请求后或请求发生错误时进行处理。过滤器链的执行过程可以修改请求、响应以及执行其他自定义逻辑。
链路追踪
28.为什么要用微服务链路追踪
在微服务中有的山下游可能有十几个服务如果某一环出了问题排查起来非常困难所以就需要进行链路追踪来帮助排查问题。 通过链路追踪可以可视化地追踪请求从一个微服务到另一个微服务的调用情况。除了排查问题链路追踪黑还可以帮助优化性能可视化依赖关系、服务监控和告警。
29.SpringCloud可以选择哪些微服务链路追踪方案
Spring Cloud提供了多种选择的微服务链路追踪方案。以下是一些常用的方案 ZipkinZipkin 是一个开源的分布式实时追踪系统由 Twitter 开发并贡献给开源社区。Spring Cloud Sleuth 提供了与 Zipkin 的集成可以通过在微服务中添加相应的依赖和配置将追踪信息发送到 Zipkin 服务器并通过 Zipkin UI 进行可视化展示和查询。 JaegerJaeger 是 Uber 开源的分布式追踪系统也被纳入了 CNCF云原生计算基金会的维护。通过使用 Spring Cloud Sleuth 和 Jaeger 客户端库可以将追踪信息发送到 Jaeger 并进行可视化展示和查询。 SkyWalkingApache SkyWalking 是一款开源的应用性能监控与分析系统提供了对 Java、.NET 和 Node.js 等语言的支持。它可以与 Spring Cloud Sleuth 集成将追踪数据发送到 SkyWalking 服务器进行可视化展示和分析 PinpointPinpoint 是 Naver 开源的分布式应用性能监控系统支持 Java 和 .NET。它提供了与 Spring Cloud Sleuth 的集成可以将追踪数据发送到 Pinpoint 服务器并通过其 UI 进行分析和监控。这些方案都可以与 Spring Cloud Sleuth 进行集成Spring Cloud Sleuth 是 Spring Cloud 中的一个组件提供了在微服务调用时生成追踪信息的能力。
这些方案都可以与 Spring Cloud Sleuth 进行集成Spring Cloud Sleuth 是 Spring Cloud 中的一个组件提供了在微服务调用时生成追踪信息的能力。 分布式事务
分布式事务可以查看前面的分布式基础篇。
30.Seata支持哪些模式的分布式事务
Seata以下几种模式的分布式事务 ATAtomikos模式AT模式是Seata默认支持的模式也是最常用的模式之一。在AT模式下Seata通过在业务代码中嵌入事务上下文实现对分布式事务的管理。Seata会拦截并解析业务代码中的SQL语句通过对数据库连接进行拦截和代理实现事务的管理和协调。 TCCTry-Confirm-Cancel模式TCC模式是一种基于补偿机制的分布式事务模式。在TCC模式中业务逻辑需要实现Try、Confirm和Cancel三个阶段的操作。Seata通过调用业务代码中的Try、Confirm和Cancel方法并在每个阶段记录相关的操作日志来实现分布式事务的一致性。 SAGA模式SAGA模式是一种基于事件驱动的分布式事务模式。在SAGA模式中每个服务都可以发布和订阅事件通过事件的传递和处理来实现分布式事务的一致性。Seata提供了与SAGA模式兼容的Saga框架用于管理和协调分布式事务的各个阶段。 31.了解Seata的实现原理吗
Seata的实现原理主要包括三个核心组件事务协调器Transaction Coordinator、事务管理器Transaction Manager和资源管理器Resource Manager。 事务协调器Transaction Coordinator事务协调器负责协调和管理分布式事务的整个过程。它接收事务的开始和结束请求并根据事务的状态进行协调和处理。事务协调器还负责记录和管理事务的全局事务 IDGlobal Transaction ID和分支事务 IDBranch Transaction ID。 事务管理器Transaction Manager事务管理器负责全局事务的管理和控制。它协调各个分支事务的提交或回滚并保证分布式事务的一致性和隔离性。事务管理器还负责与事务协调器进行通信并将事务的状态变更进行持久化。 资源管理器Resource Manager资源管理器负责管理和控制各个参与者Participant的事务操作。它与事务管理器进行通信并根据事务管理器的指令执行相应的事务操作包括提交和回滚。 Seata的实现原理基于两阶段提交Two-Phase Commit协议具体的机制如下 一阶段在事务提交的过程中首先进行预提交阶段。事务协调器向各个资源管理器发送预提交请求资源管理器执行相应的事务操作并返回执行结果。在此阶段业务数据和回滚日志记录在同一个本地事务中提交并释放本地锁和连接资源。 二阶段在预提交阶段成功后进入真正的提交阶段。此阶段主要包括提交异步化和回滚反向补偿两个步骤 提交异步化事务协调器发出真正的提交请求各个资源管理器执行最终的提交操作。这个阶段的操作是非常快速的以确保事务的提交效率。 回滚反向补偿如果在预提交阶段中有任何一个资源管理器返回失败结果事务协调器发出回滚请求各个资源管理器执行回滚操作利用一阶段的回滚日志进行反向补偿。
Seata的事务执行流程是什么样的
Seata事务的执行流程可以简要概括为以下几个步骤 事务发起方Transaction Starter发起全局事务事务发起方是指发起分布式事务的应用程序或服务。它向Seata的事务协调器发送全局事务的开始请求生成全局事务IDGlobal Transaction ID。 事务协调器创建全局事务记录事务协调器接收到全局事务的开始请求后会为该事务创建相应的全局事务记录并生成分支事务IDBranch Transaction ID。 分支事务注册事务发起方将全局事务ID和分支事务ID发送给各个参与者Participant即资源管理器。参与者将分支事务ID注册到本地事务管理器并将事务的执行结果反馈给事务协调器。 执行业务逻辑在分布式事务的上下文中各个参与者执行各自的本地事务即执行业务逻辑和数据库操作。 预提交阶段事务发起方向事务协调器发送预提交请求事务协调器将预提交请求发送给各个参与者。 执行本地事务确认参与者接收到预提交请求后执行本地事务的确认操作并将本地事务的执行结果反馈给事务协调器。 全局事务提交或回滚事务协调器根据参与者反馈的结果进行判断如果所有参与者的本地事务都执行成功事务协调器发送真正的提交请求给参与者参与者执行最终的提交操作如果有任何一个参与者的本地事务执行失败事务协调器发送回滚请求给参与者参与者执行回滚操作。 完成全局事务事务协调器接收到参与者的提交或回滚结果后根据结果更新全局事务的状态并通知事务发起方全局事务的最终结果。
全局事务ID和分支事务ID是怎么传递的
全局事务ID和分支事务ID在分布式事务中通过上下文传递的方式进行传递。常见的传递方式包括参数传递、线程上下文传递和消息中间件传递。具体的传递方式可以根据业务场景和技术选型进行选择和调整。
Seata的事务回滚是怎么实现的 Seata的事务回滚是通过回滚日志实现的。每个参与者在执行本地事务期间生成回滚日志记录了对数据的修改操作。
当需要回滚事务时事务协调器向参与者发送回滚请求参与者根据回滚日志中的信息执行撤销操作将数据恢复到事务开始前的状态。
回滚日志的管理和存储是Seata的核心机制可以选择将日志存储在不同的介质中。通过回滚日志的持久化和恢复Seata确保了事务的一致性和恢复性。
服务监控
32.你们的服务怎么做监控和告警
我们使用Prometheus和Grafana来实现整个微服务集群的监控和告警 PrometheusPrometheus 是一个开源的监控系统具有灵活的数据模型和强大的查询语言能够收集和存储时间序列数据。它可以通过HTTP协议定期拉取微服务的指标数据并提供可扩展的存储和查询功能。 GrafanaGrafana 是一个开源的可视化仪表板工具可以与 Prometheus 结合使用创建实时和历史数据的仪表板。Grafana 提供了丰富的图表和可视化选项可以帮助用户更好地理解和分析微服务的性能和状态。 33.你们的服务怎么做日志收集
日志收集有很多种方案我们用的是ELK ElasticsearchElasticsearch是一个分布式搜索和分析引擎用于存储和索引大量的日志数据。它提供了快速的搜索和聚合功能可以高效地处理大规模的日志数据。 LogstashLogstash是一个用于收集、过滤和转发日志数据的工具。它可以从各种来源如文件、网络、消息队列等收集日志数据并对数据进行处理和转换然后将其发送到Elasticsearch进行存储和索引。 KibanaKibana是一个用于日志数据可视化和分析的工具。它提供了丰富的图表、仪表盘和搜索功能可以帮助用户实时监控和分析日志数据发现潜在的问题和趋势。
简单说这三者里Elasticsearch提供数据存储和检索能力Logstash负责将日志收集到ESKibana负责日志数据的可视化分析。
使用ELK进行微服务日志收集的一般流程如下 在每个微服务中配置日志输出将微服务的日志输出到标准输出stdout或日志文件。 使用Logstash收集日志配置Logstash收集器通过配置输入插件如文件输入、网络输入等监听微服务的日志输出并进行过滤和处理。 将日志数据发送到Elasticsearch配置Logstash的输出插件将经过处理的日志数据发送到Elasticsearch进行存储和索引。 使用Kibana进行可视化和分析通过Kibana连接到Elasticsearch创建仪表盘、图表和搜索查询实时监控和分析微服务的日志数据。
除了应用最广泛的ELK还有一些其它的方案比如Fluentd、Graylog、Loki、Filebeat一些云厂商也提供了付费方案比如阿里云的sls。