文章目录
1 引言
软件的首要技术使命:管理复杂度。
工程师的首要技术使命就是控制复杂度。整洁面向对象分层架构(Clean Object-oriented and Layered Architecture,COLA)是阿里团队自主研发的应用架构,是复杂治理之路上的一个里程碑。
COLA不仅是一个架构思想,还提供了一整套可以落地实施的框架和工具。我们可以使用COLA Archetype快速搭建一个符合COLA架构规范的业务应用,并在此基础上快速实现业务功能。
目前,COLA已经开源。自发布以来,COLA得到了社区的普遍关注和认可,并已经在阿里巴巴内外部多个团队落地。从实践情况来看,COLA在应用复杂度治理上的效果显著。
2 软件架构
架构始于建筑,这是人类发展分工协作的需要。将目标系统按某个原则进行切分,切分的原则是便于不同的角色进行并行工作。
软件架构是一个系统的草图。软件架构描述的对象是直接构成系统的抽象组件。各个组件之间的连接则明确和相对细致地描述组件之间的通信。
在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象。在面向对象领域中,组件之间的连接通常用接口来实现。
随着互联网的发展,现在的系统要支撑数亿人同时在线购物、通信、娱乐等需要,相应的软件体系结构也变得越来越复杂。软件架构的含义也变得更加宽泛,我们不能简单地用一个软件架构来指代所有的软件架构工作。
3 架构分类
为了更清楚地表述六边形架构、洋葱架构、COLA架构在软件架构中的位置,以及应用开发人员应该关注什么,可以将软件架构划分成业务架构、应用架构、系统架构、数据架构、物理架构和运维架构,如下图所示:
- 业务架构:由业务架构师负责,也可以称为业务领域专家、行业专家。业务架构属于顶层设计,其对业务的定义和划分会影响组织结构和技术架构。
- 应用架构:由应用架构师负责,他需要根据业务场景的需要,设计应用的拓扑结构,制定应用规范、定义接口和数据交互协议等。并尽量将应用的复杂度控制在一个可以接受的水平,从而在快速地支撑业务发展的同时,确保系统的可用性和可维护性。COLA架构是一个典型的应用架构,致力于应用复杂度的治理。
- 系统架构:根据业务情况综合考虑系统的非功能属性要求(包括性能、安全性、可用性、稳定性等),然后做出技术选型。对于流行的分布式架构系统,需要解决服务器负载、分布式服务的注册和发现、消息系统、缓存系统、分布式数据库等问题,同时解决如何在CAP(Consistency,Availability,Partition Tolerance)定理之间进行权衡的问题。
- 数据架构:对于规模大一些的公司,数据治理是一个很重要的课题。如何对数据收集、处理,提供统一的服务和标准,是数据架构需要关注的问题。其目的就是统一数据定义规范,标准化数据表达,形成有效易维护的数据资产,搭建统一的大数据处理平台,形成数据使用闭环。
- 物理架构:物理架构关注软件元件是如何放到硬件上的,包括机房搭建、网络拓扑结构、网络分流器、代理服务器、Web服务器、应用服务器、报表服务器、整合服务器、存储服务器和主机等。
- 运维架构:负责运维系统的规划、选型、部署上线,建立规范化的运维体系。要借助技术手段控制和优化成本,通过工具化及流程提升运维效率,注重运营效益。制定和优化运维解决方案,包括但不限于柔性容灾、智能调度、弹性扩容与防攻击、推动及开发高效的自动化运维和管理工具、提高运维的自动化程度和效率。
4 典型的应用架构
4.1 分层架构
分层是一种常见的根据系统中的角色(职责拆分)和组织代码单元的常规实践。分层架构大概经历了以下阶段。
- 20世纪60年代~70年代:GUI还没有出现,所有的应用程序要通过命令行使用,那时的应用程序也很简单,还不需要分层,实际上也只有一层。
- 20世纪70年代~80年代:企业应用出现了,用户可以使用计算机通过网路访问应用,开始出现C/S两层架构模式。
- 20世纪90年代之后:互联网开始普及,随着用户的增长,以及应用复杂性和基础实施复杂性的增加,终于诞生了我们现在仍在使用的三层架构,如下图所示:
- 2000年之后:2003年,Eric Evans出版了他的标志性著作《领域驱动设计:软件核心复杂性应对之道》。从此,DDD的概念被人熟悉,以及基于DDD的一系列架构演变开始出现。
可