关于软件架构的一些疑惑

张开发
2026/4/11 6:03:12 15 分钟阅读

分享文章

关于软件架构的一些疑惑
关于软件架构的一些疑惑疑惑结合AI解惑疑惑在学习Bob大叔的《架构整洁之道》的过程中涉及软件组织的架构。但是这与平日开发中谈论的架构风格例如单体/微服务/SOA/事件驱动/云原生等谈论的内容大不一样。这其中的却别是什么呢结合AI解惑整洁架构 中的“架构”与 单体/微服务/SOA 中的“架构”虽然用了同一个词但描述的完全是两个不同维度、不同层次的东西。1.层次不同逻辑架构 vs 物理/部署架构整洁架构以及六边形架构、洋葱架构、DDD分层架构等属于 逻辑架构。它们解决的是代码内部的依赖关系、业务逻辑与技术实现的分离。核心目标是让业务逻辑不依赖于数据库、Web框架、外部API等具体技术细节从而提高代码的可测试性、可维护性并让业务逻辑能够“独立存在”。在整洁架构中我们讨论的是实体Entities、用例Use Cases、接口适配器Interface Adapters、框架与驱动Frameworks Drivers这些层如何组织依赖方向只能由外向内。单体、微服务、SOA、面向事件、云原生属于 物理/部署架构。它们解决的是系统如何拆分为独立的部署单元、服务之间如何通信、如何扩展、如何运维。单体所有功能打包成一个进程一起部署。微服务拆分为多个独立的小服务各自部署独立演进。SOA企业级的服务化架构通常依赖ESB企业服务总线。面向事件强调通过事件进行异步通信解耦生产者与消费者。云原生指充分利用云计算模型容器、编排、弹性、声明式API等来构建和运行应用。关键点这两类架构是正交的可以任意组合。完全可以用整洁架构的思想去设计一个单体应用也同样可以用整洁架构去设计每个微服务内部的代码结构。2.关注点不同内部依赖管理 vs 外部系统协作整洁架构关心的是“一个边界之内”的事情。它告诉在一个特定的业务边界如一个微服务、一个模块内部应该如何组织代码才能让核心业务逻辑不被技术细节污染。它的核心原则是依赖倒置——高层模块业务规则不依赖低层模块数据库、网络而是大家都依赖抽象。微服务/SOA关心的是“边界之间”的事情。它告诉一个大型系统应该拆分成多少个独立的、可以各自部署的单元这些单元之间通过什么协议HTTP、gRPC、消息通信如何保证数据最终一致性如何做服务发现、熔断、限流等。一个常见的误区有人觉得“用了微服务代码自然就是整洁的”。实际上如果每个微服务内部都是“大泥球”没有分层、业务逻辑和SQL混在一起那么微服务只会让拥有多个难以维护的“分布式大泥球”。3.为什么它们经常被一起提及因为“整洁架构”提供的依赖倒置能力是实现“架构的灵活性与可替换性”的关键。而微服务、事件驱动、云原生这些架构风格往往都强调“技术选型的灵活性”。举例说明如果用整洁架构设计了一个微服务的内部代码那么这个服务的数据库从MySQL换成PostgreSQL只需要修改最外层的“接口适配器”和“框架层”核心用例层完全不动。这个服务原本通过HTTP暴露API后来需要改成通过消息队列Kafka消费事件同样只需要在最外层替换适配器业务逻辑层不受影响。所以整洁架构通常被视为“在单体或微服务内部实现高质量代码结构”的一种方法论。总体理解建议把概念分层可以用下面这张“分层地图”来统一理解这些术语层次关注点典型术语部署架构层系统由几个部署单元组成它们如何通信如何运维单体、微服务、SOA、无服务器Serverless交互风格层服务之间是同步调用还是异步事件数据如何流动面向事件、请求-响应、消息驱动运行环境层是否利用云基础设施是否容器化云原生、容器、K8s、DevOps代码逻辑层单个部署单元内部如何组织代码、分离关注点整洁架构、六边形架构、DDD、分层架构会发现整洁架构处于最内层代码逻辑层它与其他层的术语并不冲突而是互补的。一个系统可以同时是云原生运行环境微服务部署架构面向事件交互风格并且每个微服务内部都采用整洁架构代码逻辑总结感觉“整洁架构里的‘架构’与单体、微服务等术语总体理解上不同”这种感觉是完全正确的。因为它们确实不是同一类概念整洁架构是一套代码组织与依赖管理的范式旨在保护业务逻辑不受技术细节侵蚀。整洁架构基于领域驱动设计通过核心原则单一职责和依赖倒置将业务和技术分离。单体、微服务等是系统部署与拆分的范式旨在解决团队协作、独立部署、弹性伸缩等问题。它们是不同维度的架构决策可以共存也可以交叉组合。 理解这一点后再去看整洁架构的图示同心圆时可以把它想象成一个“放大镜”——它放大的是单个服务或模块内部的微观结构而不是描述整个系统的宏观拓扑。愿我都能在各自的领域里不断成长勇敢追求梦想同时也保持对世界的好奇与善意!

更多文章