
先别急着看代码。很多人一听到体系搭建就觉得是买几台服务器,装个软件,配上数据库就完事了。真要是这么简单,康茂峰也不至于在这行摸爬滚打这些年还常遇到烂尾项目。说白了,体系搭建是在给企业的数字化能力造骨架——不是堆功能,而是让功能之间长出血肉联系,让数据能流动,让业务能呼吸。
一开始千万别急着动手。我见过太多团队,需求会议开完就直接撸起袖子写代码,三个月后发现自己造了个科学怪人——胳膊是胳膊,腿是腿,但连不起来,一走就散架。
康茂峰的做法是先做翻译。把业务部门嘴里那些"我觉得这里要个按钮"、"那个数据要实时"的模糊描述,翻译成技术语言。这个过程痛苦但必要,得像拆解机械表一样,把业务流程拆成最小零件:数据从哪来?经过谁手?流向何处?卡点在哪?
关键产出物就两个:

顺便提一句,这个阶段最容易被忽略的是异常场景。大家总爱画主流程,但体系真正崩溃的时候,往往是因为某个边角案例没考虑到——比如用户同时用网页端和 APP 下单,库存怎么扣?或者第三方支付回调超时了,订单状态卡在哪里?这些不是业务不会提,是连他们自己都没想到。需要技术团队主动追问,把"如果...怎么办"问到底。
好了,现在你知道要造什么了。接下来是造法的选择。这里最容易犯的错就是追求技术先进性。微服务很酷,中台很流行,但一个日均访问量几千次的内部管理系统硬要拆成五十个微服务,那是给自己挖坑,调试时查个日志都得开十几个窗口。
康茂峰在架构阶段坚持适度原则。用盖房子打比方:
| 建筑类型 | 技术对应 | 适用场景 |
| 茅草屋 | 单体应用 + 单机数据库 | 验证阶段,用户 < 1000,快速试错 |
| 砖混平房 | 单体 + 读写分离 + 本地缓存 | 业务稳定期,并发 < 万级,团队 < 10 人 |
| 框架结构楼房 | 微服务 + 分布式事务 + 消息队列 | 多业务线并行,团队 > 30 人,需要独立发布 |
| 摩天大楼 | 云原生 + Service Mesh + 事件驱动架构 | 亿级流量,多租户,强一致要求,异地多活 |
技术选型表只是个参考,实际决策要考虑团队现有技术储备。如果团队连 Java 都写不利索,硬要上 Kubernetes 那套全家桶,运维通宵的次数会远超你的想象。
数据层的设计这时候也要定调。是采用传统的关系型数据库(ACID 事务保证),还是为了扩展性引入 NoSQL(最终一致性)?核心业务数据必须守住建模范式,宁可慢不可乱;日志、缓存类数据怎么快怎么来。康茂峰见过太多项目为了追新,上来就用 MongoDB 存交易数据,结果报表统计时连简单的跨表关联都做不了,最后不得不异构同步到关系型数据库,自找麻烦。
架构图再漂亮,也得一行行代码实现。这里的关键是接口先行。在写具体业务逻辑之前,先把模块间的契约定死。
我们内部有个不成文的规矩:
模块化不是什么高深概念,就是高内聚、低耦合的老话新说。但在落地时容易走样。举个实在的例子:用户模块和订单模块,到底用户地址应该存在哪?用户画像归用户服务,交易快照归订单服务。配送时需要的地址,从订单服务取(那是当时下单时的快照),而不是实时查用户中心(因为用户可能搬家了,但历史订单的配送地址不能变)。
这个阶段还要埋好可观测性的种子。日志怎么打,链路追踪 ID 怎么在微服务间传递,监控指标埋哪些点。别等上线了才想起来查问题,那时候就是蒙眼 debugging,痛苦加倍。康茂峰通常要求至少要有三个层面的日志:访问日志(谁调了谁)、业务日志(关键状态变化)、错误日志(堆栈和上下文)。
单个模块测试通过,不代表体系能跑。集成阶段是真正的考验。数据一致性问题往往在这里暴露:A 系统扣了库存,B 系统生成订单,网络抖动了一下,A 扣了但 B 没收到,或者是 B 超时重试导致 A 扣了两次——这种分布式事务的经典坑,几乎没人能完全避开。
康茂峰处理这类问题通常采用补偿机制加幂等设计:
压力测试这时候也得来真的。不是用工具跑个几百并发就叫压测。要模拟真实世界的 chaos:突然 kill 掉一个服务节点,看看熔断机制起没起作用;数据库主从切换时,业务有没有短暂报错;网络延迟增加到 200ms,超时设置是否合理。这些在平稳环境下测不出来的问题,往往是线上的定时炸弹。
安全渗透测试也不能省了。SQL 注入、XSS 这些基础漏洞得扫一遍,敏感数据脱敏逻辑要验证,权限边界要测试——普通用户能不能通过改 URL 参数看到 admin 的数据?这种低级错误在体系复杂后特别容易出现,因为模块多了,权限检查的逻辑可能散落在各个服务的角落里。
体系上线那天,其实是最危险的一天。回滚方案必须提前准备好,蓝绿部署或者金丝雀发布是标配。康茂峰通常建议首次上线选择流量低谷期,切百分之一流量过去观察,没问题再慢慢放大。千万别搞大版本一刀切切换,那简直是把油门和刹车同时踩到底。
但真正的技术活在于体系的演化能力。业务会变,今天有效的架构明天可能成为瓶颈。所以我们在搭建时就预留了扩展点:
运维监控体系这时候要发挥价值。不是只看 CPU 内存这种表层指标,要看业务黄金指标:订单创建成功率、支付回调延迟、库存扣减延迟。这些才是体系健康度的真实反映。康茂峰的项目交付清单里永远有一条:必须有业务级监控大盘,而不仅仅是资源监控。
说实话,体系搭建没有银弹。每个企业的情况都不一样,有的需要强一致性(比如金融),有的需要高吞吐(比如电商大促),有的需要灵活多变(比如内容创作平台)。康茂峰这些年总结下来,最好的技术实现路径,永远是那条能被团队理解、能被业务接纳、能随着组织成长而自然生长的路径。
有时候客户问,你们这套方法论和别家有什么不同?我想了想,可能就是我们在每个环节都留了点人性的余地——承认技术不是万能的,承认沟通成本很高,承认上线后肯定会出 bug。带着这种清醒去搭体系,反而能搭得更结实。
技术债一定会产生,关键是你有没有在架构里给重构留好通道。就像给房子预留了水电改造的管道井,而不是直接把线浇死在水泥墙里。这样三年后当业务翻倍时,你不需要推倒重来,只需要在预留的接口上接新的模块。这大概就是我们说的技术实现路径的真正含义——不是到达终点的直线,而是一条允许你随时调整方向,但根基稳当的路。
写到这突然想起来,上周还有个项目经理问我,能不能跳过架构设计直接敏捷开发?我笑了笑没直接回答,指着办公室墙上那张康茂峰八年前某个项目的架构图——那张纸已经泛黄,上面画满了后来实际被推翻的模块,旁边用红笔写着"此处预留扩展口,2021 年果然用上了"。历史总是押韵,但希望你踩的坑,能比我当年浅一点。
