背景
做微服务的人,大多信两件事:
- 系统一定会变复杂(不管你愿不愿意)。
- 复杂之后一定要“有法可依”(不然就是“玄学运维”)。
但今天我想反过来玩一把:用“玄学”去解释“工程学”。
我最近做了个有趣的类比:把五行(金木水火土)当成微服务架构里五类“基础能力”,再把相生/相克当成依赖关系与约束机制。
顺便把我自己的命盘也拿来做一次“架构体检”(别慌,不是要把 SRE 变成命理师;只是想用一种更容易记住的方式,把架构的平衡讲清楚)。
问题
微服务架构最大的坑,不是“服务拆不拆”,而是拆完以后五种能力失衡:
- 你可能“水”太旺:数据流、消息流、流量洪峰滚滚而来,但业务处理能力跟不上。
- 也可能“金”过强:治理规则多到像“十八道关卡”,最后把交付效率抠成了 PPT。
- 或者“土”松散:平台不承载,团队全靠个人英雄主义,最终变成“人人会写 YAML,没人能睡整觉”。
换句话说:微服务不是一堆小服务,而是一套能长期自洽的五行系统。
为了让类比不流于“段子”,先把映射说清楚。
1) 五行 → 微服务组件映射(基础盘)
下面这个表,是全文的“底层协议”。(先立规矩,后面才能开玩笑。)
| 五行 | 架构组件映射 | 典型技术/实现 | 过强/过弱的“症状” |
|---|---|---|---|
| 水 | 数据流 / 消息队列 / 事件流(水主流动) | Kafka / Pulsar / MQ、CDC、流式计算、日志管道 | 水旺:回压、堆积、延迟扩散;水弱:服务耦合、同步调用雪崩 |
| 火 | 计算 / 业务逻辑 / 热路径(火主变化与能量) | 微服务实例、函数计算、热点逻辑、CPU/Runtime 优化 | 火弱:P99 飙升、线程池枯竭;火旺:烧钱、过度扩容 |
| 木 | 服务增长与扩缩容(木主生长) | HPA/KEDA、自动伸缩、服务发现、灰度扩容、容量模型 | 木弱:峰值扛不住;木旺:服务数爆炸、治理跟不上 |
| 金 | 安全与治理(金主收敛、规则、边界) | 身份认证、鉴权、准入、限流、熔断、策略中心、审计 | 金弱:乱调用、越权、事故;金旺:流程冗长、发布阻塞 |
| 土 | 基础设施/平台承载(土主承载、稳定) | K8s/容器平台、边缘节点、存储、网络、可观测性底座 | 土弱:基础不稳、频繁故障;土旺:平台过重、创新慢 |
一句话总结:五行不是五个部门,是五类能力的“力学平衡”。
2) “相生”关系 → 健康架构依赖
五行相生:木生火 → 火生土 → 土生金 → 金生水 → 水生木。
把它翻译成架构语言,就是一条“健康依赖链”:
- 木生火:扩缩容能力带动计算能力
- 有效的弹性策略,才能让业务逻辑在峰值时“有火可用”。
- 反过来,如果没有木(扩缩容、容量模型),火(计算)只能靠“人肉扩容”,那就是“值班人的阳寿在燃烧”。
- 火生土:稳定的业务实现反哺平台建设
- 业务做得越深,越会倒逼出平台能力:镜像、发布、观测、容量、成本。
- 土不是先天就完美,是被火炼出来的。
- 土生金:平台成熟后才能沉淀治理与安全
- 没有统一平台,治理规则就会“到处长野草”。
- 有了承载与标准化,才能把安全、准入、审计做成“金规铁律”。
- 金生水:治理让数据流动更可靠、更可控
- 消息流/数据流不怕大,怕的是不可信、不边界、不追溯。
- 好的金(治理)会让水(数据)流得快、流得稳、流得有据可查。
- 水生木:数据与事件驱动服务的增长与演化
- 观测数据、业务事件、流量画像,决定你要不要扩、怎么扩、扩到哪。
- 没有水(数据),木(增长)就是瞎长。
Mermaid:五行相生 ↔ 微服务循环图
flowchart LR
W["木:服务增长/扩缩容\n(HPA·KEDA·容量模型)"] --> F["火:计算/业务逻辑\n(实例·热路径·Runtime)"]
F --> E["土:平台/基础设施\n(K8s·边缘节点·观测底座)"]
E --> M["金:治理/安全\n(鉴权·限流·策略·审计)"]
M --> Wa["水:数据流/消息队列\n(Kafka·Pulsar·日志管道)"]
Wa --> W
classDef wood fill:#e8f5e9,stroke:#2e7d32,color:#1b5e20;
classDef fire fill:#ffebee,stroke:#c62828,color:#7f0000;
classDef earth fill:#fff8e1,stroke:#f9a825,color:#6d4c41;
classDef metal fill:#fafafa,stroke:#616161,color:#212121;
classDef water fill:#e3f2fd,stroke:#1565c0,color:#0d47a1;
class W wood;
class F fire;
class E earth;
class M metal;
class Wa water;
方案
上面讲“相生”是理想状态。现实中,架构更像命盘:有偏、有旺、有弱。
所以方案分三层:
- 用五行框架做一次架构“体检”(先识别偏差)。
- 用“相生”去补短板(让依赖变健康)。
- 用“相克”去治反模式(该约束的要约束)。
1) 相克关系 → 架构反模式/制约(治病用)
五行相克:木克土、土克水、水克火、火克金、金克木。
在架构里,它既是“反模式警报”,也是“必要的制约”。关键在于:克得对不对、克得过不过。
| 相克 | 架构解释(健康的克) | 反模式(失控的克) | 处理建议 |
|---|---|---|---|
| 木克土 | 快速迭代推动平台升级 | 业务随意提需求把平台拖成“万金油” | 平台边界清晰:能力产品化,拒绝一次性定制 |
| 土克水 | 平台能力约束数据流(配额、隔离、SLO) | 平台落后导致数据堆积、回压扩散 | 资源隔离 + 队列治理:限额、优先级、隔离池 |
| 水克火 | 数据洪峰逼出计算弹性 | 水太旺把火淹灭:MQ 堆积 → 业务超时 → 级联 | 背压/削峰:限流、批处理、异步化、缓存 |
| 火克金 | 业务效率推动治理轻量化 | “先上线再说”把安全和合规烧穿 | 最小可行治理:自动化准入、策略下沉、审计闭环 |
| 金克木 | 治理约束服务数量与边界 | 治理过度:发布门禁把扩容/迭代卡死 | 分层治理:核心链路严,边缘链路松;按风险分级 |
关键结论:相克不是坏事,失控的相克才是坏事。
2) 老赵命盘 → 架构诊断(把比喻落到实处)
把命盘数字翻译成架构症状:
- 水 34%(偏旺):
- 对应架构里常见的“水旺系统”:
- 流量大、链路长、消息多、数据管道复杂
- 典型场景:HTTPDNS/边缘调度这种业务,天然就是“水系工程”——请求像水一样来,解析结果像水一样流。
- 对应架构里常见的“水旺系统”:
- 火 11%(偏弱):
- 对应“火弱系统”:
- 计算/业务处理能力不足
- 表现为:P99 长尾、CPU 抖动、线程池耗尽、下游超时扩散。
- 对应“火弱系统”:
- 土 29%(不算弱,偏厚):
- 说明平台/承载还可以,但如果土太厚又容易“拖慢创新”。
- 木 12%(偏少):
- 说明“生长性”不够:
- 扩缩容、容量模型、自动化弹性需要补。
- 说明“生长性”不够:
- 金 11%(中性偏少):
- 治理需要有,但不能把“火”先灭了。
这就很像一个真实的线上问题:
- 水系能力很强(数据流、日志流、消息流都很顺),但
- 火不够(消费端算力不足),于是
- MQ 堆积 → 延迟抬升 → 线程池被超时占满 → 链路级联。
如果把它写成“命理断语”,大概就是:
- 水旺火弱,遇峰则滞;喜木火来扶,方得通达。
但我们是工程师,所以要给“可落地的补救方案”。
3) 补木、扶火:一套可执行的工程解法
A. 先“扶火”:把计算热路径做强(火主变化)
目标:让业务在峰值时“烧得起来”,而不是“刚点火就缺氧”。
- 扩容前置:把峰值变成可预测
- 容量模型:QPS → CPU/Memory → 实例数的映射要固化成公式/配置
- 压测基线:至少有一次“可复现”的峰值压测报告
- 火力集中:优化热路径(少做无用功)
- 缓存前移:把“重复计算”变成“缓存命中”
- 减少跨服务同步调用:能异步就异步(别让每个请求都像过五关斩六将)
- 线程池/连接池治理:超时、队列长度、隔离池要可观测
- 熔断降级:火要有“护城河”
- 降级策略要明确:可用性优先还是一致性优先
- 错误码要“可诊断”:别让 500 成为你的八字“通杀格”
B. 再“补木”:让系统具备生长性(木主生长)
目标:让扩缩容像树长枝条一样自然,而不是像“临时抱佛脚”。
- 事件驱动弹性(木生火的关键)
- MQ lag、队列深度、P99、CPU、带宽等指标,作为 HPA/KEDA 的触发条件
- 边缘+中心的弹性协同
- 对 HTTPDNS/边缘调度场景:
- 边缘缓存吸收波动(让火不要每次都被水冲击)
- 中心集群做稳定计算与策略收敛
- 对 HTTPDNS/边缘调度场景:
- 发布体系支持“长出来”
- 灰度、回滚、金丝雀发布要标准化
- 扩容也是一次发布:需要同等的可观测与回滚能力
C. 同时“调金、固土”:别让补救变成副作用
-
**金(治理)**要做到:
- 策略自动化(别靠人审人批)
- 风险分级(核心链路强治理,边缘链路轻治理)
- 闭环审计(出了事能追溯、能复盘、能改规则)
-
**土(平台)**要做到:
- 承载清晰:哪些能力平台提供,哪些能力业务自担
- SLO 透明:土要稳,不是“看起来很稳”
- 成本可算:不然火一旺,财务就来克火(这是真·相克)
4) 横向对比:三种“调理方案”怎么选?
下面给一个团队周会可直接拿来讨论的对比表(建议你直接复制到评审材料里)。
| 方案 | 核心动作 | 优点 | 风险/代价 | 适用场景 |
|---|---|---|---|---|
| 扶火优先(先把火点旺) | 热路径优化 + 增强隔离 + 快速扩容 | 见效快,P99/成功率改善明显 | 可能“烧钱”,若木弱会反复人肉扩容 | 近期峰值压力大、事故频发 |
| 补木优先(先让木能长) | 容量模型 + 自动伸缩 + 发布体系完善 | 长期收益大,团队心智更稳 | 初期投入较大,治理/观测要跟上 | 服务增长快、迭代频繁 |
| 土金先行(先打地基立规矩) | 平台标准化 + 治理体系 + 安全准入 | 风险可控,合规友好 | 可能压慢交付节奏,容易“金旺克木” | 多团队协作、租户多、合规要求高 |
推荐策略(更像工程,也更像命理):先救急(扶火),再固本(补木),最后做制度化(固土调金)。
收益
把“五行”这套比喻用在架构讨论里,实际收益很务实:
- 统一语言:
- 你说“我们现在水太旺火太弱”,团队就能立刻联想到:数据流压力 > 计算能力。
- 快速定位矛盾:
- 一场事故复盘,往往不是“某个服务挂了”,而是某一行失衡导致连锁反应。
- 让治理不再像宗教:
- 治理(金)不是越多越好;金旺会克木,反而伤害扩容与迭代。
- 让平台建设更像投资:
- 土(平台)不是“做着玩”,它决定了后续金(水/木/火)的上限。
最后用一句“玄学收尾,但工程落地”:
- 命理讲 平衡,架构也讲 平衡。
- 命盘里我喜 木火,但系统里真正的“喜用神”只有一个:
- 好工程(Good Engineering) —— 可观测、可回滚、可扩展、可演进。
愿我们都能:水来不慌,火旺不燥,土稳不重,金严不僵,木长不乱。