一.进程内架构设计的四个重点:

  • 灵活性:变化的隔离与传播

  • 易懂性与开发难度:知识显式、隐式、不可言说

  • 可测试性:问题的发现与定位

  • 可扩展性(scalability):能否从intra改为inter

**

二.常见的几种架构

2.1 分层架构

image.png

  • 灵活性

    • 层与层之间看作机器抽象/接口抽象
    • 通过层隔离需要传播的变化
    • 需要区分分层与delegation
  • 易懂性与开发难度

    • 需要明确每一层的职责范围
    • 对于组件和功能归属于哪一
    • 层,是知识管理的难点
      • 过多的分层造成管理困难
      • 过少的分层无法隔离变化
  • 可测试性

    • 对于分层架构需要明确进程边界
    • 对于边界外的系统选择有效的策略
    • 保证测试有效性
    • 与问题定位速度紧密相关
      • 过少的层,无法有效定位问题
  • 可扩展性(scalability):能否从intra改为inter

    • 分层架构潜在可以将下一层移出当前进程
    • 但是整体分区更常⻅

2.2 事件驱动架构
image.png

  • 灵活性
    • 功能转化为事件的消费和生产
    • 数据通过事件或存储传递
    • 通过事件编排以组织系统功能
  • 易懂性与开发难度

    • 模块间的调用关系转化为隐式知识,增加理解成本
    • 异步的结构难以完成严格的时序控制
  • 可测试性

    • 单元测试简单,事件处理模块可以容易地被测试
    • 派发逻辑也很容易测试,可以通过Stub/Spies/Mocks测试消息传递逻辑
    • 组件测试容易但是功能测试困难,大量逻辑泄露到事件编排

image.pngimage.png
测试有效性很难保证. 事件产生的顺序等. 好测但是不能转换为期待的编排. 测试难度增加.

  • 可扩展性
    • 事件处理与分发可以容易地转为inter process