知识卡片

良好架构须支持用例、运行、开发、部署四大目标,及保留可选项的必要性

普通读书笔记卡

内容

设计良好的软件架构必须同时支持四件事。对用例而言,架构首先要为系统自身的设计意图提供直观支持——架构优良的购物车应用看起来就该像购物车应用,主要用例应该在系统结构上以类、函数、模块的形式明确可见,开发者不必到处翻找系统该有的行为。对运行而言,架构必须支撑实际的吞吐量和响应时间需求(每秒处理十万用户,或毫秒级完成大数据仓库查询),这直接决定了系统是该拆成并行小服务、共享地址空间的轻量线程、独立地址空间的进程集合,还是干脆单进程单体就够了——但这个选择本身正是架构师该为未来保留的可选项之一,单体模式写死之后再想改造成多进程/多线程/微服务就困难得多。对开发而言,援引康威定律(组织设计的系统会复制其自身的沟通结构):多团队协作开发的系统必须被恰当地切分成隔离良好、可独立开发的组件,才能分配给不同团队各自推进而不互相干扰。对部署而言,设计目标应该是”立刻部署”——不依赖成堆脚本配置文件、不需要手动创建一堆有严格要求的目录,这同样要靠正确划分隔离组件、加上负责启动连接监控各组件的主组件来实现。这四个目标之所以难以一次性权衡妥当,是因为我们大部分时候根本无法预知系统的全部用例、运行条件、开发团队结构或部署需求,而且即便当下能预知,这些需求也会随系统生命周期演进而不断变化——面对这种本质上模糊多变的目标,能做的是采用一些实现成本较低的架构原则,把系统正确划分成隔离良好的组件,尽可能长时间地为未来保留尽可能多的可选项。

参考来源

- 位置:《架构整洁之道》第16章《独立性》"用例""运行""开发""部署""保留可选项"(源文件:_epub-src/text/part0014_split_001.html) - 结论依据:原文分别说明架构对用例、运行、开发(引用康威定律)、部署四方面的具体支持要求,并指出因无法预知未来需求且需求会持续变化,架构师应通过低成本原则划分隔离组件来保留可选项,直接支撑本卡片结论。 - 原始内容:一个架构优良的购物车应用看起来就该像是一个购物车应用……任何一个组织在设计系统时,往往都会复制出一个与该组织内沟通结构相同的系统……一个设计良好的架构应该通过保留可选项的方式,让系统在任何情况下都能方便地做出必要的变更。