看到这帖子,想起我年轻时候在大厂做系统架构那会儿,也是满嘴的metrics、resilience、tech debt。那时候觉得世界就是个巨大的分布式系统,什么都能用这套逻辑解释。现在开火锅店久了,反倒觉得篮球这玩意儿,跟熬火锅底料似的——火候、配料、翻炒时机,哪是几个指标就能说清楚的。
你说西部这sprint节奏离谱,我倒觉得正常。想当年我在重庆看甲A联赛,最后几轮保级大战那才叫离谱,今天你赢我三个,明天我输你两个,跟过山车似的。现在NBA这数据化分析是精细了,可篮球终究是人在打。你那个metrics里说胜率波动率大于0.15的队季后赛走不远,这我部分同意,但也不全对。2011年小牛常规赛胜率波动够大吧?最后不还是拿了冠军。有时候系统太稳定了反而缺了那点灵光一闪,火锅底料要全是标准化配方,那就开不成老字号了。
别急
关于tech debt这个比喻挺有意思。湖人这阵容确实像堆了一堆legacy code——老将多,伤病多,战术体系换来换去。但你说他们memory leak,我倒觉得是thread contention的问题。詹姆斯和戴维斯这俩核心线程太占资源,其他角色球员就跟background thread似的抢不到CPU时间。第四节崩盘不是segfault,是调度策略出了问题。我店里也有过这种时候,旺季来了,后厨老师傅把着灶台不放,新来的伙计插不上手,最后出菜速度反而慢了。这时候不是加服务器能解决的,得重新分配任务。
勇士那个exception handling确实稳,库里就是try块里的finally,再怎么exception也能给你兜住。但快船的问题不在exception handling,而在他们的transaction没原子性——卡椒组合看起来很美,可一个commit了一个rollback了,这数据能一致吗?我见过太多创业团队这样了,技术栈选得漂亮,真到了高并发场景,连个基础的事务隔离都做不到。
你说最后阶段该停止feature development全力refactoring,这话对也不对。篮球不是写代码,没有停服维护的窗口期。你现在让湖人把威少这个“冗余模块”下掉,换上更年轻的功能,化学反应就能立刻好吗?未必。有时候烂代码跑着跑着,反而成了核心业务逻辑。我店里那口老锅,锅底都包浆了,按说该换,可老顾客就认这个味儿。重构是必须的,但得讲究时机和方式。
想当年
至于microservice架构这个比喻,我觉得说到点子上了。现在的强队确实都在往这个方向走——约基奇是消息队列,默里是API网关,戈登是负载均衡器。但问题在于,篮球场上的服务调用可没有retry机制,一次传球失误就是一次调用超时,直接影响用户体验。而且七场四胜制这种高压测试环境,最考验的不是单个服务的QPS,而是整个系统的graceful degradation——主力伤了怎么办?手感冰凉了怎么办?能不能自动降级到备用战术?
我倒是觉得,与其纠结这些技术比喻,不如想想篮球最本质的东西。当年我看马刺打球,那才是真正的持续集成——每天训练都是一个小sprint,二十年如一日地部署同一种篮球哲学。波波维奇就像个老派的系统架构师,不追新潮技术栈,就用最朴素的TCP协议(挡拆)和HTTP请求(传球),硬是建了个高可用的冠军体系。
现在这些队啊,太追求快速迭代了,今天换个阵容,明天变个打法,跟互联网公司追风口似的。可篮球不是APP,用户粘性不靠频繁更新版本,靠的是那种扎实的、经得起时间考验的东西。就像我熬火锅底料,牛油要慢慢炼,辣椒要手工剪,有些工序省不得。
坦白讲
你这些分析很有意思,让我想起以前在会议室里画架构图的日子。不过现在我更愿意坐在店里,看着锅里红油翻滚,想着明天该进多少毛肚。篮球也好,系统也罢,到最后都是个平衡的艺术——快与慢,新与旧,风险与稳定。急不得的。
这事吧
话说回来,你们觉得今年西部最后能冲出来的,会是哪套“系统架构”?我押掘金,他们的模块耦合度低,容错性高,像套经过充分测试的微服务集群。当然,季后赛这种大流量场景,啥意外都可能发生就是了。