最近大家经常被熔断洗脑,股市的动荡,让熔断再次出现在大家眼前。微服务中的熔断即服务提供方在一定时间内,因为访问压力太大或依赖异常等原因,而出现异常返回或慢响应,熔断即停止该服务的访问,防止发生雪崩效应。轻舟网关基于Envoy实现,在社区熔断思路上进行扩展。本文从Istio中熔断说起,拨云见日,漫谈轻舟网关熔断。

从熔断说起

最近大家经常被熔断洗脑,股市的动荡,有幸两周内见证了美股的四次熔断。那究竟什么是熔断呢,在股票界熔断实际上就是自动停盘,股市在跌到一定的程度后,暂停股票交易。对比股市,微服务中的熔断即服务提供方在一定时间内,因为访问压力太大或依赖异常等原因,而出现异常返回或响应变慢等。熔断即停止对该服务的调用,防止发生“雪崩效应”。从服务网关的角度看,熔断即是在网关侧阻止对服务提供方(upstream)的调用。本文从服务网关的角度窥探ISTIO中如何进行熔断,保护后端业务。

Istio熔断

Istio提供了丰富的熔断手段,通过异常点检测以及连接池配置起到保护后端的效果。异常点检测动态确定上游集群中的健康状态,如果出现连续访问异常,则将异常后端从负载均衡实例中驱逐,在一段时间内不向其中打流量。过一段时间,加入到负载均衡集群中,继续提供服务,若还是不正常,加大隔离时间。ISTIO提供了主动和被动健康检查,异常检测可以认为是被动的的健康检查,数据面Envoy提供了主动健康检查,在上游集群上配置健康检查接口,主动和被动一起使用,作为一个整体的健康检查方案,保障上游集群高可用。

异常点检测在控制面配置在DestionRule CRD中,对应到数据面Envoy中体现在Cluster上的配置。主要的配置项包括:

1、consecuitiveErrors:连续错误次数。对于HTTP服务,502、503、504会被认为异常,TPC服务,连接超时即异常
2、intervals:驱逐的时间间隔,默认是10秒
3、baseEjectionTime:最小驱逐时间。驱逐时间会随着错误次数增加而增加。即错误次数*最小驱逐时间
4、maxEjectionPercent:负载均衡池中可以被驱逐的实例的最大比例。以免某个接口瞬时不可用,导致太多实例被驱逐,进而导致服务整体全部不可用。

同时Istio还提供了连接池配置,通过针对四层TCP以及七层HTTP连接的配置,进行客户端访问的限流。具体的配置主要包括:TCP连接池配置以及HTTP连接池配置。配置项主要包括:

HTTP连接池配置和TCP连接设置配合使用。对应到数据面Envoy上根据业务属性进行划分,一部分划分为cluster.circuit_breakers,另一部分属于cluster的配置。

Istio配置

 Envoy配置

含义

备注

 maxConnection  cluster.circuit_breakers.max_connections Envoy为上游集群建立的最大连接数  
 http1MaxPendingRequests  cluster.circuit_breakers.max_pending_requests 最大等待HTTP请求数,默认1024

如果超过,cluster的upstream_rq_pending_overflow计数器增加

 http2MaxRequests  cluster.circuit_breaker.maxRequests HTTP2最大连接数  仅适用HTTP2, HTTP1由maxConnection控制。如果超出,cluster的upstream_rq_pending_overflow计数器增加,可以由stat查看
 maxRetries  cluster.circuit_breaker.max_retries 最大重试次数 在指定时间内,集群所有主机能够执行的最大重试次水。如果超出,cluster的upstream_rq_retry_overflow计数器增加
connectionTimeOut cluster.connection_timeout_ms  cluster.connection_timeout_ms  
 maxRequestsPerConnection  cluster.max_request_per_connection 每个连接最大请求数  

Istio熔断与Hystrix熔断

Hystrix是微服务领域成熟的熔断框架,是Netflix开源的熔断框架。不过从18年底已经不在积极维护了。Hystrix对请求进行封装,相关的逻辑在独立的线程中运行,通过线程池达到资源隔离的效果。Hystrix提供了熔断能力,具备自动检测与恢复,断路开关在Open,Half-Open以及Closed状态间进行自动切换;同时提供了FallBack方法,便于用户在后端服务熔断情况下进行降级。

任何架构都有不同的使用场景,正如没有完美的架构只有合适的架构一样。灵活的配置以及可扩展性使得Hystrix融合在SpringCloud体系下,为SpringCloud微服务框架提供熔断功能。但是与之带来的是在使用Hystrix过程中,必须引入Hystrix依赖包。可以把Hystrix认为是一个白盒,开发人员可以针对业务进行相关的定制,包括降级方法的编写等。虽然,可以通过SDK模式从代码上解耦业务和相关熔断治理,但是业务和SDK还是需要一起编译。同时,Hystrix仅适用于java语言。

而Istio的熔断对业务完全是透明的,无需对业务有任何依赖;在sidecar模式下,做到和业务集群无缝连接。不过Istio的熔断更多是基于集群进行配置,熔断力度相较于某些业务场景还有一定的薄弱。

熔断示例
轻舟网关提供了丰富的熔断配置页面,通过轻舟网关的控制台,可以配置连接池配置。具体配置如下:TCP最大连接数配置为1,HTTP最大pending请求数配置为1。

通过控制台的配置,可以将具体的配置转换成Istio中VirtualService的trafficPolicy的配置。具体如下

串行请求5次服务接口,查看数据面envoy stat的状态,可以看到5次请求均返回200。

并发5次请求服务接口,客户端收到三个503,2个200状态返回,查看数据面envoy stat可以看到对应的2xx为2次,5xx为三次。5xx产生的原因为upstream_rq_pending_overflow。即因为max_pending数配置为1 ,请求被熔断。

轻舟网关熔断
轻舟网关基于Istio的熔断实现了服务级别的熔断限流。提供了服务维度的主动健康检查、被动健康检查以及连接池配置。同时,轻舟网关在服务的基础上,扩展了路由级别的熔断,结合hystrix的思路,使用滑动窗口来统计错误率和RT。实现了熔断插件,作用于路由和virtualhost级别。具体的流程如下:

轻舟网关同时提供了丰富的限流策略起到对后端业务的保护,基于rate-limit-server实现。提供基于百分比请求的流控,基于条件的频控,包括Header等维度的限流,具体的配置页面如下:这是一个最简单的配置,配置为请求Header中带有IP:127.0.0.1的请求,每分钟请求100次,超过100次触发限流,返回429。

轻舟网关目前提供了丰富的网关10几种插件,扩展envoy原生路由功能。包括缓存,cors,jsonp,限流,动态降级,静态降级,熔断,鉴权等插件。有兴趣的同学可以了解下轻舟网关。

从ISTIO熔断说起-轻舟网关熔断的更多相关文章

  1. spring cloud Hystix熔断机制--基本熔断配置和Fegin client熔断配置

    所谓的熔断机制和日常生活中见到电路保险丝是非常相似的,当出现了问题之后,保险丝会自动烧断,以保护我们的电器, 那么如果换到了程序之中呢? 当现在服务的提供方出现了问题之后整个的程序将出现错误的信息显示 ...

  2. Istio实践(4)- 故障注入、熔断及ServiceEntry

    前言:接上一篇istio多服务应用部署及调用,本文介绍通过流量管理(故障注入.请求超时等)以及ServiceEntry外部服务部署应用 1.设置服务延迟 修改springbootapp-vs-v1.y ...

  3. 利用Spring Cloud实现微服务- 熔断机制

    1. 熔断机制介绍 在介绍熔断机制之前,我们需要了解微服务的雪崩效应.在微服务架构中,微服务是完成一个单一的业务功能,这样做的好处是可以做到解耦,每个微服务可以独立演进.但是,一个应用可能会有多个微服 ...

  4. spring cloud 2.x版本 Gateway熔断、限流教程

    前言 本文采用Spring cloud本文为2.1.8RELEASE,version=Greenwich.SR3 本文基于前两篇文章eureka-server.eureka-client.eureka ...

  5. Spring Cloud & Alibaba 实战 | 第十二篇: 微服务整合Sentinel的流控、熔断降级,赋能拥有降级功能的Feign新技能熔断,实现熔断降级双剑合璧(JMeter模拟测试)

    目录 一. Sentinel概念 1. 什么是Sentinel? 2. Sentinel功能特性 3. Sentinel VS Hystrix 二. Docker部署Sentinel Dashboar ...

  6. 重新整理 .net core 实践篇————熔断与限流[三十五]

    前言 简单整理一下熔断与限流,跟上一节息息相关. 正文 polly 的策略类型分为两类: 被动策略(异常处理.结果处理) 主动策略(超时处理.断路器.舱壁隔离.缓存) 熔断和限流通过下面主动策略来实现 ...

  7. Hystrix 熔断机制原理

    相关配置 circuitBreaker.enabled 是否开启熔断 circuitBreaker.requestVolumeThreshold 熔断最低触发请求数阈值 circuitBreaker. ...

  8. 玩转Spring Cloud之熔断降级(Hystrix)与监控

    本文内容导航目录: 前言:解释熔断降级一.搭建服务消费者项目,并集成 Hystrix环境 1.1.在POM XML中添加Hystrix依赖(spring-cloud-starter-netflix-h ...

  9. 【五】服务熔断、降级 —— Hystrix(豪猪)

    分布式系统面临的问题 复杂分布式体系结构中的应用程序有数十个依赖,每个依赖关系将在某些时候将不可避免地失败. 服务雪崩 多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务 B和微服务 ...

随机推荐

  1. 手机预装APP“死灰复燃”,这颗“毒瘤”到底怎么了

    ​ ​ 离全新智能手机集中发布的8月底.9月初这个时间段越来越近了,iPhone 8等重磅新机也为互联网媒体贡献了足够的流量和热度.但就在大众聚焦于新机时,一个困扰很多人的问题再度冒出头--智能手机上 ...

  2. ansible使用指北(二)

    前言在上一篇文章里我们了解了ansible的常用模块,今天我们来了解下ansible-playbook,ansbile-playbook是一系统ansible命令的集合,其利用yaml 语言编写,an ...

  3. MIZ702N开发环境的准备1

    前言 最近由于工作需要开始接手基于MIZ702的硬件平台的Linux的开发,仔细想想,工作这么久,这好像还是我第一次接手嵌入式Liunx相关的工作.这几天拿到开发板,开始了阅读文档.安装Ubuntu虚 ...

  4. 3D打印如何重组制造格局?

    ​全球化的竞争正变得毫无底线,国与国之间只有利益,没有同情,也就是说美国品牌想把自己的工厂移回本土,是不会考虑中国工人的生存现状的,更不会顾及这里的GDP和环境问题,甚至还会依靠经济能力去奴役其他国家 ...

  5. Spring aop(1)--- 寻找切面和代理对象执行流程源码分析

    1.基于注解,首先我们是通过@EnableAspectJAutoProxy()这个注解开起AOP功能,这个注解会导入AspectJAutoProxyRegistrar组件从而将AnnotationAw ...

  6. GitLab-CI部署及踩坑总结

    转载请注明出处:https://www.cnblogs.com/shining5/p/8863063.html 部署GitLab-CI 简介 GitLab_CI(gitlab continuous i ...

  7. VUE深入浅出(学习过程)

    VUE 2020年02月26日06:27:10 复习过Java8新特性之后开始学习VUE. 了解node了之后,来了解一下VUE.针对于学习VUE用什么开发工具这个问题上,我这里有vsCode和web ...

  8. 前端每日实战:113# 视频演示如何用纯 CSS 创作一个赛车 loader

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/mGdXGJ 可交互视频 此视频是可 ...

  9. http相关知识点回顾

    一.概述 1.什么是HTTP HTTP是一种可以获取HTML这样的网络资源的一种通讯协议protocol.是在WEB上进行数据交换的基础,是一种客户端--服务器协议.HTTP是一种可扩展的应用层协议, ...

  10. Python 绘图 - Bokeh 柱状图小试(Stacked Bar)

    背景 在 Bokeh 初探之后,学习使用它来做个图 目标 做一个柱状图,支持多个 y 数据源,即有堆叠效果的柱状图 stacked bar 实现 单数据源 简单的柱状图 参考 Handling Cat ...