正如我们在孩提时代就已经发现的那样,要想了解事物是如何组合在一起的,一种好方法就是先将其拆开。为了理解复杂的主题(例如分布式架构中的权衡),架构师必须知道从哪里开始厘清思路。
在 What Every Programmer Should Know About Object-Oriented Design (Dorset House; https://oreil.ly/bLPm4 )一书中,Meilir Page-Jones敏锐地观察到架构中的耦合可以分为两种不同的类型:静态耦合和动态耦合。静态耦合是指架构的组成部分(类、组件、服务等)是如何连接在一起的:依赖项、耦合度、连接点等。通常,架构师可以在编译时通过架构内的静态依赖项来评估静态耦合的情况。
动态耦合是指架构内的各个部分在运行时是如何相互调用的。例如,什么样的通信方式、各部分间传递什么样的信息、契约的严格性等。
我们的目标是研究如何在分布式架构中进行权衡分析,要做到这一点,必须隔离活动的部分,以便独立讨论和理解每一部分,之后再从整体理解。
第一部分主要处理架构结构,即事物如何静态耦合在一起。在第2章中,我们会解决如何区分架构中静态耦合范畴和动态耦合范畴的问题,并展示一个必须分解架构才能理解的全景图。在第3章中,我们从定义架构的模块化和分离开始展示分解架构的过程。第4章介绍评估和解构代码库的工具,第5章介绍辅助该过程的模式。
数据和事务在架构中变得越来越重要,促使架构师和DBA在决策时做出很多权衡。第6章会讨论数据对架构的影响,包括如何协调服务边界和数据边界。最后,第7章通过将架构耦合与数据问题联系在一起对集成因素和分解因素给予定义,这二者分别用于促使服务规模和范畴变得更大或者更小。