知识卡片

分布对象设计第一定律:不要分布使用对象

普通读书笔记卡

内容

作者讲了一个每年都会重复遇到的场景:架构师自豪地展示把客户、订单、产品、配送这些组件各自设计成独立的远程对象、分别部署到不同处理节点上,理由是”为了性能——哪个组件忙就给它加机器”。这个设计乍看很有道理,中间件厂商也确实宣传分布对象能把透明性带到任意处理节点,让对象无论是否跨进程都能互相调用。但透明性覆盖不到性能:进程内的过程调用和跨进程、跨机器的过程调用之间存在数量级的差距,厂商的”透明”说的是编程接口上感觉不出差异,而不是执行速度没有差异。这类”按类模型拆分、把每种业务对象各自变成分布组件”的设计,实际效果只会是拖累性能、让系统更难构建和部署——这就是分布对象设计第一定律的由来:不要分布使用对象。真正想利用多处理器资源提升性能和吞吐率,正确做法不是把一个应用拆成分布在不同节点上的碎片对象,而是用集群——在每个处理器上完整部署同一套应用并复制多份,让每个节点内部的调用仍然是本地调用。可迁移启发:见到”分布式能带来更好性能”这类直觉判断时,先确认清楚——想要的到底是”拆分单个应用内部的组件”,还是”复制整个应用来水平扩展”,这两者的性能后果截然相反。

参考来源

- 位置:《企业应用架构模式》第一部分"表述"之"第7章 分布策略"之"7.1 分布对象的诱惑""7.2 远程接口和本地接口"(源文件:_epub-src/OEBPS/Text/000045.html、000046.html) - 结论依据:原文说明"虽然有很多东西在分布对象中可以是透明的,性能却不在其中。尽管上面的架构师是为了提高性能而分布组件的,但实际上,他的设计只会影响性能,使系统更难构建和部署""于是有了分布对象设计第一定律:不要分布使用对象",直接支撑本卡结论。 - 原始内容:于是有了分布对象设计第一定律:不要分布使用对象。