设计持久化的实时分析系统

你需要拥有最新数据的仪表板。随着业务增长,你还需要确保这些数据的准确性。事件溯源 (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)。

这种架构让你能够扩展并审计数据。你可以保留每一次变更的完整历史记录。

Source: https://dev.to/therizwansaleem/designing-a-durable-event-sourced-analytics-platform-for-real-time-dashboards-58fd