>_ DevTrendszh

语言

首页

语言

板块

前端 后端 移动端 DevOps AI / ML 游戏开发 区块链 嵌入式 安全
Unknown

开发者和技术负责人的架构模式地图

Awesome Software Architecture Banner

当你加入一个微服务项目时,你会很快注意到一个典型细节。每个开发者对整洁架构的理解都不尽相同。有人试图在只有三页的 CRUD 中硬塞 CQRS,有人构建了一个有着十几层包装器的庞大领域模型,还有人通过事件溯源来解决耦合问题。对于一个团队来说,要说同一种语言,你需要统一的知识库。

我们每个人都会收藏几十篇文章和视频链接。问题是这些资料很快就会丢失。仓库 awesome-software-architecture 的作者 Mehdi Hadeli 解决了这个问题:他将系统设计资料整理成一个结构化的合集,放在了同一个地方。

这个仓库是什么

这是一个开放的知识库,包含文章、教程、书籍和代码示例的链接。该项目在 GitHub 上获得了超过 11,000 颗星。与标准的 Awesome 风格目录不同,它不仅整理通用主题,还涵盖了具体的模式和架构决策。

开发者们还搭建了一个独立的网站 awesome-architecture.com,在那里阅读资料比 Markdown 文件更方便。

合集的主要部分

架构风格与方法

仓库详细分解了组织代码的方式:

  • 单体架构与微服务。从经典的单体架构到模块化单体概念,后者有助于为最终拆分做准备。
  • 分层架构。Clean Architecture、Onion 和 Hexagonal 之间的区别详解。
  • 垂直切片架构。这种方法围绕业务功能而非技术层来组织代码。
  • Actor 模型。使用 Akka.NET、Orleans 和 ProtoActor 框架的 Actor 操作原理及示例。

领域驱动设计与 CQRS

DDD 部分是其中最详细的。作者将 Eric Evans 的概念分解成各个组成部分。目录包含战略设计(Bounded Context、Ubiquitous Language)和战术模式(Aggregates、Value Objects、Domain Services)的资料。贫血领域模型等反模式也有单独讲解。

CQRS 主题有专门的部分,涵盖读写模型分离、数据一致性及其与事件溯源的关联。

分布式系统与云

设计云服务时,Cloud Design Patterns 部分会派上用场:

  • 弹性模式:断路器(Circuit Breaker)、隔板(Bulkhead)、重试(Retry)。
  • 消息传递:Outbox、Inbox、Saga、变更数据捕获(Change Data Capture)。
  • 网络组件:API Gateway(Ambassador、Kong、Ocelot)、Service Mesh(Istio、Linkerd)以及负载均衡解决方案。

合集还包含基础设施工具的资料:Kubernetes、Terraform、NOMAD、Kafka、RabbitMQ 和 NATS。

可观测性与可靠性

有一个专门的部分讲可观测性。包含通过 Correlation ID 进行端到端追踪的文章,通过 ELK、EFK、Fluent Bit 和 Grafana Loki 技术栈进行日志收集的文章。此外还涵盖背压和构建容错系统。

合集的特点与细节

你会在 README 中遇到标记为 TODO 的表格。别惊慌:这些主题的文章已经在 docs 文件夹中了。导航组织得很好,资料分布在各个目录中,通过搜索可以轻松找到你需要的主题。

这个仓库的弱点是在框架特定部分明显偏向 .NET 技术栈。Steeltoe、MassTransit 或 CAP 等库经常被提及。不过基本概念在各处都是相同的。它们同样适用于 Go、Java、Python 或 TypeScript 项目。

如何在实践中使用这个目录

  1. 准备系统设计面试。合集涵盖了架构部分的大部分常见问题。
  2. 系统设计参考。有助于回顾 Actor 与经典服务的区别,或选择正确的消息传递模式。
  3. 入职和团队培训。仓库中的链接可以作为让开发者沉浸到项目架构中的阅读清单。

对于从编写函数转向设计系统的开发者来说,仓库 awesome-software-architecture 会非常有用。收藏这个项目,让关于模式的正确文章随时触手可及。

相关项目