微服务保护机制及测试方法

一、微服务保护机制

请求限流,降低了并发上限;
线程隔离,降低了可用资源数量;
服务熔断,降低了服务的完整度,部分服务变的不可用或弱可用。

因此这些方案都属于服务降级的方案。但通过这些方案,服务的健壮性得到了提升。

1.1.请求限流

请求限流往往会有一个限流器,数量高低起伏的并发请求曲线,经过限流器就变的非常平稳。
这就像是水电站的大坝,起到蓄水的作用,可以通过开关控制水流出的大小,让下游水流始终维持在一个平稳的量。

请求限流图
1.2.线程隔离

当一个业务接口响应时间长,而且并发高时,就可能耗尽服务器的线程资源,导致服务内的其它接口受到影响。
所以我们必须把这种影响降低,或者缩减影响的范围。线程隔离正是解决这个问题的好办法。

线程隔离的思想来自轮船的舱壁模式:轮船的船舱会被隔板分割为N个相互隔离的密闭舱,假如轮船触礁进水,只有损坏的部分密闭舱会进水,而其他舱由于相互隔离,并不会进水。

线程隔离
1.3.服务熔断

线程隔离虽然避免了雪崩问题,但故障服务(商品服务)依然会拖慢购物车服务(服务调用方)的接口响应速度。而且商品查询的故障依然会导致查询购物车功能出现故障,购物车业务也变的不可用了。

所以,我们要做两件事情:

01- 编写服务降级逻辑:就是服务调用失败后的处理逻辑,根据业务场景,可以抛出异常,也可以返回友好提示或默认数据。
02- 异常统计和熔断:统计服务提供方的异常比例,当比例过高表明该接口会影响到其它服务,应该拒绝调用该接口,而是直接走降级逻辑。

熔断机制

二、Sentinel技术

微服务保护的技术有很多,但在目前国内使用较多的还是Sentinel。
Sentinel 的使用可以分为两个部分: 核心库(Jar包)控制台(Dashboard)

sentinel

所谓簇点链路,就是单机调用链路,是一次请求进入服务后经过的每一个被Sentinel监控的资源。默认情况下,Sentinel会监控SpringMVC的每一个Endpoint(接口)。

1.1. 请求限流,簇点链路做限流配置参数,验证
image.png
1.2. 线程隔离,设置参数,验证

第一步,修改设置

默认情况下SpringBoot项目的tomcat最大线程数是200,允许的最大连接是8192,单机测试很难打满。
故需修改配置参数为最大线程50,最大连接数100。

第二步,配置线程隔离

勾选的是并发线程数限制,也就是说这个查询功能最多使用5个线程,而不是5QPS。如果查询商品的接口每秒处理2个请求,则5个线程的实际QPS在10左右,而超出的请求自然会被拒绝。

限流结果
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容