架构设计的三个原则

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介: 架构设计的三个原则

在进行架构设计时,我认为需要遵循如下原则:

  • 一致原则
  • 简单原则
  • 演进原则

◐ 一致原则


一致性是软件架构质量原则的根基,遵循一致原则的软件架构可以有效地保证整个架构解决方案的清晰直接,降低了解决方案的复杂度。尤其对于一个大规模系统,往往需要多个团队共同开发完成,如果不遵循一致原则,就会导致整个平台的建设缺乏完整性和规范性,各个子系统各自为政,业务功能重复开发,技术实现五花八门,服务集成复杂低效,信息冗余制造出知识壁垒。

一致原则具体体现为:

架构风格的一致性


针对相同的业务复杂度和技术复杂度,要形成统一的架构风格。例如,对外公开的业务能力采用微服务架构风格,保证各个服务的高内聚低耦合,确保了整个系统的可扩展能力;数据采集、治理和分析业务采用基于Lambda架构模式的大数据架构风格,为数据的处理建立批处理层与速度处理层,满足不同业务场景的数据需求;服务之间的异步消息协作采用事件驱动架构风格,保证服务之间消息传递的高效性与实时性,提高整个系统的响应能力。

技术选型的一致性


针对相同或相似的问题,应采用相同的方案和技术,从而使得开发人员在掌握了其中一种解决方案后,针对相似的问题,可以推导出相同的解决方案,降低了方案的复杂度,规避了重复开发,降低了代码的维护成本。以微服务架构为例,技术选型涉及的内容主要包括微服务组件、日志处理、权限管理、分布式事务、数据库访问、消息通信机制、缓存技术、安全策略、开发语言、框架版本、监控运维,同时,还要求开发团队遵循一致的编码规范。

◐  简单原则


软件架构的目的就是为了控制软件系统的复杂度。分析软件系统的复杂度成因,主要来自规模、结构和变化。

对于规模引起的复杂度,可以通过“分而治之”的思想来解决,也就是将整个系统按照业务维度拆分为多个细小而简单的模块(组件或服务),每个服务的规模都是团队或团队成员可以控制的。

结构引起的复杂度取决于参与协作的模块(组件或服务)的数量,数量越多,模块之间的关系就越复杂,因为协作产生的依赖很容易让整个系统变得混乱而无序,增加了开发和维护的成本。要降低复杂度,就需要清晰地定义模块的边界,合理地分配职责,以减少不必要的依赖关系;同时,定义一致而稳定的协作接口,让模块之间的协作变得有序,清晰地体现彼此之间的调用链,明确消息数据的传递方向。

需求的变化总是会带来解决方案的调整,最终使得持续变化的解决方案变得越来越复杂。如何有效地应对需求变化?一方面需要团队提前识别出可能发生变化的热点功能,另一方面也需要注意避免对未来做出过度设计。若能识别出变化的热点功能,就能通过封装或抽象的设计原则,让实现方案尽可能具有可扩展能力,将变化产生的影响降到最低。然而,未来的变化总是不可预测的,如果不能确定未来是否会发生变化,则不要引入太多的间接和抽象,形成过度设计,增加了解决方案的复杂度。

遵循简单原则的架构体现为:

  • 引入领域驱动设计的限界上下文模式帮助合理地识别微服务,明确微服务之间的协作模式,确定业务需求与微服务之间的映射关系,减少不必要的微服务协作;
  • 采用前后端分离,避免了前端用户体验复杂度与后端业务复杂度之间混合导致的复杂度叠加,也可以保证前、后端开发团队明确前后端协作的接口,进行并行开发;
  • 保持模块之间接口的松耦合,从架构上考虑数据分析场景与业务处理场景的分离,以定义数据平台的边界,驱动出数据交换的接口,确定数据平台和业务服务之间的协作方式;
  • 识别复用的业务能力:站在产品高度和全面视角分析业务能力,将满足单一职责的业务能力封装为高内聚的服务或组件,完成功能的复用,降低系统的代码规模,保证了系统的简单性。

◐ 演进原则


架构设计不是一蹴而就的,由于需求会不断发生变化,架构设计也需要针对变化的需求做出调整。由于架构做出的设计和决策往往是一个软件系统最为重要的部分,对架构做出的调整成本和难度都比较大,因此,在进行架构设计时,应考虑解决方案的演进能力,即能够随着需求的变化以最小的修改成本实现架构方案的不断演进。

遵循演进原则的架构应满足:

响应变化的能力


演进能力的一个体现是响应变化的能力,一个设计原则是将变化产生的影响控制到最小范围。这一原则确定了架构方案需要按照变化的方向进行模块的划分,从而顺应变化,同时,保证业务复杂度与技术复杂度的正交关系,避免业务的变化影响到技术实现的变化,反之亦然。我们可遵循企业架构的设计思想,根据不同的观察视角将整个系统架构划分为业务架构、应用架构、数据架构和技术架构。其中,为了降低变化影响,让系统的应用架构和数据架构对准业务架构,即按照业务能力对系统的模块(组件或服务)进行职责划分,同时保证每个应用模块中的领域模型与数据模型对应;对于技术架构,则通过分层架构模式将业务与技术分离,保证二者的松散耦合。

职责分配与合理抽象


识别和设计微服务的质量直接影响到系统的演进能力,整个系统需要针对领域进行分析,从业务能力的角度进行功能的职责分配,保证每个微服务是内聚的,同时,通过有效识别变化的热点,对其利用抽象降低彼此之间的耦合,保证了具体实现的可扩展能力与可替换能力。

架构模式的运用

对于业务系统而言,通过采用微服务架构模式、事件驱动架构模式和分层架构模式,尽可能保证整个业务系统的松散耦合,提高系统架构的演化能力;对于数据平台,可采用基于流处理的管道-过滤器模式,通过将数据处理功能拆分为一个个过滤器(processor),然后在管道中自由组合这些过滤器,满足整个数据处理流程的需要。这一模式保证了功能的复用性和可扩展性。

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
6月前
|
敏捷开发 缓存 架构师
Apache 架构师总结的 30 条架构原则
Apache 架构师总结的 30 条架构原则
76 0
|
3月前
|
存储 监控 安全
大数据架构设计原则:构建高效、可扩展与安全的数据生态系统
【8月更文挑战第23天】大数据架构设计是一个复杂而系统的工程,需要综合考虑业务需求、技术选型、安全合规等多个方面。遵循上述设计原则,可以帮助企业构建出既高效又安全的大数据生态系统,为业务创新和决策支持提供强有力的支撑。随着技术的不断发展和业务需求的不断变化,持续优化和调整大数据架构也将成为一项持续的工作。
|
4月前
|
NoSQL Redis UED
业务架构问题之在流程建模中,“定职责”的重要性是什么,流程建模中的交互设计原则是什么
业务架构问题之在流程建模中,“定职责”的重要性是什么,流程建模中的交互设计原则是什么
|
3月前
|
消息中间件 监控 Java
解锁Spring Cloud微服务架构的奥秘:深度剖析拆分原则,打造高内聚低耦合的业务创新引擎!
【8月更文挑战第3天】踏入微服务领域,Spring Cloud以丰富组件助力高效系统构建。微服务拆分需遵循原则确保系统高内聚低耦合且能适应变化。首要原则为单一职责,每个服务专注一个业务功能,降低复杂度并提高可维护性。其次,追求高内聚低耦合以减少服务间影响。围绕业务域拆分有助于保持逻辑清晰及团队协作。处理数据一致性问题时,考虑采用最终一致性模型。Spring Cloud提供Eureka、Zuul/Gateway、Sleuth和Config等工具支持服务发现、路由、跟踪及配置管理,共同构建灵活健壮的微服务架构。
75 2
|
4月前
|
存储 设计模式 前端开发
软件架构设计的原则与模式:构建高质量系统的基石
【7月更文挑战第26天】软件架构设计是构建高质量软件系统的关键。遵循高内聚、低耦合、单一职责等设计原则,并灵活运用分层架构、微服务架构、客户端-服务器架构等设计模式,可以帮助我们设计出更加灵活、可扩展、可维护的软件系统。作为开发者,我们应该不断学习和实践这些原则与模式,以提升自己的架构设计能力,为团队和用户提供更加优秀的软件产品。
|
3月前
|
边缘计算 Kubernetes 持续交付
构建高效后端系统:面向未来的架构设计原则
【8月更文挑战第8天】在技术飞速发展的今天,后端系统的架构设计显得尤为关键。本文将探讨如何通过采用微服务、容器化及自动化等现代技术手段,来构建一个可扩展、高可用且易于维护的后端系统。我们将深入分析这些技术背后的原理及其在实际场景中的应用,同时也会讨论如何在保障数据一致性和系统安全性的前提下,提升系统的响应速度和处理能力。
|
4月前
|
搜索推荐
业务系统架构实践问题之有效地实现“域间不可见”原则问题如何解决
业务系统架构实践问题之有效地实现“域间不可见”原则问题如何解决
|
4月前
|
监控 Java API
Java面试题:解释微服务架构的概念及其优缺点,讨论微服务拆分的原则。
Java面试题:解释微服务架构的概念及其优缺点,讨论微服务拆分的原则。
77 0
|
4月前
|
XML 缓存 API
REST原则、RESTful架构
REST原则、RESTful架构
47 0
|
6月前
|
敏捷开发 监控 测试技术
软件架构的艺术:探索演化之路上的18大黄金原则
实际工作表明,一步到位的设计往往不切实际,而演化原则指导我们逐步优化架构,以灵活响应业务和技术的变化。这不仅降低了技术债务和重构风险,还确保了软件的稳定性和可扩展性。同时,架构的持续演进促进了团队协作,激发了成员间的知识共享与技能提升。
135 0
软件架构的艺术:探索演化之路上的18大黄金原则