知识卡片

必须使用分布的五种典型场景

结构图卡

内容

“不要分布使用对象”是原则而非绝对禁令——总有一些跨进程的分布是无法消除的,值得像”过街老鼠”一样尽力压缩它们的范围,但不可能压缩到零。典型的五种不可避免场景:一、传统的客户机与服务器之间——用户的个人计算机本来就是共享数据的不同物理节点,天然分属不同进程,这是最典型的跨进程划分。二、基于服务器的应用软件(如应用服务器)与数据库之间——理论上可以把所有应用逻辑写成存储过程塞进数据库进程,但这样做并不实际,因此通常必须有独立进程;好在SQL本身就是为远程数据库访问设计的接口,可以想办法把损耗降到最低。三、Web服务器与应用服务器之间——最好让二者运行在同一进程内,但实际情况不总能如愿。四、因为第三方厂商软件包的限制而不得不做的进程划分——好的软件包至少会提供粗粒度接口来减轻代价。五、其他各种不得不进行的划分——应该想尽办法避免,但总有例外情况逼你就范,这时也只能捏着鼻子把软件划成远程的、粗粒度的组件。

结构图

flowchart TB
  A["必须分布的场景"]
  A --> B["客户机 vs 服务器<br/>物理上不同节点,天然跨进程"]
  A --> C["应用服务器 vs 数据库<br/>SQL已是远程接口,尽量降损"]
  A --> D["Web服务器 vs 应用服务器<br/>理想是同进程,现实不总能"]
  A --> E["第三方软件包限制<br/>依赖对方是否提供粗粒度接口"]
  A --> F["其他不可避免的划分<br/>尽量避免但终归有例外"]

参考来源

- 位置:《企业应用架构模式》第一部分"表述"之"第7章 分布策略"之"7.3 必须使用分布的情况"(源文件:_epub-src/OEBPS/Text/000047.html) - 结论依据:原文说明"一个显而易见的划分出现在业务软件的传统客户机和服务器之间……第二种划分出现在基于服务器的应用软件(如应用服务器)和数据库之间……另一个进程划分出现在Web服务器与应用服务器之间的Web系统中……还可能由于厂商不同而进行进程划分……最后,还可能有一些别的原因导致你必须去划分你的应用服务器软件",直接支撑本卡结构图。 - 原始内容:再一次,用Colleen Roe难忘的话说:"节约使用分布对象。"