day05-服务保护和分布式事务
输入“/”快速插入
day05-服务保护和
分布式
事务
21524
58890
31
48
在微服务远程调用的过程中,还存在几个问题需要解决。
首先是
业务健壮性
问题:
例如在之前的查询购物车列表业务中,购物车服务需要查询最新的商品信息,与购物车数据做对比,提醒用户。大家设想一下,如果商品服务查询时发生故障,查询购物车列表在调用商品服 务时,是不是也会异常?从而导致购物车查询失败。但从业务角度来说,为了提升用户体验,即便是商品查询失败,购物车列表也应该正确展示出来,哪怕是不包含最新的商品信息。
还有
级联
失败
问题:
还是查询购物车的业务,假如商品服务业务并发较高,占用过多
Tomcat
连接。可能会导致商品服务的所有接口
响应时间
增加,延迟变高,甚至是长时间阻塞直至查询失败。
此时查询购物车业务需要查询并等待商品查询结果,从而导致查询购物车列表业务的
响应时间
也变长,甚至也阻塞直至无法访问。而此时如果查询购物车的请求较多,可能导致购物车服务的
Tomcat
连接占用较多,所有接口的响应时间都会增加,整个服务性能很差, 甚至不可用。
画板
依次类推,整个微服务群中与购物车服务、商品服务等有调用关系的服务可能都会出现问题,最终导致整个集群不可用。
画板
这就是
级联
失败
问题,或者叫
雪崩
问题。
还有跨服务的事务问题:
比如昨天讲到过的下单业务,下单的过程中需要调用多个微服务:
•
商品服务:扣减库存
•
订单服务:保存订单
•
购物车服务:清理购物车
这些业务全部都是数据库的写操作,我们必须确保所有操作的同时成功或失败。但是这些操作在不同微服务,也就是不同的
Tomcat
,这样的情况如何确保事务特性呢?
这些问题都会在今天找到答案。
今天的内容会分成几部分:
•
微服务保护
◦
服务保护方案
◦
请求限流
◦
隔离和熔断
•
分布式
事务
◦
初识
分布式
事务
◦
Seata
通过今天的学习,你将能掌握下面的能力:
•
知道雪崩问题产生原因及常见解决方案
•
能使用
Sentinel
实现服务保护
•
理解
分布式
事务产生的原因
•
能使用Seata解决
分布式
事务问题
•
理解AT模式基本原理
1.微服务保护
保证服务运行的健壮性,避免
级联
失败导致的雪崩问题,就属于微服务保护。这章我们就一起来学习一下微服务保护的常见方案以及对应的技术。
1.1.服务保护方案
微服务保护的方案有很多,比如:
•
请求限流
•
线程隔离
•
服务熔断
这些方案或多或少都会导致服务的体验上略有下降,比如请求限流,降低了并发上限;线程隔离,降低了可用资源数量;服务熔断,降低了服务的完整度,部分服务变的不可用或弱可用。因此这些方案都属于服务
降级
的方案。但通过这些方案,服务的健壮性得到了提升,
接下来,我们就逐一了解这些方案的原理。
1.1.1.请求限流
服务故障最重要原因,就是并发太高!解决了这个问题,就能避免大部分故障。当然,接口的并发不是一直很高,而是突发的。因此请求限流,就是
限制或控制
接口访问的并发流量,避免服务因流量激增而出现故障。