微服务架构将大型应用程序拆分为多个小而独立的服务,每个服务可以独立部署和扩展。然而,微服务系统需要面对的挑战也随之增加,例如服务之间的依赖、分布式环境下的故障传播和安全问题。因此,微服务保护措施是确保系统在高并发、资源消耗和恶意攻击等压力下依然稳定运行的重要手段。
保证服务运行的健壮性,避免级联失败导致的雪崩问题,就属于微服务保护。
1. 微服务保护方案
微服务保护的方案有很多,比如:请求限流、线程隔离、服务熔断等
这些方案或多或少都会导致服务的体验上略有下降,比如请求限流,降低了并发上限;线程隔离,降低了可用资源数量;服务熔断,降低了服务的完整度,部分服务变的不可用或弱可用。因此这些方案都属于服务降级的方案。但通过这些方案,服务的健壮性得到了提升,
1.1 请求限流
服务故障最重要原因,就是并发太高!解决了这个问题,就能避免大部分故障。当然,接口的并发不是一直很高,而是突发的。因此请求限流,就是限制或控制接口访问的并发流量,避免服务因流量激增而出现故障。
请求限流往往会有一个限流器,数量高低起伏的并发请求曲线,经过限流器就变的非常平稳。这就像是水电站的大坝,起到蓄水的作用,可以通过开关控制水流出的大小,让下游水流始终维持在一个平稳的量。
1.2 线程隔离
为了避免某个接口故障或压力过大导致整个服务不可用,我们可以限定每个接口可以使用的资源范围,也就是将其“隔离”起来。
将不同的服务或模块隔离开来,每个服务或模块拥有独立的资源配额和线程池,防止资源被耗尽。
1.3 服务熔断
在某个服务出现故障时,快速失败而不是等待超时,以防止故障传播。
线程隔离虽然避免了雪崩问题,但故障服务依然会拖慢服务调用方的接口响应速度。
所以,我们要做两件事情:
-
编写服务降级逻辑:就是服务调用失败后的处理逻辑,根据业务场景,可以抛出异常,也可以返回友好提示或默认数据。
-
异常统计和熔断:统计服务提供方的异常比例,当比例过高表明该接口会影响到其它服务,应该拒绝调用该接口,而是直接走降级逻辑。
2. 微服务保护实现
微服务保护的技术有很多,但在目前国内使用较多的还是Sentinel。
2.1 Sentinel介绍
Sentinel是阿里巴巴开源的一款服务保护框架,目前已经加入SpringCloudAlibaba中。
官方网站:https://sentinelguard.io/zh-cn/
2.2 Sentinel服务部署
2.2.1 下载
下载jar包,下载地址: