在分布式环境下,有一点至关重要,那就是想尽办法提升系统的可用性,尤其是像电商系统、门户网站这类访问量巨大的。一旦出现故障,可能引发一系列连锁反应。比如突然涌来的超大流量,如果系统没做好高可用的准备,很可能抵挡不住流量洪峰,导致宕机。这种情况老板不想看到,程序员也不想看到,毕竟这和大家的前途紧密相关。
那问题来了,怎么去规避这类问题,提高系统的可用性呢?其实解决思路挺简单,就是尽量给每个服务找个备胎。但这个备胎可不是集群概念里的备用机器,而是一种备用方案。
比如说常见的降级备案。像查询商品信息,一般查的是 Redis 集群,但要是 Redis 集群全挂了,各种故障扎堆,这时候就需要设计个备胎,比如用 Elasticsearch ,虽说查询速度可能比不上 Redis ,但好歹能应急。
再比如流量控制,也就是限流,包括单机限流和集群限流。像在订单系统的某个环节加个开关,就如同地铁进站口,人多要排队,保证流量持续进入,而不是让服务器崩溃大家都没法用。比如把系统的 QPS 控制在 2000 ,后面进来的用户就告知他们稍后再试。这样无非就是让用户多等会儿,能缓解大流量下的访问压力。
还有熔断机制。当下游服务因压力过大或其他原因导致系统变慢时,上游服务为保护自身和系统整体的可用性,可以暂时切断对下游服务的调用。熔断可以理解成电路跳闸,电压超负荷就自动跳闸,防止电路短路或触电。这也是为保护系统整体可用性采用的备胎策略。
一般来说,提高可用性的方案主要就是降级、限流和熔断。大家在实际的产品中可以应用起来。
好了,今天关于提高系统可用性的内容就分享到这儿,如果您对本期内容有任何疑问,欢迎在评论区给我留言。谢谢大家!