微服务保护方案
1:现有问题
(1) 接口缓慢
因为一个接口在并发时,正好执行时长又比较长,那么当前这个接口占用过多的Tomcat连接,导致其他接口无法即时获取到Tomcat连接来完成请求,导致接口拖慢,甚至失败
(2) 微服务雪崩
因为微服务之间相互调用,关系错综复杂,有可能因为一个服务不可用,导致整个服务都出现过慢或级联失败的情况.
2.解决方法
(1)降级
调用了目标服务接口,发现有问题,走降级逻辑
(2)熔断(默认关闭)
熔断机制用于在服务出现问题时快速失败,避免调用链路中的服务相互等待,导致整体系统响应变慢甚至不可用。当降级逻辑达到了阈值(达到设置的错误次数),直接熔断,不走目标服务接口
状态:
1.关闭(正常状态)
2.打开(达到阈值后开启)
3.半开启
当熔断器打开后会有一个自己设置的熔断时间,当到达熔断时间后,熔断器会处于一个半打开状态,会放一个请求,走目标服务接口
(1) 请求接着失败,会继续打开熔断器,重新赋予一个熔断时间(时间固定),进入循环,直至请求成功
(2)请求成功,熔断器关闭
(3)超时
设置合理的超时时间可以避免长时间等待响应导致的问题。当请求超时时,可以选择快速失败并返回错误信息,或者重试等策略。
(4)线程隔离
为每个服务分配独立的线程池,这样即使某个服务出现问题也不会影响到其他服务。
(5)限流
限流是最常见的服务保护措施之一,其目的是为了防止服务因为过大的流量而崩溃。
对于某些关键资源或者参数的访问,可以采取特殊的限流措施来防止这些热点成为瓶颈。
限流往往会有一个限流器,数量高低起伏的并发请求曲线,经过限流器就变的非常平稳。这就像是水电站的大坝,起到蓄水的作用,可以通过开关控制水流出的大小,让下游水流始终维持在一个平稳的量。
方式
基于令牌桶算法:允许一定数量的请求通过,超出则拒绝或排队等待。
基于滑动窗口:在一段时间内对请求进行计数,超过阈值则触发限流。
CAP原理
1.C、A、P含义
Consistency、Availability、Partition tolerance三个词语的缩写,分别表示一致性、可用性、分区容忍性。
一致性: 向系统写一个新数据再次读取到的也一定是这个新数据。
可用性:任何时间都可以访问订单服务和库存服务,系统保证可用。
分区容忍性:也叫分区容错性,分布式系统在部署时服务器可能部署在不同的网络分区,比如上图中订单服务在北京,库存服务在上海,由于处于不同的网络分区如果网络通信异常就会导致节点 之间无法通信,当出现由于网络问题导致节点 之间无法通信,此时仍然是对外提供服务的这叫做满足分区容忍性。
2.CP(强调一致性)
舍弃A(可用性),确保数据的稳定一致
当有新的请求发送,直接拒绝请求的进行,从而达到数据一致性。
核心特点:
- 牺牲一致性:在网络分区发生时,允许不同节点返回不一致的数据。
- 保证可用性:所有节点始终响应请求,即使数据可能过时或不一致。
- 最终一致性:分区恢复后,系统通过异步机制(如冲突解决协议)逐步恢复一致性。
3.AP(强调可用性)
舍弃C(一致性),但具有最终一致性
当有新的请求发送,会继续执行,但数据结果具有一定的延后性,但最后会到达一致。
核心特点:
- 牺牲可用性:在网络分区发生时,部分节点可能拒绝响应(如返回超时或错误),直到分区恢复。
- 保证一致性:所有节点在分区恢复后看到的数据完全一致。
- 强一致性:通过同步协议(如两阶段提交、Raft/Paxos 共识算法)确保数据一致性。
4.为什么没有AC
即没有P(分区容忍性)
分布式系统就要满足分区容忍性,因为分布式系统难免存在网络分区,不能因为网络异常导致整个系统不可用,而网络波动是很难人为把控的,所以P是一定要满足的。