拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

以易经系统观驱动软件架构:从变易、阴阳到五行设计

以易经系统观驱动软件架构:从变易、阴阳到五行设计

这两年有个挺有意思的趋势:越来越多搞软件架构的人,开始从系统论、控制论甚至东方古典哲学里找方法论。我最早觉得这是玄学,直到自己在两个中大型项目里踩了足够的坑,再回头去读《易经》里关于“变易、不易、简易”的表述,才发现这其实是一套被低估的复杂系统思维框架。这篇博文围绕“哲学驱动式软件架构法”的2.10.1到2.10.3小节展开,聊的是如何用易经的系统观去理解软件架构风格、做架构选型、并且在类似Linux IOMMU子系统这种底层软件架构里,用“观象”的方式去读代码、判断设计意图。内容不搞占卜,不搞神秘化,只谈怎么把“阴阳、五行、八卦”这些符号系统,翻译成架构评审清单和决策辅助工具。适合所有被分布式复杂度、模块腐化、技术栈选择困扰的架构师和团队技术负责人,也适合那些觉得“架构只靠经验”不靠谱、想要一套可重复推演方法的人。

1. 由“易”入手:软件架构的本质是处理变化的系统

1.1 为什么软件架构需要哲学透镜

软件架构这个领域有个老毛病:名词特别多,但方法特别少。DDD、微服务、事件驱动、插件化、分层架构,每样都是好工具,可一旦遇到复杂业务场景,你会发现工具和工具之间经常打架。我见过不少团队,今天按DDD划分了聚合根,明天被微服务拆分冲得七零八落,后天又因为分布式事务把边界揉成一团。问题从来不在于某个架构风格不够好,而在于团队缺乏一个稳定的“观察系统”的方式,导致架构决策往往是被突发问题和局部经验牵着走。

我在处理这类问题的时候,会刻意让自己退一步,不马上选框架、不急着画组件图,而是先找一个能够容纳“时间、变化、关系”的思考框架。易经的系统观恰好提供了这样一个透镜。它不关心你用的是K8s还是虚拟机,不关心你的数据库是MySQL还是PostgreSQL,它关心的是整个系统怎么在“变与不变”之间找到平衡,怎么在“局部协作”和“整体稳定”之间维持动态均衡。这套话语体系,恰恰是软件架构最缺的——我们太习惯谈组件、接口、协议,却很少谈系统的“体质”和“演化方向”。

所谓“哲学驱动式软件架构法”,我理解的核心并不是用卦辞替换架构文档,而是用阴阳、五行、八卦这些符号思维,建立一套可以反复使用的架构诊断语言。比如当你听到“系统耦合太严重”,如果只是记下结论,下一回还是会耦合;但如果你能意识到这是“阴阳失衡”——稳定边界太少、变动传导太顺,你的改进思路就会完全不同:要么加强边界(艮卦的止),要么转移变动(兑卦的悦),要么干脆重新划分模块(革卦的变)。

1.2 “不易”是架构的根基,“变易”是架构的生命

《易经》里有三个核心概念:“不易”“变易”“简易”。翻译成架构语言,它们是三个完全不同的关注层次。

“不易”指的是结构中的稳定部分。任何一个系统,如果所有东西都在变,这个系统无法被理解,也无法被维护。软件里的“不易”体现在哪些地方?稳定的接口契约、不变的业务规则、固定的部署拓扑、经过验证的并发模型。我经常跟团队强调,架构评审第一件事不是问“我们要加什么新功能”,而是问“什么东西在这一轮迭代里不允许变”。你只有先确定不变的东西,才能放心地让其他部分去变。没有这个约束,任何灵活设计都会变成一团浆糊。

“变易”对应的是系统运行时、迭代中的动态部分——业务策略、数据流转方式、接入的设备类型、UI布局,甚至团队结构和交付节奏。架构的意义,不是消灭变化,而是让变化发生在可控的范围内。用易经的话说,叫“范围天地之化而不过”——变化不代表失控,你可以把它圈在某个范围内。比如微服务架构的核心价值,从来不是“服务拆得小”,而是它可以独立变更、独立发布、独立伸缩。这种“局部可变”的能力,是软件架构对“变易”的正面回应。

“简易”则是架构追求的最终状态——以简驭繁。很多人把“简单”误解为“技术简陋”,其实大错特错。“简易”指的是把复杂逻辑抽象成一个清晰的模型,让团队成员花最少力气就能理解系统。用RESTful API统一交互,用事件日志作为唯一事实来源,用分层架构约束依赖方向,这些都是“简易”的落地方式。我做一个架构重构项目时,评判成功与否的关键指标,不是性能提升多少,而是新人上手理解核心链路的时间缩短了多少。能让人快速理解的架构,才是真正的好架构。

把这三个概念放在一起,你就能看到:架构风格的选择,本质上是在“变易”和“不易”之间找平衡点。团队协作效率低,往往是因为该易的地方不易(模块拆不动);系统稳定性差,往往是因为该不变的地方总在变(接口说改就改)。

提示:我给团队做架构设计时,会在白板左边写“不许动”,右边写“要快速动”,大多数所谓架构问题,最后都落入这两列之间。这个方法比任何框架都直观,背后就是《易经》的“不易”与“变易”。

2. 阴阳协同:每一次架构选型都是权衡的艺术

2.1 从“一阴一阳之谓道”看架构的二元性

软件架构里充斥着二元对立:一致性与可用性、耦合与内聚、同步与异步、中心化与去中心化、强类型与动态类型、单体与微服务。每一次架构选型,其实都是在两个极端之间寻找适合当下情境的平衡点。这个道理做技术的人基本都懂,但真正动手时,却往往变成非黑即白的站队:一说微服务好,就恨不得把Hello World都拆成独立服务;一说DDD好,就四处找聚合根,甚至把类名都改成领域术语。这就是典型的“孤阴不生,孤阳不长”——单一思维推向极致,系统必然出问题。

易经讲“一阴一阳之谓道”,在架构语境下,我把它理解为“任何架构决策都存在明显的对立面,好的设计必须同时考虑对立面的存在”。比如你在做API设计时选择了强类型契约,这是“阳”(明确、稳定、可验证),但一定要意识到“阴”的一面——强类型带来的僵化、发布成本、跨语言协作难度。于是你需要补偿机制,比如版本兼容策略、动态扩展点、协议适配层。如果你看不到对立面的存在,强类型最后就会变成团队的枷锁。

具体操作上,我建议团队在做架构选型时,先强制列出这个方案在什么情况下会变坏,而不是先列优点。做一个技术选型对比时,不要只写A框架的并发性能好、B框架的生态丰富,而是写A框架在团队人员流动大时会怎么样,B框架在高并发写场景下会暴露哪些问题。这个思考习惯一旦养成,你会发现很多技术争论瞬间消失——因为大家不再争哪个方案绝对正确,而是讨论“在什么条件下哪个方案更匹配”。

2.2 用阴阳视角解构常见的架构矛盾

用阴阳视角去解构架构,不是为了生搬硬套概念,而是为了获得一种“觉察力”:在任何一组对立属性中,找到被忽略的隐性需求。

举一个最常见的例子:微服务和单体。单体架构(阴)的优势在于简单、直接、事务边界清晰、调用无网络开销;微服务(阳)的优势在于独立演进、故障隔离、弹性伸缩。你拼命把单体往微服务拆,往往是因为你看中了“阳”的部分,却忽略了单体中“阴”的价值——比如业务还在高速迭代期,单体架构的简单性就是最大的竞争力。我记得咨询过一个团队,产品还没上线,技术负责人已经规划了六个微服务,理由是“以后肯定要分布式”。我问他:你现在的团队几个人?他说四个。我说四个人的团队维护六个微服务,意味着每人要处理一套部署链路、一套监控告警、一套配置管理,哪还有时间打磨业务本身?后来我建议他先保持单体,但把模块边界按领域画清楚,等业务量上来了,哪个模块需要独立扩展,就从哪个模块开始拆。这就是典型的“一阴一阳”的动态转换——单体不是永远不好,而是在某个阶段,它该“阴”得彻底一点;等到变化出现了,再“阳”起来。

另一个常被误解的二元对是同步与异步。很多团队一听说异步好,就想把所有内部调用都换成消息队列,结果系统的链路变得极难排查。其实同步调用(阳)的优势是确定性——请求、响应、超时、重试,语义清晰;异步调用(阴)的优势是解耦、削峰、弹性。成熟的方案通常是在边缘链路上用异步,在核心交易链路上保留同步。这种“外阴内阳”的结构,既享受了异步带来的吞吐,又保住了同步带来的可预测性。如果你能习惯这么思考,架构评审会变得非常有意思,因为你不再问“这个设计符不符合最佳实践”,而是问“这一层设计里的阴阳结构是什么?哪个部分被过度强调,哪个部分被无意忽略了?”

2.3 阴阳平衡的实战练习:三个问题完成架构切面

我在内部培训时常带团队做一个小练习,称为“架构切面三问”。这三个问题看似简单,但能有效防止架构决策走向偏执。

第一个问题:我最得意的这个设计决定,它的代价是什么?很多人听到这个问题会愣住,因为习惯上我们只会陈述收益。比如“我们采用事件溯源,可以随时重放所有业务状态”——好,那代价是什么?事件模型和当前业务模型不一致时,查数据极其痛苦;历史事件格式变化时,要做迁移;还有,学习成本高,招人难。把这些代价写下来,你才能真正评估这个方案是否划算。

第二个问题:这个架构如果在十八个月后被推倒重来,最可能的原因是什么?这个问题迫使你跳脱当前的技术兴奋感,站在未来的角度看现在的决策。通常大家会很快发现,不是因为性能不够,而是因为“业务结构理解错了”或“领域模型被过度设计”。把这两条当成“阴”去防范,比盲目优化“阳”更重要。

第三个问题:我的团队是否具备驾驭这个复杂度的能力?这里说的能力不是“能跑起来”,而是“能架构性地维护”。有些团队用微服务出问题,根本原因是团队没有一位能够看懂全链路的人,每个服务只是表面上独立,出了问题还是要拉着所有人开会。这种情况,复杂架构就变成了团队认知的敌人。易经讲“德不配位,必有灾殃”,架构也一样——复杂度超过团队认知水位,系统就开始“生病”。

这三问练习做完,很多团队会主动砍掉一部分过度设计。这不是哲学书单带来的效果,而是因为这套二元审视法帮他们看到了单点思维忽略的隐性成本。

3. 五行生克与八卦系统:把架构要素组织成活的有机体

3.1 五类架构要素:功能、数据、流程、资源、治理

如果说阴阳是架构的“动力机制”,那五行就是架构的“要素分类”。我自己的映射方式是这样的:功能模块对应“木”,代表生长、变化、业务能力扩展;数据存储对应“水”,代表流动、沉淀、滋养整个系统;业务流转对应“火”,代表活跃、传导、状态变化与事件驱动;基础设施对应“土”,代表承载、稳定、底座和兼容性;治理规则对应“金”,代表约束、规范、边界和决策标准。

这五类要素之间不是孤立存在的,它们存在类似五行相生相克的关系。功能模块(木)需要数据(水)的滋养才能生长,所以好的业务模块设计一定会说清楚“我依赖哪些数据实体”;数据(水)流动依赖流程(火)的驱动,没有事件和状态机,数据躺在库里就是死水;流程(火)要靠基础设施(土)承载,没有稳定的运行环境,业务再灵活也烧不起来;基础设施(土)需要治理规则(金)来约束,否则变成无政府的云资源浪费;治理规则(金)反过来又要为功能生长(木)留出空间,否则所有创新都会被审批流程扼杀。

我在做架构规划时,会画一张“五要素生长图”:把系统当前状态按这五个类别打分,然后找出最明显的“短板要素”。有一个项目曾经给我印象很深:业务团队天天抱怨功能迭代速度慢,各种渠道都在催。按常理大家会认为是开发资源不够,但画出五要素图之后,实际问题一目了然——数据和治理都很强,但基础设施(土)极弱,测试环境隔三差五崩,CI流水线跑一次要四十分钟。功能(木)长不出来,不是因为没有养分(数据),而是因为土壤(基础设施)已经板结。后来没有加一个人,只是花两周时间重构了CI和测试环境,迭代效率立竿见影。

3.2 八卦模型:八个架构角色与它们的“德”与“位”

八卦,本质上是把系统的动态关系进一步拆成八个具体的“角色”。乾卦是领导者和核心主键,在代码里,它对应系统最关键的价值链路;坤卦是承载者和文档记录,对应数据模型、配置管理、知识库;坎卦是风险与困难,对应失败重试、流量突刺、安全隐患;离卦是状态与展示,对应监控、日志、可观测性;震卦是激活与触发,对应事件总线、定时任务、webhook;巽卦是渗透与影响,对应依赖注入、插件机制、SPI扩展点;艮卦是阻挡与边界,对应权限控制、接口隔离、模块边界;兑卦是出口与交换,对应API网关、消息协议、对外服务。

我把这套模型用在架构评审上,办法很简单:每个架构模块或服务,都问一遍“它在八卦中占哪个位?它的‘德’是什么?”所谓“德”,就是它在整个系统里最重要的贡献。比如网关,它的德是“兑”——向外交换和收敛;如果网关里塞满了业务逻辑,它就是德不配位。再比如任务调度中心,它的德是“震”——按时触发、唤起流程;如果它要做数据聚合运算,那也是越位了。

这套方法最有价值的地方在于它天然导向“单一职责”的检查。很多人解释不清什么叫“职责”,但用八卦的“德位匹配”来理解就非常容易:一个服务如果同时承担了“坎”的风险兜底和“兑”的对外交换,那么它会变得既难防御又难开放。典型症状是:一个API服务里既做参数校验和鉴权(艮),又做外部接口调用(兑),还做数据落库(坤),最后它还要负责错误重试(坎)。整个系统看上去什么都能做,实际上每一次改动都牵一发动全身。用八卦视角一照,问题非常清晰:角色太多,德位混乱。

注意:这里说的八卦和占卜没有半点关系。我更愿意把它理解成一个“角色认知框架”,有点像RACI矩阵(负责、批准、咨询、知悉),只不过八卦更贴合系统思维。你要是觉得RACI顺手,直接用RACI也行,核心是保持“每个模块都有清晰系统角色”的自觉。

3.3 从八卦到软件架构风格:为什么“风格”不是装饰品

软件架构风格这个热词,从学术定义上指的是“一组约束下的组件与连接器模式”,比如分层风格、管道-过滤器风格、事件驱动风格、微服务风格、数据共享风格。很多人把架构风格选型当成审美问题,觉得团队熟什么用什么。但用八卦视角去看,风格本质上是对系统角色关系的结构化安排。

举个很直接的例子,管道-过滤器风格(Pipeline-Filter)对应的是什么?它对应的是“震—巽—兑”的线性传导:震(触发源)产生数据,经过巽(渗透加工)逐步处理,最后从兑(出口)输出。这种风格擅长处理数据流类系统,但如果你硬要用它做状态强交互的业务系统,每个过滤器都要维护共享状态,角色就会错位——你要么引入隐式共享数据(坤),要么把状态塞进过滤条件(离),整条链路复杂度急剧上升。我看过有人拿管道-过滤器风格去搭一个OA审批系统,结果每个审批节点都要查一次数据库,还把审批历史埋在过滤器内部,最后系统调试成了噩梦。这是风格的滥用,不是风格的错。

反过来看微服务风格,它其实更接近“艮—兑—坎”的组合:艮(边界自治)把业务能力封闭在独立的服务进程里,兑(开放接口)通过轻量协议对外协作,坎(故障隔离)把错误限制在局部。这种风格的优势在于角色分离清晰,但弱点在于“乾”的缺失——全局状态缺乏单一权威,所以它需要额外补充治理组件,比如注册中心、配置中心、分布式事务协调者。很多微服务项目做砸了,不是因为拆分不对,而是因为只看到“艮”的边界好处,完全忽略了“乾”缺失带来的治理成本。用八卦模型做架构风格评估,你会更客观,因为你不只看风格的优点,还会检查这个风格在你这套系统里会制造哪些“位置空缺”,然后提前补位。

4. 实操演练:用易经系统观拆解Linux IOMMU软件架构

4.1 IOMMU在解决什么问题:从DMA乱跑说起

聊完理论,必须落到具体代码上,否则这套方法论就成了空中楼阁。我们以Linux内核里的IOMMU子系统为例,来看看怎么用“观象”的方式去读一套底层软件架构。IOMMU(Input/Output Memory Management Unit)说白了就是给DMA(直接内存访问)用的“地址翻译器”。没有IOMMU的时候,设备DMA可以直接访问物理内存,优点是快,缺点是想访问哪块就访问哪块,操作系统根本拦不住。一个驱动写错DMA地址,就可能把内核内存踩烂,破坏其他进程的数据,甚至引发安全漏洞。这在虚拟化场景里更致命——宿主机上跑着多个虚拟机,如果某个虚拟机的设备DMA可以“穿墙”访问宿主机的物理内存,隔离性就名存实亡了。

IOMMU的核心职责,就是把设备的DMA请求先经过一次地址翻译:设备看到的地址是“设备域地址”(I/O Virtual Address,IOVA),IOMMU硬件把它翻译成真实的物理地址。同时IOMMU还能做权限检查,只有映射过的地址和设备才被允许访问。这里的架构本质符合“艮”卦:树立边界。设备不能随心所欲地碰内存,所有访问必须经过“关隘”验证放行。从系统观来看,IOMMU不是简单的性能优化,而是整个系统信任模型的关键骨架。

4.2 拆解IOMMU的三个观察层次:硬件、内核抽象、用户态策略

读Linux内核的IOMMU实现,与其顺着源码一行行看,不如先分三个层次去“观象”:第一个层次是硬件能力层,第二个层次是内核通用框架层,第三个层次是策略配置层。这三个层次正好对应易经系统观里的“天、地、人”三才——硬件能力是“天”(定边界,决定什么能做),内核框架是“地”(承载实现,抽象通用流程),策略配置是“人”(做决策,决定怎么用)。

硬件能力层:不同厂商的IOMMU实现差异非常大,Intel的VT-d、AMD的IOMMU、ARM的SMMU,各自寄存器、页表格式、缺中断处理都不完全一样。但它们在架构上有一个共同的抽象模型:将设备地址空间划分为多个domain,每个domain有自己的页表,DMA请求经过硬件页表翻译后访问物理内存。这个“domain”概念,就是“艮”的边界实体。

内核通用框架层:Linux内核提供了struct iommu_ops这一组回调接口,把不同硬件的能力封装成统一API。比如iommu_attach_device把设备绑定到某个domain,iommu_map建立IOVA到物理地址的映射,iommu_unmap解除映射。这套抽象的价值在于:上层驱动(比如vfio、dm-crypt、网络虚拟化)不需要关心底层是VT-d还是SMMU,它们只看这组语言。这个抽象层本身,就是典型的“简易”实践——把硬件差异丢在门外,让系统复杂度可控。

策略配置层:用户态通过VFIO或DMA-BUF等机制,决定把哪些设备分配给哪个进程或虚拟机。如果没有这个策略层,IOMMU只是做了静态翻译,无法实现灵活动态的资源调配。策略层代表的是“变易”能力:每台虚拟机可以有自己的IOVA映射,地址空间可以随时扩展、回收、隔离。

4.3 用五行评估IOMMU的设计健康度

拿五行模型来评估一下IOMMU这套系统:功能演进(木)体现在对新硬件特性的支持,比如嵌套页表、PASID、Shared Virtual Memory;数据资源(水)体现在页表和映射数据的组织方式,iommu_domain就是水的容器;处理流程(火)体现在缺页异常处理、设备dma_fault中断的传导路径;基础设施(土)体现在内核的IOMMU框架与DMA API的衔接,比如dma-iommu.c,它让通用DMA子系统能透明地使用IOMMU;治理规则(金)体现在权限检查、地址空间隔离、IOMMU_GROUP的划分逻辑。

我用这个模型复盘过一个线上事故:虚拟机热迁移时,新宿主机的IOMMU映射建立慢,导致设备DMA超时,业务中断。用五行视角看,问题出在“火”和“土”的配合上——迁移流程(火)触发了大量的map/unmap操作,但底层基础设施(土)的页表缓存刷新机制没有跟上,形成“火生土”的延迟链条。修复方案并不是去优化单个map函数,而是引入了预映射和批量映射(在迁移前先建好映射,再把设备切过去)。这个案例给我的启发是:读底层代码的时候,不要只盯着函数调用栈,还要注意数据流的“生克关系”,过早优化某个环节往往顾此失彼。

4.4 关于IOMMU的架构风格分类

从架构风格的角度看,IOMMU内核子系统明显属于“分层风格”和“策略/机制分离风格”的结合。硬件驱动层、通用API层、策略解释层的分工,是分层风格在系统软件里的经典应用。而“机制与策略分离”体现在:内核只提供映射机制(iommu_map/unmap),但“什么时候映射、映射给谁”由上层策略(VFIO/虚拟机管理器)决定。这个设计选择非常“易经”——把“不易”的机制和“变易”的策略分开,保留机制的稳定优雅,放大策略的灵活空间。

我见过不少驱动开发者一上来就想直接读写IOMMU寄存器,炸了几次之后才会理解为什么内核搞这么厚的一层抽象。这不是为了增加代码量,而是为了让“边界稳定”落在机制层,让“变更自由”落在策略层。阅读这类代码时,带着“这个模块在八卦中的位置是什么、五行中属于哪类”的问题走一遍,比你漫无目的地看源码高效得多。

5. 常见误区与实操心得:别让哲学成了玄学

5.1 哲学框架用得变味的三类典型问题

理论工具用过头就会变成障碍。我自己见过三种典型误区。

第一种是“卦辞万能化”。有些团队学了这套方法,逢会必翻卦书。讨论微服务拆分,先给每个服务定个卦,说不出来就重新定。这是本末倒置。卦象只是观察视角的标签,不是架构本身的属性。你定义服务职责时想清楚它的角色定位就好,不需要去套什么“泽火革”“天风姤”。如果有人拿卦名跟你说“你这个设计在易经里是大凶”,你可以直接请他闭嘴。

第二种是“只分阴阳,不做度量”。阴阳思维最大的敌人是“和稀泥”——你说同步好,他说异步妙,最后结论是“要平衡”。这种正确但无用的废话对架构没有任何帮助。我在团队里推行这套方法时,要求每一次“平衡”都落到具体数字和场景上:延迟超过200毫秒就切异步通道,热点数据在缓存命中率低于90%时就必须扩展缓存层。没有边界条件的平衡,等于没做决策。

第三种是“完全否认经验”。有些年轻开发者觉得有了哲学框架,就不用积累实战经验了。这大错特错。易经系统观的价值是帮助你组织经验、复盘失败,而不是替代经验。我看了无数系统代码之后才慢慢理解“艮卦”的边界价值,如果让我一毕业就看这套理论,我大概率会把它当成word salad。所以如果你没有足够的架构实践,建议先别急着套玄乎的说法,先把常见架构模式吃透,再把哲学当“复盘工具”来用。

5.2 让“系统观”保持可操作性的几个原则

根据我的实操经验,要让这套哲学驱动式软件架构法落地,必须坚持几个原则。

第一,每个抽象概念必须能翻译成一个可验证的架构动作。“阴阳平衡”不是可验证的,“检查所有外部依赖是否有超时上限和降级预案”是可验证的;“五行缺土”不是可验证的,“测试环境创建成功率低于95%时暂停业务功能合并”是可验证的。如果哪个概念翻译不了,十有八九是你没想清楚它到底在说什么。

第二,用“架构观象日志”替代空泛的复盘。每次遇到线上故障、架构评审、技术选型,记录当时系统在阴阳、五行、八卦各个维度上呈现的现象,以及你做的判断。坚持几个月,你会慢慢拥有一种“直觉”:系统哪个地方不对劲,看一眼就能判断。这种直觉不是神启,而是大量结构化复盘喂出来的模式识别能力。我自己的日志习惯是:日期、系统模块、观察到的失衡现象(比如“接口层承担了太多映射逻辑”)、动作(拆分模块、调整接口边界)、后来的验证结果。

第三,把哲学方法当成“沟通语言”而不是“决策黑箱”。团队里有人用这套语言讨论架构时,如果大家都听得懂、能反驳,那就说明它作为沟通工具是合格的。如果只有一两个人懂,其他人只能点头,那就说明这套方法已经变成了权威主义的遮羞布,要赶紧刹车。架构是团队的事情,任何方法论都不能为独断提供合法性。

5.3 一个可复用的“卦象推演”团队活动模板

最后分享一个我经常带团队玩的活动,我们内部叫它“八卦观象会”。用两个小时左右,对一个正在进行中的架构设计做一次系统体检。具体步骤是这样:先把当前核心模块列出来,每个模块占一卦位;然后列出每个模块最近三周内发生的变更和踩过的坑;接着按五行分类统计这些变更和坑集中在哪一类;最后每个人挑一个“最不像它自己”的模块——也就是德位不匹配最明显的模块——提出调整建议。整个过程不需要任何玄学词汇,卦名可以换成角色名,五行可以换成维度名,工具只是帮团队换一个观察角度。

这个活动已经帮我们拦下过好几次过度设计。印象最深的是一次支付对账模块重构,团队本来计划引入一套复杂的规则引擎,理由是需要应对大量业务规则变化。但观象会上大家发现,“火”(流程)的复杂度被高估了,“水”(数据)的模型才是核心瓶颈。与其引入规则引擎,不如把数据模型梳理清楚,把对账规则做成配置化。最后重构工作量减少了约六成,上线后稳定性反而更高。这就是“观象”的力量——不是被表面的热闹吸引,而是回到系统本身的要素和关系里去,找那个真正的失衡点。

我个人在实践中的体会是:易经系统观最厉害的地方,不是给你什么标准答案,而是逼你在每一次架构决策前停下来,多问一句“这个设计在整体里扮演什么角色?系统会因此更加平衡,还是走向极端?”如果你能坚持用这种眼光看待架构,慢慢地,你会在写代码、看代码、评审代码时不自觉地发现那些“不对劲”的关系。它不是工具箱里多出来的一把锤子,而是重新照亮所有工具的一盏灯。后续如果你想继续深入,我建议从“德位匹配”这条线往下展开,结合手头的真实项目做一次完整的架构体检,那种体验比读十篇文章都来得深。

返回列表