Addison 与 Sydney 在自助餐厅共进午餐时,聊起了 Ticket Orchestrator 与票务管理工作流程集成服务之间的协调 。
"为什么不使用 gRPC 进行所有通信呢?我听说它非常快,"悉尼说。
"艾迪森说:"这只是一种实施,而不是一种架构。"在选择如何实施之前,我们需要确定我们需要哪种类型的合约。首先,我们需要决定是严密合约还是宽松合约。一旦我们决定了类型,我就会让你们决定如何实现它们,只要它们能通过我们的拟合函数。"
"是什么决定了我们需要什么样的合同?"希尼说。
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
Friday, April 15, 12:01
Addison 与 Sydney 在自助餐厅共进午餐时,聊起了 Ticket Orchestrator 与票务管理工作流程集成服务之间的协调 。
"为什么不使用 gRPC 进行所有通信呢?我听说它非常快,"悉尼说。
"艾迪森说:"这只是一种实施,而不是一种架构。"在选择如何实施之前,我们需要确定我们需要哪种类型的合约。首先,我们需要决定是严密合约还是宽松合约。一旦我们决定了类型,我就会让你们决定如何实现它们,只要它们能通过我们的拟合函数。"
"是什么决定了我们需要什么样的合同?"希尼说。
在第 2 章中,我们开始讨论三个 重要力量的交叉点--沟通、一致性和协调--以及如何对它们进行权衡。 我们在一个连接的三维空间中模拟了这三种力量的交叉空间,如图 13-1 所示。在第 12 章中,我们再次讨论了这三种力量,并讨论了各种沟通方式及其权衡。
无论建筑如何辨别这种关系,有些力量还是会跨越概念空间,对所有其他维度产生同等影响。如果用视觉上的三维隐喻来解释,这些交叉的力量就像是一个额外的维度,就像时间与三个物理维度是正交的一样。
在软件架构中,有一个不变的因素贯穿并影响着架构师决策的几乎每一个方面,那就是契约,广义上的契约是指架构的不同部分如何相互连接。合同在字典中的定义如下:
旨在通过法律强制执行的书面或口头协议,尤其是有关就业、销售或租赁的协议。
在软件中,我们广泛使用合约来描述架构中的集成点等事物,许多合约格式都是软件开发设计流程的一部分:SOAP、REST、gRPC、XMLRPC 以及其他一些字母缩略词。不过,我们扩大了定义的范围,使其更加一致:
体系结构各部分用来传递信息或依赖关系的格式。
合同的定义涵盖了用于将系统各部分 "连接 "在一起的所有技术,包括框架和库的传递依赖关系、内部和外部集成点、缓存以及各部分之间的任何其他通信。
本章说明了合约对架构许多部分的影响,包括静态和动态量子耦合,以及提高(或降低)工作流有效性的方法。
就像软件架构中的许多东西一样,合同并不存在于 的二进制中,而是存在于从严格到宽松的广泛范围内。图 13-2使用合同类型示例说明了这一范围。
严格的契约要求遵守名称、类型、排序和所有其他细节,不留任何模糊之处。软件中最严格契约的一个例子是远程方法调用,使用的是平台机制,如 Java 中的 RMI。在这种情况下,远程调用模仿内部方法调用,匹配名称、参数、类型和所有其他细节。
许多严格合约格式都模仿了方法调用的语义。例如,开发人员会看到许多协议都包含 RPC(传统上是远程过程调用的首字母缩写)的某些变体。gRPC就是一个默认使用严格合约的流行远程调用框架的例子。
许多架构师喜欢严格合约,因为它们可以模拟内部方法调用的相同语义行为。 ...