软件交付流程
以下是从规划到生产的 11 个步骤:
- 产品负责人在 Jira 等工具中创建用户故事,启动整个流程
- 开发团队执行 Sprint 规划活动并将用户故事添加到 sprint
- 开发者在分配的故事上工作。故事完成后,他们将代码提交到 Git 并推送到 GitHub
- Jenkins构建代码并通过 JUnit、Jacoco 和 SonarQube 等测试和质量检查工具运行
- 如果构建成功,它存储在 artifactory(如 JFrog)中。Jenkins 还通过 Docker 将构建部署到开发环境
- 接下来,功能部署到 QA 环境。由于多个团队可能在相同代码库上工作,将创建多个 QA 环境
- QA 团队使用特定 QA 环境并运行多种测试类型,如 QA、回归和性能
- 一旦 QA 验证完成,功能部署到 UAT(用户验收测试)环境
- UAT 测试验证功能是否满足用户需求
- 一旦 UAT 测试成功,构建成为发布候选。它们根据特定时间表部署到生产环境
- SRE 团队使用 ELK 和 Prometheus 等工具监控生产环境并在出现问题时处理警报
事件溯源 vs. 传统 CRUD
下图显示了正常 CRUD 系统设计和事件溯源系统设计的比较。我们使用订单服务作为示例。
传统 CRUD
- 步骤 1 和 2:Bob 想购买产品。订单创建并插入数据库
- 步骤 3 和 4:Bob 想将数量从 5 改为 6。订单修改为新状态
事件溯源
- 步骤 1 和 2:Bob 想购买产品。创建 NewOrderEvent,排序并存储在事件存储中,eventID=321
- 步骤 3 和 4:Bob 想将数量从 5 改为 6。创建 ModifyOrderEvent,排序并持久化在事件存储中,eventID=322
- 步骤 5:订单视图从订单事件重建,显示订单最新状态
事件溯源范式
事件溯源范式用于设计具有确定性的系统。这改变了正常系统设计的哲学。
如何工作?
不是将订单状态记录在数据库中,事件溯源设计持久化导致状态变化的事件到事件存储。事件存储是仅追加日志。事件必须用递增数字排序以保证它们的顺序。订单状态可以从事件重建并维护在 OrderView 中。如果 OrderView 宕机,我们总是可以依赖事件存储(这是真相源)来恢复订单状态。
适用场景
- 需要完整审计日志
- 需要时间旅行查询
- 需要状态重建能力
- 复杂业务领域
本文为学习目的的个人翻译,译文仅供参考。
原文链接:EP166: What is Event Sourcing?。
版权归原作者或原刊登方所有。本文为非官方译本;如有不妥,请联系删除。