王志文有句话最近很火:跟老实人一起,除了表面老实愚钝,更让人痛苦的是从来不会主动去想办法解决问题。
这话听着像情感鸡汤,但如果我们用系统架构的视角去审视,会发现这简直是一场灾难级别的技术事故。
我们很多搞技术的,容易陷入一个误区:觉得不惹事、运行稳定、在线率高就是好服务。但实际上,这种被动的老实,往往是掩盖系统崩溃的元凶。
这种老实人架构是不可维护的
1.静默失败比直接报错更可怕
在一段关系里,如果一方总是回避冲突、沉默应对,这在分布式系统中对应的状态就是节点无响应。你发出了一个请求,对方既不返回成功状态码,也不返回错误状态码,而是直接卡死或者是挂起了。这时候,作为发送方的你,不得不设置超时重试,不得不去猜测对面是不是挂了。这种没有反馈的消耗,比直接吵一架要累得多。因为它占用了你大量的系统资源去轮询和等待。
2.负载均衡失效
主动沟通、化解尴尬、推动进程。在技术上,这就是系统的控制面逻辑。如果一方习惯退居安全区,意味着所有的路由分发、故障排查、版本迭代的任务,全部压到了另一方身上。另一方不仅要处理业务逻辑,还要负责整个集群的健康检查。久而久之,主节点CPU100%满载,而工作节点却由于没有分配任务,处于空闲空转状态。这不是稳重,这是资源调度策略的严重失衡。最终结果必然是主节点过热宕机,整个集群崩塌。
3.缺乏自愈能力
真正的可靠,不是永远不报错,而是当故障出现时,有故障转移机制。王志文说的是主动去想办法。在工程里,这就是责任感。当线上出问题时,我们最怕那种只会说我本地能跑啊或者干等着别人来修的同事。我们需要的,是那个哪怕手忙脚乱,也在尝试看日志、尝试回滚、尝试重启的人。哪怕他的办法笨拙,但他给出了一个信号:正在处理中。这个信号本身,就能极大地降低系统的混乱度,缓解另一方的焦虑。
4.关系是双向流式传输
关系不是静态网页,它是实时的双向长连接。一旦一方停止了数据发送,连接的心跳包就会丢失。成年人的相处,贵在确认回执。能够提出想法,能够接住话题,这不叫世故,这叫保证数据的一致性。
别做那个只读不写的只读副本。所有的长久关系,本质上都是双主复制架构。双方都得具备读写能力,都得具备独立处理异常的能力。与其在被动中让系统积压大量消息队列,不如修炼一种主动运维的意识:监控异常,响应报警,主动修复。毕竟,没有任何一个高可用系统,是靠等待来维持运转的。
所以啊,没事多监控,有事赶紧修。没有高可用系统是靠“等着”来维持运转的,别作那个别人口中的老实人!