Rethinking latency-sensitive DynamoDB apps for multicloud, multiregion deployment 发布广告的整个过程在200至300毫秒内进行,我们的数据库搜索必须在一位数毫秒内完成,每天有数十亿的交易,数据库必须快速、可扩展和可靠。 – 托德·科尔曼,Yieldmo的技术联合创始人和首席建筑师 发布广告的整个过程在200至300毫秒内进行,我们的数据库搜索必须在一位数毫秒内完成,每天有数十亿的交易,数据库必须快速、可扩展和可靠。 – 托德·科尔曼,Yieldmo的技术联合创始人和首席建筑师 Yieldmo的在线广告业务依赖于处理每天数十亿次的广告请求,其延迟响应为下秒。公司的服务最初依赖于DynamoDB,该团队重视其简单性和稳定性,但DynamoDB成本在规模上变得不可持续,团队需要多云灵活性,因为Yieldmo扩展到新的地区。 在最近的谈话中,在 ,Yieldmo的技术联合创始人兼首席架构师Todd Coleman分享了公司面临的技术挑战,以及为什么团队最终通过ScyllaDB的DynamoDB兼容API向前迈进。 怪物规模峰会 您可以观看他的完整演讲,或者继续阅读。 https://youtu.be/sk0mIiaOwM8?embedable=true 浪费 = 失去业务 Yieldmo是一个在线广告平台,通过页面加载实时连接出版商和广告商,几乎每个广告请求都会触发一个数据库查询,检索机器学习见解和设备身份信息。 进行有效的拍卖 帮助合作伙伴决定是否报价 跟踪他们已经在设备上显示的哪些广告,以便广告商可以管理频率限制并优化广告交付 整个广告管道只需 200 到 300 毫秒即可完成,其中大部分时间由合作伙伴用于评估和投标。 当用户访问网站时,会向Yieldmo发送广告请求。 Yieldmo的平台分析了请求。 它要求其合作伙伴的潜在广告。 它进行了一场拍卖,以确定获胜的报价。 数据库搜索必须在任何对合作伙伴的呼叫之前进行,并且这些搜索必须以单位毫秒延迟完成,科尔曼解释说:“每天有数十亿的交易,数据库必须快速、可扩展和可靠。 DynamoDB 生长疼痛 Yieldmo的生产基础设施运行在AWS上,因此DynamoDB是团队构建他们的应用程序时的逻辑选择。 首先,DynamoDB随着业务的扩张而变得越来越贵,其次,该公司希望在AWS以外的云提供商上运行广告服务器的选项。 Coleman 分享道:“在某些地区,例如,美国东海岸、AWS 和 GCP [Google Cloud Platform] 数据中心足够接近,以至于延迟是最低的。在那里,从运行在 GCP 的广告服务器上击中我们的 DynamoDB 数据库是没有问题的。 DynamoDB 替代品 Yieldmo的团队开始探索适合他们极其易读的数据库工作负载的DynamoDB替代方案,他们的写作操作分为两类: 来自合作伙伴的连续实时数据流,对于匹配Yieldmo的数据与他们的数据至关重要 基于从其历史数据中获得的机器学习见解驱动的批量更新 鉴于这种高频读取和结构写作的平衡,他们正在寻找一个能够处理大规模、低延迟访问的数据库,同时有效地管理并发更新,而不会降低性能。 该团队首先考虑留在DynamoDB并添加缓存层,但他们发现缓存无法解决地理延迟问题,缓存错误会更慢。 他们还探索了Aerospike,该公司提供速度和跨云支持,但他们了解到Aerospike的内存索引将需要一个巨大的和昂贵的集群来处理Yieldmo的大量小数据对象。 然后他们发现了ScyllaDB,它还提供了速度和跨云支持,但具有兼容DynamoDB的API(Alternator)和更低的成本。 Coleman 分享道:“ScyllaDB 支持跨云部署,需要可管理的服务器数量,并提供具有竞争力的成本,最重要的是,其 API 兼容 DynamoDB,这意味着我们可以通过最少的代码更改迁移。 ScyllaDB 评估、迁移和结果 为了开始评估 ScyllaDB 如何在其环境中工作,该团队将一组广告服务器迁移到一个区域,这涉及迁移多个 Terabyte,同时保持实时更新。 通过程序,他们将 ScyllaDB 的 Spark 基于的迁移工具复制历史数据,暂停 ML 批量工作,并利用他们的 Kafka 架构将最近的写作重现到 ScyllaDB。 接下来的步骤是将所有数据迁移到五个 AWS 区域,这一阶段持续了大约两周,经过性能评估,Yieldmo 将 ScyllaDB 提升为主要状态,最终在大多数地区停止向 DynamoDB 写作。 回顾到迁移近一年后,科尔曼总结道:“最大的好处是多云的灵活性,但即使没有它,迁移也是有价值的。与DynamoDB相比,数据库成本大约降低了一半,即使有预留容量定价,我们也看到了温和的延迟提高。 如何将ScyllaDB与DynamoDB比较