高可用架构从来不是堆机器
上周跟做电商运维的老陈撸串,他拍着大腿说去年618亏了三百万,原因说出来都丢人——他们提前半个月按三倍流量备了服务器,机房租了双线路,所有能加的监控都拉满了,结果零点刚过,订单系统直接卡成PPT。
不是流量超了。
是订单回调的消息队列,把所有积压的消息一股脑甩给了刚扩容完的库存服务,直接把库打挂了。
大促期间消息队列积压监控截图
你说这钱花得冤不冤?硬件买了,带宽租了,监控也搭了,最后栽在一个没设上限的配置上。

社区团购下单链路降级开关配置面板
容错的本质从来不是让系统永远不出错,而是错真的发生的时候,你清楚哪部分可以暂时停服,哪部分必须死保,不会让一个小故障顺着依赖链滚成拖垮全系统的大崩溃。
别追求完美。真的。
别把”多备几台机器”当高可用
真的蠢。 很多团队一提高可用,第一反应就是加节点、上集群,把主从架构搭起来就觉得万事大吉,甚至觉得只要节点数够多,就算某几台挂了剩下的也能扛住流量。可真遇到故障的时候,才发现算容量的时候只算了平稳流量下的CPU、内存占用,从来没考虑过故障触发的连锁反应——比如主库切主的几十秒里,所有请求的重试排队、消息积压的消费洪峰,这些流量根本不是线性增长的,是会指数级炸开的。 老陈他们当时就是,扩容的时候压根没给消息队列设消费速率的上限。平时流量平稳的时候啥问题没有,一到零点,所有用户同时点支付,队列里瞬间堆了二十万条消息,消费端一开始拉满跑,数据库的连接数直接顶到上限,整个服务顺着依赖链一路雪崩。高可用的核心是”容错”不是”零故障”
很多人对高可用的认知走了极端,觉得要追求99.999%的可用性,算下来一年累计宕机时间不能超过五分钟,听着就唬人。可实际业务里,真有几个场景值得砸大价钱追这个五个九? 比如公司内部的员工报销系统,99%的可用性都绰绰有余——就算每月宕机七小时,大家晚两天提交报销单,根本不影响核心业务赚钱。反过来要是真为了追五个九,花几百万上三地域的异地多活,最后一年的多活运维成本,比系统全年宕机造成的总损失高十倍,这账怎么算都亏。 之前帮一家做社区团购的团队做架构梳理,他们之前想抄头部大厂的异地多活方案,算下来光三个地域的机房托管费一年就两百万。最后我们给他们调整的方案是,核心的下单链路做同城双机房冗余,非核心的评价、推荐模块全部加一键降级开关,遇到流量高峰的时候直接把推荐模块占的资源切给下单链路,整个方案一年成本不到原来的三分之一。去年大促的时候峰值流量超了预估的40%,系统愣是没挂。