大家好,我是Tom哥~
互联网+ 时代,业务数字化已经蔓延到你能想到的各个行业。各种业务功能、营销玩法越来越多,系统也越来越复杂。
面对不断复杂的业务系统,脑子越来越不够用了
于是 聪明的人们
提出了 微服务
的设计思想
本着 复杂的事情简单化
的原则,我们将一个大的系统拆分成若干个子系统,每个 子系统
职责单一,按 DDD 的设计理念,承载一个子域的业务建设。
于是,人们可以将精力聚焦,专心完成某一个业务点的深度建设。
多个微服务系统之间通过 RPC
框架(如:dubbo、spring cloud、gRPC 等)完成了串联,但随着调用量越来越大,人们发现服务与服务之间的稳定性变得越来越重要
举个例子:
-
Service D 挂了,响应很慢
-
Service G 和 Service F ,都依赖 Service D,也会受到牵连,对外响应也会变慢
-
影响层层向上传递,Service A 和 Service B 也会被拖垮
-
最后,引发雪崩效应,系统的故障影响面会越来越大
为了解决这种问题,我们需要引入 熔断
机制。“当断则断,不受其乱。当断不断,必受其难”
什么是熔断?
熔断,其实是对调用链路中某个资源出现不稳定状态时(如:调用超时或异常比例升高),对这个资源的调用进行限制,让请求快速失败,避免影响到其它的资源而导致级联错误。
当资源被降级后,在接下来的降级时间窗口
内,对该资源的调用都自动熔断(默认是抛出 BlockException
)
目前市面上的熔断框架很多,如:Sentinel
、Hystrix
、Resilience4j
等,这些框架的设计理念都差不多。
本文重点讲下 Sentinel 是如何在项目中使用的
Sentinel (分布式系统的流量防卫兵) 是阿里开源的一套用于服务容错的综合性解决方案。它以流量为切入点, 从流量控制
、熔断降级
、系统负载保护
等多个维度来保护服务的稳定性。
核心分为两部分:
1、核心库(Java 客户端):能够运行在所有 Java 环境,对 Dubbo 、Spring Cloud 等框架也有较好的支持。
2、控制台(Dashboard):基于 Spring Boot 开发,打包后可以直接运行。
Sentinel 熔断种类:
-
RT 响应时间
-
异常数
-
异常比例
Sentinel 安装
首先,官网下载 sentinel