跳至主要內容
CQRS与Event_Sourcing:事件驱动架构的实践指南

前言

传统应用中,读写操作使用同一个数据模型

User Table:
├─ id
├─ name
├─ email
├─ created_at
├─ updated_at
└─ ...

所有写操作:UPDATE user SET ...
所有读操作:SELECT * FROM user WHERE ...

郑天祺大约 7 分钟架构设计CQRSEvent_Sourcing事件驱动架构
中台架构:业务、数据、技术中台的实践与反思

前言

互联网大厂经常提起"中台战略":

  • 阿里:打造"大中台、小前台"架构
  • 字节:建设业务中台赋能多条产品线
  • 腾讯:建立数据中台支撑决策

但什么是中台?为什么要建设中台?中台容易踩的坑有哪些?

本文从实践出发,深入讲解三类中台的架构设计与常见陷阱。


一、中台的本质

1.1 问题:前台业务爆炸式增长

初期(单一产品):
┌─────────────┐
│  前台应用1  │
│ (购物App)   │
└─────────────┘
       │
    ┌──▼───┐
    │ 后台  │
    │(单体) │
    └──────┘

后期(多条产品线):
┌──────────┐┌──────────┐┌──────────┐┌──────────┐
│App 1 购物 ││App 2 直播││App 3 外卖││App 4 旅游│
│(iOS/And) ││(iOS/Web) ││(iOS/And) ││(iOS/Web) │
└────┬─────┘└────┬─────┘└────┬─────┘└────┬─────┘
     │           │           │           │
     └───────────┼───────────┼───────────┘
                 │           │
          ┌──────▼───────────▼─────┐
          │  后台(变成巨人)      │
          │  ├─ 用户系统          │
          │  ├─ 订单系统          │
          │  ├─ 支付系统          │
          │  ├─ 库存系统          │
          │  ├─ 推荐系统          │
          │  ├─ ...(50+个模块)  │
          │  └─ 复杂度爆炸!      │
          └──────────────────────┘

问题:
  ├─ 每个App都要对接50+个后端模块
  ├─ 修改一个模块要测试所有App(回归成本高)
  ├─ 新App开发周期长(集成工作量大)
  ├─ 技术债快速积累
  └─ 人员膨胀但效率下降

郑天祺大约 7 分钟架构设计中台架构技术中台
六边形架构与整洁架构:从理论到实战落地

前言

大多数互联网应用,代码演进轨迹是这样的:

第一年:代码清晰
第二年:开始混乱(业务逻辑和框架代码纠缠)
第三年:完全烂尾(改个功能需要改10个文件,改错概率50%)

郑天祺大约 8 分钟架构设计六边形架构整洁架构
DDD 入门指南:从贫血模型到领域驱动

前言

在传统 Spring Boot 项目开发中,我们习以为常的"Controller-Service-DAO"三层架构,往往会让代码逐渐演变成所谓的"贫血模型"。数据对象只有 getter/setter,业务逻辑散落在各个 Service 类中,随着系统复杂度增加,代码变得越来越难以维护。

领域驱动设计(Domain-Driven Design,简称 DDD)由 Eric Evans 在 2003 年提出,提供了一套应对复杂业务系统的建模方法论。本文将带你从实际项目出发,深入理解 DDD 的核心概念,并通过实战案例将 DDD 落地到你的项目中。


郑天祺大约 26 分钟架构设计DDD领域驱动设计架构Spring Boot
事件驱动架构:从理念到落地

前言

如果你写过 Spring Boot 项目,你大概率用过 @EventListener 或消息队列。但"用消息队列"和"事件驱动架构"是两回事。事件驱动架构(Event-Driven Architecture, EDA)是一种架构风格,不只是技术选型。

本文带你从"为什么需要事件驱动"开始,理解三种事件模式、Command vs Event 的本质区别,再到实战落地。


第一部分:什么是事件驱动架构

1.1 一个简单的对比

传统请求-响应模式(你每天都在写的):


郑天祺大约 14 分钟架构设计事件驱动EDAKafkaRocketMQ架构模式
微服务拆分实操:用什么原则划边界

前言

"微服务"这三个字在技术圈已经热了十多年,但"怎么拆"始终是最困扰架构师的问题。拆得太粗——换了个壳的单体;拆得太细——运维成本爆炸,调试像噩梦。

本文不讲微服务的基础概念(假设你已经知道什么是微服务),聚焦于一个核心问题:面对一个单体系统,你该用什么原则来划边界?


第一部分:单体架构的痛点与拆分的时机

1.1 单体不是原罪

在谈拆分之前,必须明确一个观点:单体架构不是原罪。很多成功的系统——包括 GitHub 早期、Stack Overflow——都是单体架构。单体的问题不在于"它是单体",而在于"它何时变得不可维护"。


郑天祺大约 18 分钟架构设计微服务架构服务拆分DDD分布式
系统设计实战:担保业务核心系统架构设计

前言

担保业务系统是典型的金融核心系统,对数据一致性、高可用、风控合规有极高要求。本文将分享一套经过实践验证的担保核心系统架构方案,从业务流程到技术选型,帮助你理解"金融级"系统是如何设计的。


第一部分:担保业务核心流程

1.1 业务流程全景

担保业务全生命周期:

申请阶段          审批阶段          签约阶段          保后管理
  │                │                │                │
  ▼                ▼                ▼                ▼
┌──────┐  ┌────────────┐  ┌────────────┐  ┌─────────────┐
│客户  │  │风控审核     │  │电子签约     │  │还款跟踪      │
│提交  │→│·反欺诈检查  │→│·合同生成   │→│·还款提醒    │
│担保  │  │·信用评估    │  │·客户签署   │  │·逾期监控    │
│申请  │  │·额度审核    │  │·担保生效   │  │·代偿处置    │
└──────┘  │·人工复核    │  └────────────┘  │·追偿管理    │
          └────────────┘                   └─────────────┘

放款环节:
┌──────┐    ┌──────────┐    ┌─────────┐
│银行  │←──→│ 担保公司  │──→│ 客户    │
│放款  │    │ 收取保费  │    │ 获得贷款│
└──────┘    └──────────┘    └─────────┘

郑天祺大约 13 分钟架构设计架构设计担保业务微服务高可用分布式事务
API 设计规范:一个后端应该知道的 RESTful 最佳实践

API 设计规范:一个后端应该知道的 RESTful 最佳实践

前言

作为一个后端开发者,你写的 API 可能被前端、移动端、第三方系统调用。一个好的 API 设计不只是"能跑就行",它决定了团队协作效率、系统可维护性和调用方的开发体验。

我在职业生涯中见过太多"反模式"的 API 设计:URL 里全是动词、状态码永远 200、返回格式千奇百怪、命名毫无规范……这篇文章将系统性地梳理 RESTful API 设计的核心规范,让你写的每一个接口都经得起审视。


一、REST 核心原则

1.1 什么是 REST


郑天祺大约 13 分钟架构设计APIRESTful