容错性设计是微服务的另一个核心原则。随着拆分出的服务越来越多,随之而来会面临以下2个问题:
1.由于某一个服务崩溃,导致所有用到这个服务的其他服务都无法正常工作,一个点的错误经过层层传递,最终波及调用链上与此有关的所有服务,这便是
雪崩效应。如何防止雪崩效应便是微服务架构容错性设计的具体实践,否则服务化程度越高,整个系统反而越不稳定。
2.服务虽然没有崩溃,但由于处理能力有限,面临超过预期的突发的请求时,大部分请求直到超时都无法完成处理。类似于交通阻塞,如果一开始没有得到及时的
处理,后面就需要很长时间方案使得全部服务都恢复正常。
这里我们就要用到一些容错策略:故障转移、快速失败、安全失败、沉默失败、故障恢复、并行调用、广播调用。
容错设计模式,如微服务中常见的 断路器模式、舱壁隔离模式、重试模式,等等;以及流量控制模式,如滑动时间窗口、漏桶模式、令牌桶模式,等等。
流量控制:任何一个系统的运算、存储、网络资源都不是无限的,当系统资源不足以支撑超过预期的突发流量时,便应该有所取舍,建立面对超额流量自我保护的机制,这个机制就是“限流”。
限流的常用设计模式有流量计数器模式、滑动时间窗模式、漏桶模式、令牌桶模式。这些限流算法和模式全部是针对整个系统的限流。
落实到分布式中,一种常见的简单分布式限流方法是将所有服务的统计结果都存到集中式缓存中(如redis),以实现在集群内的共享,并可以通过分布式锁、信号量等机制,解决这些数据读写访问时并发控制问题。
***********************************************************************
【如果文字看累了,可b站搜索“沙皮狗2021”,用听的方式领略知识的魅力】
传送门 :https://space.bilibili.com/407643589
***********************************************************************