最近大家经常被熔断洗脑,股市的动荡,让熔断再次出现在大家眼前。微服务中的熔断即服务提供方在一定时间内,因为访问压力太大或依赖异常等原因,而出现异常返回或慢响应,熔断即停止该服务的访问,防止发生雪崩效应。轻舟网关基于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. Python Mock 的入门

    Mock是什么 Mock这个词在英语中有模拟的这个意思,因此我们可以猜测出这个库的主要功能是模拟一些东西.准确的说,Mock是Python中一个用于支持单元测试的库,它的主要功能是使用mock对象替代 ...

  2. 从游戏到汽车 “明星IP”的发财轨迹

    "明星IP"的发财轨迹" title="从游戏到汽车 "明星IP"的发财轨迹"> 移动互联网时代的开启,不仅彻底重构了大众生 ...

  3. 从头认识js-js的发展历史

    JavaScript简介 JavaScript诞生于1995年,当时,它的主要目的是处理以前有服务端语言(如Perl)负责的一些输入验证操作. JavaScript简史 1995年2月当时就职于Net ...

  4. 解决ionic2/ionic3轮播图切换页面或者点击过后不自动轮图

    我们在ionic2/ionic3开发的过程中会出现切换页面或者滑动切换轮播图出现轮播图不再轮播的情况,这其实需要一些配置. 首先在运用到轮播图的component中引入 import {ViewChi ...

  5. http相关知识点回顾

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

  6. vue+express+mysql项目总结(node项目部署阿里云通用)

    原文发布于我的个人博客上:原文点这里   前面经历千辛万苦,终于把博客的所有东西都准备好了,现在就只等部署了.下面我介绍下我的部署过程: 一.购买服务器和域名   如果需要域名(不用域名通过ip也可以 ...

  7. 一键制作镜像并发布到k8s

    *:first-child { margin-top: 0 !important; } .markdown-body>*:last-child { margin-bottom: 0 !impor ...

  8. CentOS安装docker ce的三种方式

    参考文章: CentOS安装docker ce的三种方式: 1.环境 CentOS Linux release 7.6.1810 (Core) 2.卸载旧版本 sudo yum remove dock ...

  9. javascript的垃圾回收机制与内存管理

    一.垃圾回收机制—GC Javascript具有自动垃圾回收机制(GC:Garbage Collecation),也就是说,执行环境会负责管理代码执行过程中使用的内存. 原理:垃圾收集器会定期(周期性 ...

  10. Css盒模型属性详解(margin和padding)

    Css盒模型属性详解(margin和padding) 大家好,我是逆战班的一名学员,今天我来给大家分享一下关于盒模型的知识! 关于盒模型的属性详解及用法 盒模型基本属性有两个:padding和marg ...