2.2.7 架构持续演进原则
如今,技术与业务的发展速度都非常快,在工程实践中很少有从一开始就能够被明确定义并适用于整个软件生命周期的架构模式,而是需要在一定范围内不断重构,以适应变化的技术和业务需求。同理,云原生架构本身也应该且必须具备持续演进的能力,而不是一个封闭式的、被设计后一成不变的架构。因此在设计时除了要考虑增量迭代、合理化目标选取等因素之外,还需要考虑组织(例如架构控制委员会)层面的架构治理和风险控制规范以及业务自身的特点,特别是在业务高速迭代的情况下,更应该重点考虑如何保证架构演进与业务发展之间的平衡。
1.演进式架构的特点和价值
演进式架构是指在软件开发的初始阶段,就通过具有可扩展性和松耦合的设计,让后续可能发生的变更更加容易、升级性重构的成本更低,并且能够发生在开发实践、发布实践和整体敏捷度等软件生命周期中的任何阶段。
演进式架构之所以在工业实践中具有重要意义,其根本原因在于,在现代软件工程领域达成的共识中,变更都是很难预测的,其改造的成本也极其高昂。演进式架构并不能避免重构,但是它强调了架构的可演进性,即当整个架构因为技术、组织或者外部环境的变化需要向前演进时,项目整体依然能够遵循强边界上下文的原则,确保领域驱动设计中描述的逻辑划分变成物理上的隔离。演进式架构通过标准化且具有高可扩展性的基础设施体系,大量采纳标准化应用模型与模块化运维能力等先进的云原生应用架构实践,实现了整个系统架构在物理上的模块化、可复用性与职责分离。在演进式架构中,系统的每个服务在结构层面与其他服务都是解耦的,替换服务就像替换乐高积木一样方便。
2.演进式架构的应用
在现代软件工程实践中,演进式架构在系统的不同层面有着不同的实践与体现。
在面向业务研发的应用架构中,演进式架构通常与微服务设计密不可分。例如,在阿里巴巴的互联网电商应用中(例如大家所熟悉的淘宝和天猫等),整个系统架构实际上被精细地设计成数千个边界划分明确的组件,其目的就是为希望做出非破坏性变更的开发人员提供更大的便利,避免因为不适当的耦合将变更导向难以预料的方向,从而阻碍架构的演进。可以发现,演进式架构的软件都支持一定程度的模块化,这种模块化通常体现为经典的分层架构及微服务的最佳实践。
而在平台研发层面,演进式架构更多地体现为基于“能力”的架构(Capability Oriented Architecture,COA)。在Kubernetes等云原生技术逐渐普及之后,基于标准化的云原生基础设施正迅速成为平台架构的能力提供方,而以此为基础的开放应用模型(Open Application Model,OAM)理念,正是一种从应用架构视角出发,将标准化基础设施按照能力进行模块化的COA实践。
3.云原生下的架构演进
当前,演进式架构还处于快速成长与普及阶段。不过,整个软件工程领域已经达成共识,即软件世界是不断变化的,它是动态而非静态的存在。架构也不是一个简单的等式,它是持续过程的一种快照。所以无论是在业务应用还是在平台研发层面,演进式架构都是一个必然的发展趋势。业界大量架构更新的工程实践都诠释了一个问题,即由于忽略实现架构,且保持应用常新所要付出的精力是非常巨大的。但好的架构规划可以帮助应用降低新技术的引入成本,这要求应用与平台在架构层面满足:架构标准化、职责分离与模块化。而在云原生时代,开发应用模型(OAM)正在迅速成为演进式架构推进的重要助力。