关键字:断路保护。比如 A 服务调用 B 服务,由于网络问题或 B 服务宕机了或 B 服务的处理时间长,导致请求的时间超长,如果在一定时间内多次出现这种情况,就可以直接将 B 断路了(A 不再请求B)。而调用 B 服务的请求直接返回降级数据,不必等待 B 服务的执行。因此 B 服务的问题,不会级联影响到 A 服务。
使用线程池隔离,比如说有 3 个服务 A、B、C,每个服务的线程池分配 10,20,30个线程,当 A 服务线程池中的 10 个线程都拿出来使用后,如果调用服务 A 的请求量增加,还想再增加线程是不行的,因为 A 服务分配的线程已经用完了,不会拿其他的服务的线程,这样就不会影响其他服务了。Hystrix 默认使用线程池隔离模式。
线程池隔离技术
线程池隔离技术优点
依赖的服务都有隔离的线程池,即使自己的线程池满了,也不会影响任何其他其他的服务调用。
线程池的健康状态会上报,可以近实时修改依赖服务的调用配置。
线程池具有异步特性,可以构建一层异步调用层。
具有超时检测的机制,尤其在服务间调用特别有用。
线程池隔离技术缺点
线程池本身就会带来一些问题,比如 线程切换,线程管理,无疑增加了 CPU 的开销。
如果线程池中的线程利用率很低,则无疑是一种浪费。
Hystrix 信号量隔离技术
如下图所示:简单来说就是一个池子里面放着一定数量的信号量,服务 A 每次调用服务 B 之前,需要从池子里面申请信号量,申请到了,才能去调用 B 服务。
可以通过 Sentinel API 定义的代码,就是资源,能够被 Sentinel保护起来。可以如下几种方式来标识资源:
方法签名。
URL。
服务名称等。
3.6、Sentinel 的设计理念
Sentinel 作为一个流量控制器,可以根据需要把随机的请求调整成合适的形状,如下图所示:
流量整形
四、对比
4.1、隔离设计上对比
Hystrix
Hystrix 提供两种隔离策略,线程池隔离和信号量隔离。
Hystrix 中最推荐的也是最常用的是线程池隔离。线程池隔离的好处是隔离度很高,不会影响其他资源,但是线程本身也有自己的问题,线程上下文切换时比较耗 CPU 资源的,如果对低延时要求比较高,影响还是挺大的,而且创建线程是需要分配内存的,创建的线程越多,需要分配的内存也会更多。而且如果对每个资源都创建一个线程池,那线程切换会带来更大的损耗。
Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。