
一个成熟的企业级系统,其内部结构通常可以清晰地划分为五层:业务层 → 应用层 → 服务层 → 数据层 → 基础设施层。这套模型是理解与设计复杂系统的有效框架,下面我们来逐层剖析其内涵与设计要点。
第一层:业务层(Business Layer)
这是整个架构的最顶层,也是所有技术决策的起点。任何系统存在的根本目的只有一个:服务于业务。因此,架构设计的第一步往往不是选择何种技术栈,而是深入理解业务本身。
以典型的电商场景为例,其核心业务流程可能包括:用户浏览商品 → 下单 → 支付 → 仓库发货 → 物流配送 → 售后。这条完整的链路就是核心业务链路。所有的技术架构设计,无论是模块划分还是服务编排,都必须紧密围绕这条主链路展开。如果跳过了业务分析这一步,技术团队很容易陷入“为了技术而技术”的陷阱,最终构建出一个技术先进但对业务价值贡献有限的系统。
第二层:应用层(Application Layer)
在明确了业务需求之后,我们就进入了应用层。这一层对应着一个个具体的业务系统,它们是承载业务逻辑的直接载体。
例如,在电商领域中,我们会拆解出订单系统、库存系统、商品系统、用户系统、营销系统、支付系统等。每一个系统都对应着一个独立的业务领域。这里就引入了一个至关重要的设计概念:领域划分(Domain)。通过将复杂的业务划分为不同的领域(如订单域、库存域、用户域),每个领域由一个独立的系统负责,可以实现业务逻辑的高内聚与边界清晰。
第三层:服务层(Service Layer)
当多个业务系统并存时,它们之间如何高效、可靠地协作?这就是服务层要解决的核心问题。现代架构中,系统间的协作主要有两种主流模式:
1. SOA(面向服务的架构)
系统之间通过定义清晰的接口进行直接调用。例如,订单系统创建订单时,直接调用库存服务的扣减库存接口。这种模式逻辑清晰,易于管理和监控。
2. EDA(事件驱动架构)
系统之间不直接调用,而是通过发布和订阅事件消息进行异步通信。例如,当“订单创建成功”事件发布后,库存系统、物流系统、营销系统可以各自监听并处理该事件。这种模式的优点在于系统解耦彻底,扩展能力极强,新增一个消费者几乎不影响原有系统。
目前,许多公司采用的其实是 SOA与EDA相结合的混合架构,根据业务场景的实时性、一致性要求灵活选用。
第四层:数据层(Data Layer)
数据层是系统的基石,许多系统崩溃的根源往往在于数据设计的不合理。要构建一个健壮的数据层,必须遵循三个核心原则。
原则一:数据归属清晰
每个业务系统必须拥有并全权管理自己的核心数据。例如,用户数据归属于用户系统,订单数据归属于订单系统。其他系统若需访问这些数据,只能通过该数据归属方提供的接口,严禁直接操作其底层数据库。
原则二:数据隔离
必须杜绝多个系统直接共享同一个数据库的情况。否则,系统之间会通过数据库 schema 形成强耦合。未来任何一个系统想要修改表结构,都可能引发连锁反应,导致“牵一发而动全身”的维护噩梦。
原则三:建立规范的数据同步机制
系统间的数据流转与同步,必须通过规范的渠道进行,例如调用服务接口、通过消息队列异步传递、或监听领域事件。绝对禁止跨系统直接读写对方的数据库表,这是保障数据一致性和系统架构清晰度的底线。
第五层:基础设施层(Infrastructure Layer)
最底层是支撑一切应用稳定运行的技术基础设施。它包括了服务器、网络、存储等硬件资源,以及数据库、消息队列、缓存、容器平台等关键软件组件。
常见的选型如 MySQL、Redis、Kafka、Docker、Kubernetes 等。这一层主要解决的是系统非功能性需求,如高可用、弹性伸缩、性能与安全等,确保上层应用能够稳定、高效地运行。
为什么90%的系统最终会变成“屎山代码”?
许多企业系统都难逃代码腐化、难以维护的命运,究其原因,通常可归结为以下三点:
原因一:缺乏清晰的模块边界
初期为了开发便捷,将所有代码写在一起,模块间随意交叉调用和访问数据。例如,在订单模块的代码里直接操作库存表。长此以往,代码间形成盘根错节的依赖网络,最终导致“没人敢改、没人能改”的局面。
原因二:对业务变化的预估不足
系统设计时只着眼于满足当前需求,没有为未来的业务扩展预留足够的灵活性。当业务快速增长或方向发生转变时,原有的代码结构无法适配,只能在原有基础上不断打补丁,最终结构完全混乱。
原因三:缺失持续的架构治理
许多团队只有开发功能的任务,却没有架构管理的机制。缺乏定期的架构评审、没有技术委员会来制定规范、也没有清晰的系统演进路线图。技术债务不断累积却无人偿还,系统自然滑向不可维护的深渊。
互联网公司的典型架构演进路线
大多数成功的互联网公司,其技术架构都会随着业务发展,经历一个循序渐进的演进过程。
第一阶段:单体架构
所有功能模块都打包在一个单一的应用程序中。优点在于开发部署简单快捷,适合业务初期。缺点是随着代码量膨胀,可维护性和扩展性会急剧下降。
第二阶段:模块化架构
在单体应用内部,按照业务领域进行模块化拆分,例如分为用户模块、订单模块等。模块间通过接口交互,逻辑上解耦,但物理上仍部署在一起。这是向更高级架构过渡的重要一步。
第三阶段:微服务架构
将系统彻底拆分为一系列小型、自治的服务,每个服务围绕特定业务能力构建,并可以独立开发、部署和伸缩。例如独立的订单服务、库存服务。这极大地提升了团队的开发效率和系统的横向扩展能力,但同时也引入了服务治理、分布式事务等新的复杂性。
第四阶段:平台化/中台架构
在微服务的基础上,进一步抽象和沉淀出可复用的公共能力,形成中台。例如,将用户、商品、交易等通用能力沉淀为“业务中台”,将监控、日志、配置等运维能力沉淀为“技术中台”。中台化旨在解决“重复造轮子”的问题,实现能力复用,快速支撑前台业务的创新。
优秀架构应具备的四个核心能力
一个真正好的系统架构,无论在哪个阶段,都应努力具备以下四种能力:
- 稳定性:系统必须能够持续、可靠地提供服务,具备容错、降级、熔断等机制以应对异常。
- 扩展性:当业务流量增长时,系统能够通过水平或垂直扩展轻松应对,不需要重构。
- 灵活性:当业务需求发生变化时,系统能够以较小的代价和较快的速度进行调整和迭代。
- 可维护性:代码结构清晰,文档完善,使得新加入的工程师也能快速理解和上手,避免形成知识孤岛。
总结:企业架构设计的方法论
回顾全文,我们可以将企业级架构的设计与实践提炼为一套简明的方法论,核心是五句话:
- 第一,业务驱动架构:技术永远为业务目标服务,脱离业务的架构是空中楼阁。
- 第二,模块化设计:通过清晰的领域划分,实现功能的高内聚、低耦合。
- 第三,服务化协作:通过服务接口或事件消息,实现模块/系统间解耦的协作。
- 第四,数据归属清晰:明确数据的Owner,并通过规范接口进行访问,这是系统健康的基石。
- 第五,架构持续演进:没有一劳永逸的架构,优秀的架构是在业务发展中不断迭代和演进而来的。
总而言之,好的系统架构并非在项目启动时一次性设计完成,而是一个伴随业务共同成长、不断适应和优化的动态过程。希望这套五层模型与演进思路,能帮助你在云栈社区的日常技术设计与评审中,建立起更清晰、更长远的思考框架。