重新思考軟件架構(gòu):一種更靈活的設(shè)計(jì)方法
软件架构传统上被理解为系统设计和组织的高层次框架——概述组件模式、它们之间的互动以及指导方针。设计优良的架构在可伸缩性、可维护性、安全性和性能之间进行各种权衡。它为合作提供了基础,指导团队在构建、扩展和调整复杂系统的过程中工作。
在过去的几十年里,出现了一些主导的架构模型,其中包括:分层式架构、微服务架构(由小型、独立的服务组成的架构)和事件驱动系统(响应事件的系统)。每个模型都在解决前一模型局限性的同时,也带来了新的挑战。
在这篇文章中,我们从头开始重新审视软件架构,探索了一种全新的方法——这种方法围绕可绑定的组件、联邦服务节点、消息管理和动态上下文仓库展开。这个模型是将系统性思维理念应用于软件架构的结果:将应用程序视为由相互关联且各具目的性的部分组成的适应性和演进的系统。
传统的模型局限性分层架构将职责划分为不同的层次——表示层、业务逻辑层、数据访问层和持久层。虽然这种职责分离有助于清晰的概念理解,但它常常导致各层之间僵硬的耦合,使得系统随着时间的推移更难演变。依赖关系向下传递,一个层的变化往往会波及到其他层。当业务需求发生变化时,调整分层系统感觉就像是移动地壳板块一样。
微服务架构因此应运而生,将大型单体应用拆分成独立部署的小服务。每个微服务封装一个业务功能模块,并通过定义明确的接口与其他服务通信。虽然微服务提供了更大的自治性和扩展性,但也带来了操作上的复杂度。分布式追踪、部署编排、容错处理和服务发现变得至关重要。服务间的接口协议必须谨慎管理,而跨团队协作也更具挑战性。
事件驱动的架构 进一步推动了系统的解耦,促进服务在反应式系统中发送和接收事件。这种模式虽然支持可扩展性和松耦合,但往往会牺牲清晰度。追踪因果关系、管理状态一致性以及确保传递语义变得困难。系统可能会变得不透明,使得调试和变更管理更加困难。
每个模型都针对不同的架构问题,但没有一个能够完全满足必须不断适应、成长和相互互操作的需求。
组合式架构:新途径一种基于可绑定组件、联邦服务节点、消息管理和一个上下文存储的新架构方法提供了一条替代路径。_一个将模块化、清晰性、适应性和可发现性融为一体的路径。_并且它通过应用系统思维原则实现这一点:理解软件系统是活的、相互关联的整体,其行为源自各部分的互动。
可绑定的组件:模块化和独立.这种方法的核心是可绑定的组件:这些组件是自包含的应用逻辑单元,遵循单一的标准接口,可以被动态执行、版本化和组合。每个组件封装了特定的业务界限上下文,并设计为在调用之间保持无状态,将所有必要的上下文保存在外部或通过明确传递的状态。这些组件并不紧密依赖于基础设施或部署工件。相反,它们是便携、可测试的,并且可以在服务边界间重用。
各个可绑定的组件可以选择使用三种动词中的任意一种来交流。
- 发送 — 发送一个同步消息并等待响应。
- 推送 — 推送一个异步消息而不等待响应。
- 推送事件 — 推送一个其他感兴趣的可绑定组件可以订阅的事件消息到一个主题。
对于“发送”和“发布”,如果目标绑定组件实例在同一个本地服务节点中可用,消息将直接通过方法调用来传递。如果它在另一个联邦服务节点上,消息将被序列化并传递到统计上最合适的可用联邦服务节点,该节点的消息调解器会确保消息直接传递到适当组件进行直接调用。
与传统的微服务不同,可绑定的组件不需要独立的执行环境。它们被部署到一个灵活的运行时织构里,该织构决定何时何地激活它们。
联邦服务点:自适应运行时织构联邦服务节点形成了这个运行时环境。每个节点都是轻量级执行环境,能够动态加载并执行可绑定的组件。这些节点可以按需启动和关闭。它们在运行时整合组件,分配线程资源,管理本地执行的上下文,并与其他节点无缝对接通信。
这种节点联盟消除了固定服务拓扑的需求。通过将新组件加载到网络结构中,可以逐步添加新功能。现有功能可以通过更新或回退组件版本来实现。通过将组件分散到多个节点上,可以实现容错和负载均衡,无需重新配置架构。
上下文感知的消息管理: 通信组件之间的通信是通过消息调解机制来处理的——这是一种统一机制,结合了代理和编排的功能。与传统请求/响应或发布/订阅模式不同,消息调解机制增加了上下文感知的路由、验证和协调功能。
调解器根据元数据、系统状态和行为约定来决定哪些组件应接收消息。它们确保消息符合预期格式,并以保持系统一致性的方式进行路由。调解支持在一个统一的模型中进行同步调用、异步调用和事件监听。
这种灵活性使得我们不再需要复杂的服网格,可以避免集成点变得脆弱,并使通信模式更加明确和易于发现。
上下文存储库:动态系统地图将这一架构粘合在一起的是“上下文仓库”。这个仓库不仅捕获并维护系统的语义模型,包括领域、限界上下文、聚合体和实体及其关系,还作为一个事实来源和团队协作工具,帮助团队理解系统不同部分之间的关系。
不仅限于静态文档,上下文仓库主动影响系统运行时。它定义了可绑定组件所使用的接口、行为契约和数据结构。它追踪所有架构组件之间的使用和被使用关系。当发生变化时,比如更新组件或引入新概念——仓库能揭示这些变化的影响,减少冗余,并促进有意图的演进。
因为上下文仓库既可查询又可机器读取,它支持代码生成、测试和可视化工具。它将软件架构变成一个活生生的作品,而不再是墙上的一张静态图表。让它成为一个动态、不断发展的系统。
建筑的优点这种方法相比传统模型更具优势,具体表现在:
- 模块化而不强调隔离性: 可绑定的组件提供了微服务级别的模块化特性,而无需人为地或勉强地进行完整服务的分割。
- 运行时适应性: 联邦式服务节点支持动态部署、负载均衡和容错,而无需刚性的 service mesh。
- 统一通信: 消息调解机制支持多种交互方式,具有清晰的语义和路由逻辑。
- 活文档: 上下文仓库连接了设计与实现之间的鸿沟,使关系明确化,并支持自动化工具。
- 可发现性和协作: 团队可以理解并发展系统,而无需在庞大且支离破碎的知识体系中摸索或面对脆弱的接口。
或许最重要的是,这种架构能够实现有机增长。系统的发展和演进不是通过僵化的规划或过早的分解,而是通过引入新的组件、更新上下文模型以及运行时的适应来进行。架构决策嵌入到指导执行和开发的构件中。
这个模型拥抱了现实世界需求中的混乱性,同时提供了一个管理复杂性的架构。它反映了动态系统是如何成长的:通过迭代、适应和持续探索。在一个适应性同样重要的时代,正确性也不容忽视,这种架构风格提供了一条前进的方向。
我们不需要抛弃过去的一切,但我们确实需要重新思考如何构建与所服务的组织充满活力的系统。一种基于可绑定组件、联邦服务节点、消息调节以及上下文存储库的可组合架构是一条引人注目的开始方式——也是系统思维如何为软件架构和开发带来改变的明确示范。
下一章节可以在这里找到扩展可绑定范式
[MCP]: 模型上下文协议
[LLM]: 大型语言模型
[RAG]: 增强检索生成
[SSE]: 服务器发送事件(Server-Sent Events)
共同學(xué)習(xí),寫(xiě)下你的評(píng)論
評(píng)論加載中...
作者其他優(yōu)質(zhì)文章