文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

构建前瞻性应用架构的优秀实践

2024-12-03 10:24

关注

为什么应用架构如此重要?

通常,应用架构包含了所有的软件模块、组件、内/外部系统、以及构成应用之间的交互关系。显然,结构良好的应用架构,可以确保您的应用能够根据业务和用户的需求进行预期的扩展。同时,好的架构既能够合理地隔离不同的功能概念,又可以在内/外部形成良好的依赖关系。

相反,如下图所示,如果您在针对各种需求的初期设计时,以及后期的变更中,忽略了对于应用架构的合理构建与维护,那么将会导致不同组件之间,依赖关系的错综复杂,甚至难以同步与管理。 

 

那么在实际项目中,意面式的架构到底会给我们的系统带来哪些危害呢?

如何构建可扩展的应用架构?

为了构建可靠且可扩展的应用架构,您需要基于严格的定义原则和完善的设计概念。显然,我们的目标是:既需要支持快速的业务增长和大规模的扩容需求,又需要降低部署的难度并避免高昂的代码维护成本。因此,我们可以从如下方面考虑应用架构的设计:

在此,我们引入一个架构画布(Architecture Canvas)概念。作为一个支持和加速架构设计的多层框架,它可以促进对可重用的服务和组件进行抽象。通过保留相对独立的生命周期,架构画布可以最大程度地减少变更所带来的影响,进而使得应用架构更易于维护和扩展。

架构画布的逻辑组成如上图所示。其中,从下往上分别是:

架构的验证

为确保设计架构的合理性,且不会产生“意面式”的烂尾,下面我将为您提供一些可以遵循的准则和建议。

1.不要带有横跨三个层面的向上引用

鉴于前文提到的结构化分层,我们显然不应该让与业务无关的基础服务,去依赖核心业务;也不应该让可重用的服务,依赖各种最终用户的接口。此外,向上引用往往会产生一个群集。如下图所示,在该群集中,存在直接或间接链接关系的任何两个模块,都具有循环依赖性。

在上图中,由于模块B可以间接地影响模块A,而模块A也可以间接地影响模块B,因此,这就是一组相互依赖的模块。此外,如果您有另一个正在使用核心服务B的最终用户模块(EU2),那么它就会依赖整个群集。可见,它们在运行时,不仅会占用大量不必要的资源,还会受到集群中某些模块变化的间接影响。

2.避免最终用户之间的旁路引用

为了确保正确的隔离,并避免最终用户具有不同的生命周期,最终用户模块不应提供可重用的服务。下图展示了最终用户之间的旁路引用关系。

也就是说,如果最终EU1调用到了EU2,则表明EU1无法独立于EU2,同时他也就不能独立于EU2下面的层级结构中的集群。

3.避免在核心模块和基础模块之间进行循环引用

如果您能够遵循前面提到的两个规则,那么就不必担心最终用户模块之间可能出现循环引用。反而,我们应当重点避免在核心模块和基础模块之间,可能出现的循环引用。此类模块之间的循环引用主要产生于:一些业务概念没能被正确地抽象,进而对代码的管理产生不良的影响。

如上图所示,循环引用多发生在如下两种情况中:

4.额外的建议

使用架构画布的应用组合

在讨论应用组合之前,我先声明一下:这里所说的“应用”,与我们通常在业务环境中所提及的“应用”,具有不同的含义。在该语境中,我们使用术语“应用”来指代 在开发环境中的最小部署单元。它既可以是被用于管理的所有环境,也可以是业务应用、IT用户、安全性集合、以及应用单个模块等。

为了识别应用到底属于上面提到的哪个层级,您应该对目标应用进行深入分析和模块化的解构。例如:如果某个应用将带有最终用户模块,那么它肯定属于最终用户层面。

下面是一组能够确保设计出前瞻架构的参考规则:

规则1:从模块的架构画布准则开始

我们应按照上面给出的建议,对模块进行正确地分层。

规则2:隔离公共服务

将各个模块正确地放置到位后,我们就可以开始设计应用了。如前所述,如果在“最终用户应用2”上有一个模块会使用到“最终用户应用1”上某一个模块,那么我们就应该对通用核心应用进行隔离,以免产生依赖性。如下图所示,如果两个应用要进行内容上的共享与交互,则需要在彼此隔离的情况下,通过通用的应用服务来实现。

规则3:请勿混淆所有者角色

如果一个应用拥有多个所有者,那么由于责任不清,可能会导致变更的内容与管理过于复杂。我们可以通过所有权的聚合与分拆(如下图)两个方式,给每个应用明确设定一个所有者。

规则4:分清参与者角色

与所有者角色类似,参与者也有各自不同的节奏。例如:有一个提供不同保险业务的门户网站。其所有业务线都处于同一个应用中,那么任何一个业务(例如车险业务)的任何更改都不可能独立于其他业务。因此,实际上是由那个最慢的业务线,决定了整体应用的发布周期。

如下图所示,我们需要通过在每条业务线中创建单独的应用,让每个参与者都可以预估自己的交付速度。在此基础上,我们可以根据项目的具体需求,或是将不同参与者的任务相互隔离,或是通过内容共享的方式,加强他们的协作。

原文Application Architecture: Best Practices for Future-Proofing Your Apps,作者: Francisco Menezes

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

 

来源:51CTO内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯