在设计架构时,我认为需要遵循以下原则:一致性原则简单性原则进化原则一致性原则一致性是软件架构质量原则的基础,遵循一致性原则的软件架构可以有效保证了整个架构方案的清晰性和直接性,降低了方案的复杂度。尤其是一个大型系统,往往需要多个团队共同开发完成。如果不遵循一致性原则,整个平台的建设就会缺乏完整性和规范性,各个子系统各行其是,业务功能会重复开发,技术实现也会参差不齐。服务集成复杂低效,信息冗余造成知识壁垒。一致性原则具体体现为:(1)架构风格的一致性对于相同的业务复杂度和技术复杂度,应该形成统一的架构风格。比如对外暴露的业务能力采用微服务架构风格,保证各个服务的高内聚低耦合,保证了整个系统的可扩展性;数据采集??、治理和分析业务采用基于Lambda架构模型的大数据架构风格,建立批处理层和速处理层进行数据处理,满足不同业务场景的数据需求;服务间的异步消息协作采用事件驱动的架构风格,保证服务间消息传递的效率和实时性,提高系统整体的响应能力。(2)技术选择的一致性对于相同或相似的问题,应采用相同的方案和技术,使开发人员在掌握其中一种解决方案后,可以针对类似的问题推导出相同的解决方案,从而降低了解决方案的复杂度,避免了重复开发,降低了代码的维护成本。以微服务架构为例,技术选型涉及的内容主要包括微服务组件、日志处理、权限管理、分布式事务、数据库访问、消息通信机制、缓存技术、安全策略、开发语言、框架版本、监控操作等.同时,也要求开发团队遵循一致的编码标准。简单性原则软件体系结构的目的是控制软件系统的复杂性。分析软件系统复杂性的原因,主要从规模、结构和变化三个方面进行分析。对于规模带来的复杂性,可以通过“分而治之”的思想来解决,即将整个系统按照业务维度划分为多个小而简单的模块(组件或服务),每个服务的规模是团队或团队成员可以控制的。结构带来的复杂性取决于参与协作的模块(组件或服务)的数量。数量越大,模块之间的关系就越复杂,因为协作产生的依赖很容易让整个系统变得混乱无序,增加开发和维护成本。为降低复杂度,需要明确模块边界,合理分配职责,减少不必要的依赖;同时,定义一致稳定的协作接口,使模块间的协作有序、清晰地反映出彼此之间的调用链条,明确消息数据的传输方向。需求的变化总会导致解决方案的调整,最终使得不断变化的解决方案越来越复杂。如何有效应对需求变化?团队一方面需要提前识别可能变化的热点功能,另一方面也需要注意避免过度设计未来。如果你能识别出变化的热点函数,你可以使用封装或抽象设计原则,使实现尽可能具有可扩展性,并将变化的影响降到最低。然而,未来的变化总是难以预料。如果不确定以后是否会有变化,就不要引入过多的间接和抽象,造成过度设计,增加解决方案的复杂度。遵循简洁原则的架构体现在:引入领域驱动设计的限界上下文模式,帮助合理识别微服务,理清微服务之间的协作模式,确定业务需求与微服务的映射关系,减少不必要的需求微服务协作;采用前后端分离,避免前端用户体验复杂度和后端业务复杂度混合导致的复杂度叠加,同时也能保证前后端开发团队明确前后端协同接口,并行开发;保持模块间接口的松耦合,从架构上考虑数据分析场景和业务处理场景的分离,定义数据平台的边界,驱动数据交互的接口,确定数据平台与业务服务的协作模式;识别复杂有用的业务能力:从产品角度和综合角度分析业务能力,将满足单一职责的业务能力封装成高内聚的服务或组件,完成功能复用,降低系统代码量,保证系统简洁性。演进原则架构设计不是一蹴而就的,因为需求会不断变化,架构设计也需要根据不断变化的需求进行调整。由于架构的设计和决策往往是软件系统中最重要的部分,调整架构的成本和难度都比较高。因此,在设计架构时,应该考虑解决方案的演进能力,即能够随着需求的变化,以最小的修改成本实现架构解决方案的持续演进。一个遵循演化原则的架构应该满足:(1)响应变化的能力演化能力的一个体现是响应变化的能力,设计原则是最小化变化的影响。这个原则决定了架构方案需要按照变化的方向进行模块划分,以适应变化,同时保证业务复杂度和技术复杂度的正交关系,避免业务变化影响技术实施的变化,反之亦然。我们可以遵循企业架构的设计思路,根据不同的观察视角,将整个系统架构分为业务架构、应用架构、数据架构和技术架构。其中,为了减少变更的影响,将系统的应用架构和数据架构与业务架构对齐,即按照业务能力划分系统模块(组件或服务)的职责,同时时刻保证领域模型和数据模型在各个应用模块中的对应关系;对于技术架构,通过分层架构模式将业务和技术分离,保证两者的松耦合。(2)职责分配与合理抽象微服务识别与设计的好坏直接影响到系统的演化能力。需要对整个系统进行领域分析,从业务能力的角度进行功能职责的分配,保证各个微服务之间的内聚性。同时,通过有效识别变化热点,利用抽象降低它们之间的耦合,保证了具体实现的可扩展性和可替换性。(3)架构模式的应用对于业务系统,通过采用微服务架构模式、事件驱动架构模式、分层架构模式,尽可能保证整个业务系统的松耦合,以及业务系统的演进能力。系统架构可以改进;对于数据平台,可以采用基于流处理的pipeline-filter模式来满足整个数据处理过程的需要,将数据处理功能拆分成一个个的filter(处理器),然后在pipeline中自由组合这些filter。这种模式保证了功能的可重用性和可扩展性。【本文为专栏作家“张艺”原创稿件,转载请联系原作者】点此阅读更多该作者好文
