我如何构建一个每天跟踪90万实时事件的系统
Source: Dev.to
引言
几个月前,我开始构建一个用于收集和分析实时事件数据的系统。最初只是一个小实验,却迅速发展成规模更大的项目。该系统现在大约每天处理 90 万条新记录,累计已超过 700 万条事件。
架构决策
扩展性挑战
最大的挑战不是收集数据,而是确保系统能够在不减速的情况下持续扩展。
增量度量更新
系统在新事件到达时 增量 更新度量,而不是反复查询整个数据集。即使数据集不断增长,也能保持性能稳定。
滚动时间窗口
在可能的情况下,查询被限制在 滚动时间窗口 内。这降低了数据库负载,并保持响应时间快速。
数据库选择
我选择 PostgreSQL 作为主数据库,因为它在大规模下的可靠性和性能。早期,正确的索引带来了最大的差异——在数千行时瞬间完成的查询,如果没有对正确的列建立索引,在数百万行时会明显变慢。
实时演示
系统目前在此实时运行:
https://spindex.net/
它持续实时摄取并处理新数据。
经验教训
- 扩展性问题通常源于早期的架构决策,而不是流量本身。
- 从一开始就正确设计的系统可以在没有重大问题的情况下处理数百万条记录。
- 设计不佳的系统会更早出现瓶颈。
随着数据集的持续增长,每增加一百万条记录,效率就变得更加重要。