设计持久化的实时分析系统
你需要拥有最新数据的仪表板。随着业务增长,你还需要确保这些数据的准确性。事件溯源 (Event sourcing) 可以解决这个问题。
流程:
- 生产者 (Producers):服务发送领域事件 (domain events)。
- 事件总线 (Event Bus):Kafka 或 Kinesis 将事件存储在日志中。
- 处理器 (Processors):它们读取日志并更新读模型 (read models)。
- 读模型 (Read Models):Postgres 或 Redis 存储最终指标。
- 查询 API (Query API):你的仪表板从中提取数据。
设计关键规则:
- 使事件不可变 (immutable)。永远不要更新一个事件。
- 使用幂等键 (idempotency keys)。这可以防止数据重复。
- 对 Schema 进行版本管理。这可以防止系统崩溃。
- 使用确定性投影 (deterministic projections)。这能保持数据的一致性。
如何构建:
- 识别核心事件。
- 选择存储工具。
- 为指标构建初始投影。
- 实现去重 (deduplication)。
- 创建 Schema 注册表 (schema registry)。
- 监控事件延迟 (event lag)。
这种架构让你能够扩展并审计数据。你可以保留每一次变更的完整历史记录。