Zendesk 通过迁移存储架构大幅降低数据存储成本
Zendesk 通过从 DynamoDB 迁移到基于 MySQL 和 S3 的分层存储解决方案,成功将数据存储成本降低了 80% 以上。这一迁移帮助公司在查询能力和扩展性之间取得了平衡,同时显著降低了运营成本。
初始架构与挑战
Zendesk 最初使用 DynamoDB 存储事件流数据,但随着客户基数的增长以及对全局二级索引(GSI)的需求增加,运营成本逐渐变得不可持续。尽管团队通过切换到预付费模式将成本降低了 50%,但整体架构的成本仍然过高。
新架构的设计与实现
在 AWS 平台上运行的 Zendesk 团队评估了多种存储解决方案,包括 S3、Hudi、ElasticSearch 和 MySQL。最终,团队决定结合使用 MySQL 和 S3:
- MySQL 用于缓冲来自 Apache Kafka 的日志数据,并存储元数据。
- S3 用于以每文件 10,000 条日志的批量存储原始数据。
数据摄取流程包括:
- 将来自 Kafka 的日志数据存储到 MySQL 的缓冲表中。
- 每小时通过后台任务将缓冲表中的新记录上传到 S3,并为每个 S3 文件插入一条元数据记录。
- 另一项每小时任务会删除缓冲表中超过四小时的旧日志。
查询处理与优化
在新的架构中,查询首先需要在 MySQL 元数据表中查找,然后对返回的文件执行一组并行的 S3-Select 查询。由于数据布局针对按时间顺序检索进行了优化,团队在执行更复杂的查询时遇到了性能问题。
为了解决这些问题,团队引入了布隆过滤器(Bloom Filters)和 Count-Min Sketch 数据结构,以支持多字段过滤查询。改进后的解决方案需要一个额外的表来存储用于确定要查询的 S3 文件的序列化数据结构。
成本与性能
迁移后,Zendesk 的存储成本降低到预付费 DynamoDB 成本的 20% 以下,其中 MySQL(AuroraDB)占总成本的 90% 以上,S3 和 S3-Select 合计不到 10%。新解决方案的查询延迟在 200-500 毫秒之间,偶尔会出现几秒的峰值,团队正在进一步优化性能。
总结
通过从 DynamoDB 迁移到 MySQL 和 S3 的分层存储架构,Zendesk 不仅显著降低了数据存储成本,还提升了系统的可扩展性和查询能力。尽管在复杂查询处理上仍存在挑战,但通过引入布隆过滤器和 Count-Min Sketch 数据结构,团队成功优化了查询性能。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。