Spring Cloud Alibaba之服务容错组件 - Se

2019-07-15  本文已影响0人  匆匆岁月

服务容错

为什么需要服务容错?

服务之间存在调用关系,如果被调用服务down掉,处理不及时的话,就会造成雪崩效应,又称级联故障级联失效(cascading failure)


如图所示,C,D服务调用B服务,B服务调用A服务,如果A服务突然发生故障,那么B服务调用A服务就得不到返回,直到请求超时,在超时之前的那段时间内,请求一直在等待,简直欲穿秋水,一个请求就是一个线程,线程一直处于阻塞状态,会一直占用服务器的资源,比如内存,cpu;如果B的并发很高,这样阻塞的线程很多,那么B服务器再也没有资源去创建新的线程,于是B也挂了,然后C,D服务又请求不到B服务了…然后C,D服务也挂了。因为A服务的故障,BCD没有做任何处理,都挂了,这就是雪崩效应

服务容错的目的就是保护自己服务的正常运行。比如B服务碰到上面那种请求等待导致线程太多的时候,就限流,请求的线程数不得超过10个,超过10个就不再接受新的请求,直接返回被限流错误提示,这样B服务就不会因为太多线程耗尽内存。

常见的容错方案

在软件层面上借鉴这种思想,我们可以让每个服务都运行在自己独立的线程池中,线程池之间是互不干扰的,服务A的线程池资源耗尽也不会影响到服务B。此时线程池就像船舱的舱壁一样将不同的服务资源隔离开来,这样某个服务挂掉也不会影响其他服务的运行。

Sentinel是什么

Sentinel的官方标题是:分布式系统的流量卫兵。从名字上看,很容易猜到它是用来做服务稳定性保障的。对于服务稳定性保障组件,如果熟悉Spring Cloud的用户,第一反应肯定是Hystrix。但是比较可惜的是 Netflex 已经宣布对 Hystrix 停止更新。那么,在未来我们还要什么更好的选择呢?除了Spring Cloud 官方推荐的 resilience4j之外,目前Spring Cloud Alibaba下整合的 Sentinel也是用户重点考察和选型的目标。

Sentinel的功能和细节比较多,一篇内容很难介绍完整。这篇文章只是让我们对Sentinel有一个整体的认识,后面我们会对如何把 Sentinel 整合到Spring Cloud 应用中做详细的介绍。

随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制熔断降级系统负载保护等多个维度保护服务的稳定性。

Sentinel 具有以下特征

Sentinel的主要特征:


Sentinel 的开源生态:
上一篇下一篇

猜你喜欢

热点阅读