软件架构中的合约、微服务与代码复用
1. 服务通信中的力与合约概念
在服务通信过程中,每一种起作用的力都可视为一个维度。对于特定决策,架构师可以在空间中绘制代表这些力强度的位置图。从实际角度出发,架构师必须创建矩阵来研究改变这些相互关联的力所产生的影响。
1.1 合约的定义
合约是软件架构中一个贯穿并影响架构师决策几乎所有方面的恒定因素。在软件领域,合约被广泛定义为架构不同部分之间相互连接的方式。其广义定义为:架构各部分用于传达信息或依赖关系的格式。这一定义涵盖了所有用于将系统各部分“连接在一起”的技术,包括框架和库的传递依赖、内部和外部集成点、缓存以及各部分之间的任何其他通信。
1.2 合约的类型
合约在软件架构中从严格到宽松有不同的类型,如下表所示:
| 合约类型 | 特点 | 示例 |
| ---- | ---- | ---- |
| 严格合约 | 要求遵循名称、类型、顺序等所有细节,不留任何歧义 | 远程方法调用(如 Java 中的 RMI)、gRPC |
| 较宽松合约 | 相比基于 RPC 的格式,耦合性更低 | REST、GraphQL |
| 极宽松合约 | 通常表示为 YAML 和 JSON 等格式中的名/值对 | 简单的 JSON 名/值对 |
1.3 严格合约
许多严格合约格式模仿方法调用的语义。例如,开发者会看到许多包含“RPC”(传统上是远程过程调用的缩写)变体的协议,gRPC 就是一个流行的远程调用框架,默认使用严格合约。
严格合约的优点是能够模拟内部方法调用的语义行为,但它会在集成架构中产生
超级会员免费看
订阅专栏 解锁全文
1076

被折叠的 条评论
为什么被折叠?



