不知道您是否听说过“软件架构师最讨厌意大利面”这个梗?它是指软件架构师在设计应用系统时,应当在匹配业务概念的基础上,开发出清晰的架构与流程,避免出现各种在逻辑上相互缠绕,模块与层面关系定义不清,各个功能彼此交织,进而形成难以被运维的“意面式架构(spaghetti architecture)”。下面,我将总结一些值得您遵循的应用架构优秀实践,以便您构建出结构化的、可扩展的应用架构。
通常,应用架构包含了所有的软件模块、组件、内/外部系统、以及构成应用之间的交互关系。显然,结构良好的应用架构,可以确保您的应用能够根据业务和用户的需求进行预期的扩展。同时,好的架构既能够合理地隔离不同的功能概念,又可以在内/外部形成良好的依赖关系。
相反,如下图所示,如果您在针对各种需求的初期设计时,以及后期的变更中,忽略了对于应用架构的合理构建与维护,那么将会导致不同组件之间,依赖关系的错综复杂,甚至难以同步与管理。
那么在实际项目中,意面式的架构到底会给我们的系统带来哪些危害呢?
为了构建可靠且可扩展的应用架构,您需要基于严格的定义原则和完善的设计概念。显然,我们的目标是:既需要支持快速的业务增长和大规模的扩容需求,又需要降低部署的难度并避免高昂的代码维护成本。因此,我们可以从如下方面考虑应用架构的设计:
在此,我们引入一个架构画布(Architecture Canvas)概念。作为一个支持和加速架构设计的多层框架,它可以促进对可重用的服务和组件进行抽象。通过保留相对独立的生命周期,架构画布可以最大程度地减少变更所带来的影响,进而使得应用架构更易于维护和扩展。
架构画布的逻辑组成如上图所示。其中,从下往上分别是:
为确保设计架构的合理性,且不会产生“意面式”的烂尾,下面我将为您提供一些可以遵循的准则和建议。
1.不要带有横跨三个层面的向上引用
鉴于前文提到的结构化分层,我们显然不应该让与业务无关的基础服务,去依赖核心业务;也不应该让可重用的服务,依赖各种最终用户的接口。此外,向上引用往往会产生一个群集。如下图所示,在该群集中,存在直接或间接链接关系的任何两个模块,都具有循环依赖性。
在上图中,由于模块B可以间接地影响模块A,而模块A也可以间接地影响模块B,因此,这就是一组相互依赖的模块。此外,如果您有另一个正在使用核心服务B的最终用户模块(EU2),那么它就会依赖整个群集。可见,它们在运行时,不仅会占用大量不必要的资源,还会受到集群中某些模块变化的间接影响。
2.避免最终用户之间的旁路引用
为了确保正确的隔离,并避免最终用户具有不同的生命周期,最终用户模块不应提供可重用的服务。下图展示了最终用户之间的旁路引用关系。
也就是说,如果最终EU1调用到了EU2,则表明EU1无法独立于EU2,同时他也就不能独立于EU2下面的层级结构中的集群。
3.避免在核心模块和基础模块之间进行循环引用
如果您能够遵循前面提到的两个规则,那么就不必担心最终用户模块之间可能出现循环引用。反而,我们应当重点避免在核心模块和基础模块之间,可能出现的循环引用。此类模块之间的循环引用主要产生于:一些业务概念没能被正确地抽象,进而对代码的管理产生不良的影响。
如上图所示,循环引用多发生在如下两种情况中:
4.额外的建议
在讨论应用组合之前,我先声明一下:这里所说的“应用”,与我们通常在业务环境中所提及的“应用”,具有不同的含义。在该语境中,我们使用术语“应用”来指代 在开发环境中的最小部署单元。它既可以是被用于管理的所有环境,也可以是业务应用、IT用户、安全性集合、以及应用单个模块等。
为了识别应用到底属于上面提到的哪个层级,您应该对目标应用进行深入分析和模块化的解构。例如:如果某个应用将带有最终用户模块,那么它肯定属于最终用户层面。
下面是一组能够确保设计出前瞻架构的参考规则:
规则1:从模块的架构画布准则开始
我们应按照上面给出的建议,对模块进行正确地分层。
规则2:隔离公共服务
将各个模块正确地放置到位后,我们就可以开始设计应用了。如前所述,如果在“最终用户应用2”上有一个模块会使用到“最终用户应用1”上某一个模块,那么我们就应该对通用核心应用进行隔离,以免产生依赖性。如下图所示,如果两个应用要进行内容上的共享与交互,则需要在彼此隔离的情况下,通过通用的应用服务来实现。
规则3:请勿混淆所有者角色
如果一个应用拥有多个所有者,那么由于责任不清,可能会导致变更的内容与管理过于复杂。我们可以通过所有权的聚合与分拆(如下图)两个方式,给每个应用明确设定一个所有者。
规则4:分清参与者角色
与所有者角色类似,参与者也有各自不同的节奏。例如:有一个提供不同保险业务的门户网站。其所有业务线都处于同一个应用中,那么任何一个业务(例如车险业务)的任何更改都不可能独立于其他业务。因此,实际上是由那个最慢的业务线,决定了整体应用的发布周期。
如下图所示,我们需要通过在每条业务线中创建单独的应用,让每个参与者都可以预估自己的交付速度。在此基础上,我们可以根据项目的具体需求,或是将不同参与者的任务相互隔离,或是通过内容共享的方式,加强他们的协作。
当前文章:构建前瞻性应用架构的优秀实践
分享URL:http://www.csdahua.cn/qtweb/news9/418959.html
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网