Day 6 (5/29/2024):
今天添加了一些功能来保证了系统的稳定和高可用性,使用了限流和熔断等机制
1.当秒杀的用户量超过预计,请求量超过服务器最大承载压力怎么办?当有服务出现故障,不可用时如何应对?
措施有:
1. 限流,流量控制
2. 服务熔断
使用Sentinel来进行这些措施的实施
对于秒杀系统来说,秒杀时请求瞬间的秒杀流量是不可控的,没办法准确预估多少,但是秒杀系统的处理能力是有限的,当流量过大时服务器会被打挂流量控制(flow control),其原理是监控应用流量的 QPS 或并发线程数等指标,当达到指定的阈值时对流量进行控制,以避免被瞬时的流量高峰冲垮,保护系统不会被压垮,从而保障应用的高可用。
一般我们会预测QPS,比如前一年的双11的QPS是一亿,那今年我们一般就预测这个QPS为2亿,也就是说我们限制的最大qps为2亿
而熔断 & 降级指的是:
一旦下游服务C因某些原因变得不可用,积压了大量请求,服务B的请求线程也随之阻塞。线程资源逐渐耗尽,使得服务B也变得不可用。紧接着,服务A也变为不可用,整个调用链路被拖垮。像这种调用链路的连锁故障,这种不可用像滚雪球一样逐渐放大的时候,叫做雪崩效应
而熔断这一概念来源于电子工程中的断路器(Circuit Breaker)。在互联网系统中,当下游服务因访问压力过大而响应变慢或失败,上游服务为了保护系统整体的可用性,可以暂时切断对下游服务的调用。这种牺牲局部,保全整体的措施就叫做熔断
我们使用了sentinel来进行限流的操作。