微服务16:微服务治理之熔断、限流

服务,治理,熔断,限流 · 浏览次数 : 450

小编点评

## Content Generation Summary **Introduction** * The context describes the challenges of handling high traffic situations, especially during peak shopping seasons. * The article focuses on strategies to ensure service stability and resilience when dealing with extreme traffic. **Main Points** * **Multiple Failure Modes:** * Limit/Refund: Avoids overwhelming the service with excessive requests. * Circuit Breaker: Stops flow to an instance when it exceeds the predicted load. * **Strategies Implementation:** * Service Mesh: Provides flexible traffic management capabilities. * DestinationRule: Defines rules for routing traffic based on various conditions. **Strategies in Detail** * **Limit/Refund:** * Uses techniques like token buckets or leaky buffers to limit the number of requests allowed per second. * This prevents oversubscription and avoids cascading failures. * **Circuit Breaker:** * Cuts off flow to an instance when it experiences performance degradation or abnormal error rate. * This protects the service from being overloaded and prevents cascading failures. * **Service Mesh:** * Provides advanced traffic management capabilities like traffic splitting and service mesh rules. * This allows for dynamic load balancing and prioritizes traffic based on business logic. **Conclusion** * The article highlights the importance of choosing the right failure prevention and recovery mechanisms to handle peak traffic situations effectively. * Different techniques, such as limit/refund and circuit breakers, offer various levels of protection and performance optimization. * By implementing a comprehensive strategy, we can ensure service stability, maintain high availability, and prevent system crashes during peak traffic periods.

正文

★微服务系列

微服务1:微服务及其演进史
微服务2:微服务全景架构
微服务3:微服务拆分策略
微服务4:服务注册与发现
微服务5:服务注册与发现(实践篇)
微服务6:通信之网关
微服务7:通信之RPC
微服务8:通信之RPC实践篇(附源码)
微服务9:服务治理来保证高可用
微服务10:系统服务熔断、限流
微服务11:熔断、降级的Hystrix实现(附源码)
微服务12:流量策略
微服务13:云基础场景下流量策略实现原理
微服务14:微服务治理之重试
微服务15:微服务治理之超时

1 介绍

在互联网电商场景中,我们经常会遇到有计划的流量洪峰,比如 双11、618购物节,积分竞拍和定时抢购的疯狂场景。
这种是在预期内的,知道会发生并有一定的准备。而那些预期之外的突发流量异常,才是真正给我们带来挑战的部分,比如:

  • 硬件故障:如服务器宕机,机房断电,光纤被挖断等。
  • 缓存击穿:一般发生在应用重启导致的缓存失效,以及短时间内大量缓存过期失效时。大量的无法命中,使请求直击后端服务,造成服务提供者超负荷运行,引起服务不可用。
  • 程序BUG:如程序逻辑导致内存泄漏;JVM长时间FullGC等。
  • 新功能上线:未经过评估,导致非预期流量上涨 ( 某次功能上线,未进行有效的容量评估,导致ws长连接翻数倍)。
    单个服务因为流量变化变得不可用,这种不可用如果持续可能是出现水平和垂直双重的扩散。
    在分布式系中的某个服务故障沿着调用链向上传递,出现整体的服务雪崩,如下图,这种情况如何提升系统的稳定性和健壮性是我们首要考虑的问题。
    image

2 异常流量洪峰的常见治理手段

一般是采用限流或者熔断:避免预期外流量或故障导致的流量洪峰引起服务雪崩,沿调用向上传递,造成整个链路崩溃。
image

2.1 限流手段

限流部分,对来路流量做了限制,不允许超过预期峰值。执行过程说明:

  • 这边以示例服务 Service A 向 Service B 发起访问为例子。
  • 当Service A 感知到 Service B 的某个实例响应时间变慢或者异常返回变多之后,开始对Service B 发起限流。
  • 比如使用令牌桶原理(定速流入),每秒钟只提供N个令牌,每个请求携带一个令牌标识前行,用完即限行。
    image
  • 或者使用漏桶算法(漏斗池算法),无论请求多少,请求的速率有多大,都按照固定的速率流出,对应的就是服务按照固定的速率处理请求。
    image
  • 这样就不会超过预期我们的服务能够承载的QPS,避免被打穿的风险 。

2.2 熔断手段

熔断部分,则是直接断流,流量就不会再负载过去了。执行过程说明:

  • 这边以示例服务 Service A 向 Service B 发起访问为例子。
  • 当Service A 感知到 Service B 的某个实例响应时间变慢或者异常数不符合我们预期的,开始对Service B 发起熔断。
  • 熔断并不是对整个服务都熔断掉,而是对服务中的某个实例进行熔断,其他健康实例还是可以负载流量的。
  • 这样就避免了我们的流量持续打到的异常的实例上,造成请求有损的体验 。

3 策略实现(Service Mesh方案)

注释比较清晰了,这边就不解释了。

# DestinationRule
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: xx-svc-b-vs
  namespace: kube-ns-xx
spec:
  host: svc_b.google.com # 治理发往svc_b服务的流量
  trafficPolicy:
    loadBalancer:
      simple: ROUND_ROBIN
    connectionPool:
      http:
        http1MaxPendingRequests: 50000 # 等待队列,超额熔断
        http2MaxRequests: 40000 # http请求数限制,超额熔断
        maxRetries: 2 # 同一个请求的超时次数上限限制,超过即熔断。应用于当前所有的host。
      tcp:
        maxConnections: 40000  # 后端集群总的TCP连接数,超额熔断

4 总结

云基础场景下的治理手段各种各样,这边讲解了初级版的熔断/限流方案,让用户有一个更优良的使体验。
同时在系统大面积崩溃的时候,进行系统保护,不至于全面崩塌。
在后续的章节我们逐一了解下异常驱逐、异常自动重启等高级用法。

与微服务16:微服务治理之熔断、限流相似的内容:

微服务16:微服务治理之熔断、限流

# ★微服务系列 [微服务1:微服务及其演进史](https://www.cnblogs.com/wzh2010/p/14940280.html "微服务1:微服务及其演进史") [微服务2:微服务全景架构 ](https://www.cnblogs.com/wzh2010/p/15311192.h

[转帖]Skywalking介绍

https://www.jianshu.com/p/ffa7ddcda4ab/ 1.1 2022.01.23 17:23* 字数 1733 阅读 129682评论 0喜欢 16 微服务架构已经是一个很通用的系统架构,常见的技术栈如下图所示,这张架构图基本涵括了当前微服务体系下的各种技术栈,可能不同的

中台框架模块开发实践-代码生成器的添加及使用

前言 之前已经分享过几篇关于中台项目框架的文章,相关介绍就不再赘述 所谓工欲善其事必先利其器,一个项目拥有一个代码生成器是很有必要的,能够大大的节省时间,减少手误,提供开发效率(ps:特别小团队搞微服务但是没有代码生成器,简直要了老命) 本文将分享如何在中台框架项目 Admin.Core 中添加代码

玩转 PI 系列-看起来像服务器的 ARM 开发板矩阵-Firefly Cluster Server

## 前言 基于我个人的工作内容和兴趣,想要在家里搞一套服务器集群,用于容器/K8s 等方案的测试验证。 考虑过使用二手服务器,比如 Dell R730, 还搞了一套配置清单,如下: * Dell R730 * 3.5 尺寸规格硬盘 * CPU: 2686v4*2 * 内存:16g*8 * 存储:4

微服务架构必备技术栈:万变不离其宗的奥义!

前言 之前我们说过,微服务是一种软件设计、架构思想。当然,里面也包含了相关技术点要解决当前要务。学习微服务,我们不能空口而谈,一定要落实到具体的技术栈上。 当今使用比较多两个技术体系,一个是Java,另外一个就是Net。 废话不多说,今天我就把相关“微服务架构”所用到的技术栈罗列出来。(以下是微软相

微服务新体验之Aspire初体验

安装aspire 查看vs版本 我这的版本是17.9.7,不支持aspire,所以需要升级 更新VS 点击 帮助->检查更新 点击更新 静等安装升级 创建aspire项目 项目创建成功,如下图 运行Aspire项目 在AspireApp1.AppHost的launchSettings.json文件中

微服务实践k8s&dapr开发部署实验(3)订阅发布

自托管模式运行dapr 新建订阅webapi项目,取名为backend 项目增加docker支持,取消https支持 修改Program.cs var builder = WebApplication.CreateBuilder(args); builder.Services.AddControll

微服务实践k8s&dapr开发部署实验(2)状态管理

新建webapi项目 建项目时取消https支持,勾选docker支持, Program.cs中注释下面语句,这样部署后才能访问Swagger // Configure the HTTP request pipeline. //if (app.Environment.IsDevelopment())

微服务下认证授权框架的探讨

前言 市面上关于认证授权的框架已经比较丰富了,大都是关于单体应用的认证授权,在分布式架构下,使用比较多的方案是--<应用网关>,网关里集中认证,将认证通过的请求再转发给代理的服务,这种中心化的方式并不适用于微服务,这里讨论另一种方案--<认证中心>,利用jwt去中心化的特性,减轻认证中心的压力,有理

微服务实践k8s&dapr开发部署实验(1)服务调用

前置条件 安装docker与dapr: 手把手教你学Dapr - 3. 使用Dapr运行第一个.Net程序 安装k8s dapr 自托管模式运行 新建一个webapi无权限项目 launchSettings.json中applicationUrl端口改成5001,如下: "applicationUr