Sentinel—高可用流量管理框架/服务容错组件
一.为什么要用Sentinel?
1.微服务架构中当某服务挂掉的时候常见的原因有哪些?
1.异常没处理
比如DB连接失败,文件读取失败等
2.突然的流量激增
比如:用户经常会在京东、淘宝、天猫、拼多多等平台上参与商品的秒杀、限时抢购等优惠活动,也会在节假日使用12306 抢火车票、高铁票,甚至有时候还要帮助同事、朋友为他们家小孩拉投票、刷票,这些场景都无一例外的会引起服务器流量的暴涨,导致网页无法显示、APP反应慢、功能无法正常运转,甚至会引起整个网站的崩溃(服务雪崩)。
3.被其它服务拖垮
在微服务项目中,经常存在服务A调用服务B,服务B又调用服务C等微服务级联调用的场景,当服务C出现故障,服务B和服务A都会跟着出现故障,因为它们之间存在调用链关系;有时候调用链会很长并且很复杂,比如服务A不仅调用了服务B,还调用了服务H、服务I、服务J等等,同时服务A调用链的最长链条终端有可能是从服务C、服务D一直到服务Z,这种调用复杂的调用链条一旦出现故障,有可能直接让整个微服务体系都无法提供服务,造成的影响是致命的。这种由于调用链中某一个节点出现故障而引发的级联故障,称为服务雪崩,也称为级联故障、级联失效。
2.容错机制
异常没处理,我们处理一下异常就可以,而对于另外两个原因导致的服务雪崩,我们应该怎么解决呢或者说应该怎么建立容错机制呢?
常见的容错机制有隔离、超时、限流、熔断、降级等。
隔离
它是指将系统按照一定的原则划分为若干个服务模块,各个模块之间相对独立,无强依赖。当有故障发生时,能将问题和影响隔离在某个模块内部,而不扩散风险,不波及其它模块,不影响整体的 系统服务。常见的隔离方式有:线程池隔离和信号量隔离。
超时
在上游服务调用下游服务的时候,设置一个最大响应时间,如果超过这个时间,下游未作出反应, 就断开请求,释放掉线程。
限流
限流就是限制系统的输入和输出流量已达到保护系统的目的。为了保证系统的稳固运行,一旦达到 的需要限制的阈值,就需要限制流量并采取少量措施以完成限制流量的目的。
熔断
在互联网系统中,当下游服务因访问压力过大而响应变慢或失败,上游服务为了保护系统整体的可用性,可以暂时切断对下游服务的调用。这种牺牲局部,保全整体的措施就叫做熔断。
降级
降级其实就是为服务提供一个托底方案,一旦服务无法正常调用,就使用托底方案。
3.常见的容错组件
Hystrix
Hystrix是由Netflix开源的一个延迟和容错库,用于隔离访问远程系统、服务或者第