## 视频
<video src="https://dev-media.amazoncloud.cn/30-LibaiGenerate/31-LiBaiRebrandingVideo/NFX307-Safely_migrate_databases_that_serve_millions_of_requests_per_second-LBrebrandingWCaptionCN.mp4" class="bytemdVideo" controls="controls"></video>
## 导读
Netflix 的数据平台每秒以毫秒级的延迟从其托管在亚马逊云科技上的在线数据存储(如 Apache Cassandra 和 EVCache(基于 Memcached))提供数千万次请求。在本论坛中,您将了解如何利用云的影子流量和独特功能安全地迁移 PB 级数据和每秒数以百万计的请求,而不会有任何数据丢失或用户可见的性能下降风险。通过确保所有操作都是等效的、使用云来启动影子硬件以及在处理等效回填时复制流量,企业可以帮助确保安全升级。
## 演讲精华
<font color = "grey">以下是小编为您整理的本次演讲的精华,共1500字,阅读时间大约是8分钟。如果您想进一步了解演讲内容或者观看演讲全文,请观看演讲完整视频或者下面的演讲原文。</font>
Joey和Ayushi在台上讨论了如何在Netflix安全迁移大量请求的数据库技术。他们解释道,Netflix拥有全球最大的数据库,分布于4个亚马逊地区(每个地区有3个可用区)的全球基础设施中。他们的系统能高效处理海量的流量和数据,例如,单位数毫秒延迟通常小于10ms。因此,在进行数据库迁移时必须确保安全措施,防止数据丢失或损坏。
在Netflix,尽管数据库迁移有时是由于需求变化、数据存储新功能或成本优化等原因而不可避免,但应尽量推迟。例如,对于常规软件或内核升级,迁移通常是多余的。然而,当他们需要迁移数据库时,必须自动化这个过程并采取安全措施,以防止数据丢失或损坏。在Netflix,他们可以遵循由数据平台团队制定的标准化程序,在基础设施上并行执行迁移。
为了实现这一目标,Netflix首先抽象了底层存储API,使应用程序与特定数据存储解耦。他们利用一个名为“数据网关”的服务来定义通用CRUD API用于数据访问。这个网关负责将操作转换为当前正在使用的数据库的本地API。通过插入这个中间抽象层,Netflix可以在不换出数据存储的情况下切换数据存储。例如,网关可以无缝地将应用程序发出的放/取操作转换成适用于后端Cassandra或DynamoDB的正确API调用。
此外,网关API还包括写操作的项目有效性令牌,使得可以安全地重放重复请求。这些令牌允许Netflix在避免潜在冲突(如Cassandra中的最后写入获胜)的情况下重放写入。对于读取API,Netflix设计它们支持可恢复的分页,通过返回固定大小的2兆字节结果页面和令牌,而不是无界的结果集。这种方法在迁移过程中在阴影流量期间便于比较旧和新数据存储。
在接下来的迁移过程中,旧数据存储仍然作为主用系统处理所有请求,同时新的数据存储接受流量的影子复制。网关将传入的请求复制并并行分派给新旧数据存储的实施,但只使用来自旧系统的响应。这种流量影子复制方式可以在将生产负载切换到新系统之前发现新系统的任何潜在性能或正确性问题。
当流量完成影子复制后,Netflix启动一个回填操作,从旧存储向新存储复制数据,同时使用项效力令牌合并正在进行的写入。这个回填过程利用跨区域复制的[Amazon S3](https://aws.amazon.com/cn/s3/?trk=cndc-detail)快照来提高弹性。数据平台团队使用部署在[Amazon EMR](https://aws.amazon.com/cn/emr/?trk=cndc-detail)集群上的Apache Spark作业高效地并行复制数TB的数据来恢复这些备份。EMR作业比较新旧系统之间的数据以识别任何差异,然后在切换之前进行切掉。
在整个过程中,Netflix会进行全面监控和验证,以确保将读取和写入切换到新数据存储之前的影子流量的准确性和性能与主要流量相匹配。Netflix自动验证性能指标并在检测到降级时进行故障切换。旧系统作为快速回滚选项保持可用,以防在切换后出现任何问题。只有在充分验证了正确行为之后,Netflix才会废弃旧数据存储。
对于大规模迁移活动,Netflix通常会“铺路”,建立应用程序团队可以采用的努力最小的标准基于网关的迁移流程。但是,由于不支持通用网关的独特接口或访问模式,一些系统需要更自定义的基于库的迁移。虽然可行,但基于库的方法缺乏内置仪器和故障隔离。因此,引入的任何错误都有直接影响生产流量的风险。由于这个风险,Netflix在可能的情况下强烈更喜欢网关方法。
Joey最近分享了一个关于Netflix的例子。他们把Netflix的Cassandra基础设施从版本3成功迁移到了4.1。由于Cassandra 3将停止支持,而新的4.1版本提供了许多改进,如更好地满足Netflix高吞吐量使用案例的扩展需求,因此这次升级是必要的。然而,在开始模拟流量时,团队发现Cassandra 4.1的写入延迟比版本3高出两倍,读取延迟也高出两倍多,这导致canary分析测试失败。经过深入调试,发现Cassandra 4.1节点配置错误,例如使用了CMS垃圾回收器而非低延迟的G1收集器。切换到[Amazon Corretto](https://aws.amazon.com/cn/corretto/?trk=cndc-detail) JDK也提高了性能。在纠正这些配置问题后,4.1版本的性能达到了与3版本相当的水平,使得新版本得以顺利推广。
另一个主要迁移项目是将从Thrift协议升级到更新的CQL协议。Thrift在2016年被标记为过时,所以现在是时候进行升级了。过去的尝试揭示了在从Cassandra 2迁移到3的过程中可能会出现数据损坏问题,这将增加项目风险并延误其进度。最终在2023年,他们决定处理这个涉及超过200个数据库的大规模迁移。
团队定义了门户和库迁移路径,以提供灵活性。通过门户路线,应用程序团队可以在数据迁移完成之前独立快速完成API迁移,避免停机时间。一旦API切换完毕,数据平台工程团队就可以按照自己的速度迁移底层数据。由于独特的接口或访问模式不受通用门户支持,需要自定义库支持。
在迁移过程中模拟所有流量,Netflix发现了几个可能导致问题的原因。例如,与CQL提供的并行读取相比,Thrift的多键读取性能慢了8倍。另一个发现是效率低下的分页逻辑,它会完整地检索大型100兆字节的行,而不是以2兆字节的小块进行检索。
由于抽象网关层的存在,数据平台团队能够在不改变Cassandra本身的情况下解决这些性能问题。此外,由于数据存储的不一致排序问题,扫描也带来了挑战。解决方案包括一致性规范令牌,并在切换期间强制网关固定扫描到一个实现或另一个实现。
总的来说,Netflix成功地将支持300多个内部应用程序和数千TB数据的250多个关键数据库进行了迁移。这仅仅是通过严格遵循数据平台团队创立的标准化迁移流程实现的。
Ayushi分享了一些例子,如将DynamoDB升级到具有较低延迟的Cassandra缓存层,以及用Netflix构建的新键值服务替换Dynamite Redis实现。从DynamoDB到Cassandra的迁移展示了需求如何随时间而变化。应用程序开始时需要一个最适合其需求的键值存储。然而,随着使用量的增长和访问模式的改变,Cassandra成为了最佳选择。
通过这些大规模迁移过程中的仔细阴影化、金丝雀测试和性能评估,避免了任何重大问题或故障。即使有数千TB的数据和数百个集群,Netflix在这方面的专业知识使他们能够在会员提供不间断的优秀流媒体体验的同时,创新并优化其基础设施。
最后,Joey和Ayushi分享了Netflix从广泛迁移经验中吸取的关键教训:
- 自动化简化了最复杂的迁移过程
- 新系统的正确性和性能退化需要进行严格的测试
- 尽可能将API迁移与数据迁移解耦
- 优先进行同质迁移,以便更容易地进行数据映射
- 使用网关抽象存储,以便更轻松地切换实现
- 通过阴影流量揭示问题,而不影响客户
- 使用物品有效性令牌确保新系统上的安全写重播
- 使用分页API允许在数据存储之间进行可读比较
- 在网关中解决数据存储问题,而不是在存储本身进行更改
- 标准化迁移路径,同时仍支持自定义一次性的需求
总的来说,通过对细节进行精心提炼、追踪和核实,即使面对的是每秒需要处理数百万请求的关键任务型数据库,也能够实现安全、稳定且高效的迁移过程。在这方面,Netflix凭借其专业知识在优化基础设施的同时,为全球各地的客户提供了持续不断的优质流媒体服务。
**下面是一些演讲现场的精彩瞬间:**
Joey和Ayushi展示了一种在高流量场景下安全迁移数据库的方法。
![](https://d1trpeugzwbig5.cloudfront.net/NFX307-Safely_migrate_databases_that_serve_millions_of_requests_per_second/images/rebranded/NFX307-Safely_migrate_databases_that_serve_millions_of_requests_per_second_0.png)
领导者们强调了随着应用程序的增长,托管服务与自管理服务之间的成本对比是如何不断变化的。
![](https://d1trpeugzwbig5.cloudfront.net/NFX307-Safely_migrate_databases_that_serve_millions_of_requests_per_second/images/rebranded/NFX307-Safely_migrate_databases_that_serve_millions_of_requests_per_second_1.png)
为了实现这一目标,网飞通过数据网关在不迁移数据的情况下顺利过渡到API迁移,使应用程序团队能够在数据团队独立处理数据迁移的过程中迅速采取行动。
![](https://d1trpeugzwbig5.cloudfront.net/NFX307-Safely_migrate_databases_that_serve_millions_of_requests_per_second/images/rebranded/NFX307-Safely_migrate_databases_that_serve_millions_of_requests_per_second_2.png)
根据网飞的经验,从Thrift到CQL的架构转变过程中,使用Thrift随机分区器和CQL的murmur3分区器之间的差异导致扫描操作出现了问题。
![](https://d1trpeugzwbig5.cloudfront.net/NFX307-Safely_migrate_databases_that_serve_millions_of_requests_per_second/images/rebranded/NFX307-Safely_migrate_databases_that_serve_millions_of_requests_per_second_3.png)
亚马逊云科技的数据平台团队在解决性能和正确性问题的过程中,首先对令牌进行规范化,然后引导客户端针对特定实现继续进行扫描。
![](https://d1trpeugzwbig5.cloudfront.net/NFX307-Safely_migrate_databases_that_serve_millions_of_requests_per_second/images/rebranded/NFX307-Safely_migrate_databases_that_serve_millions_of_requests_per_second_4.png)
网飞从Dynamite迁移到Cassandra,以提高性能并保持用户的低延迟。
![](https://d1trpeugzwbig5.cloudfront.net/NFX307-Safely_migrate_databases_that_serve_millions_of_requests_per_second/images/rebranded/NFX307-Safely_migrate_databases_that_serve_millions_of_requests_per_second_5.png)
我们应该优先考虑同质迁移而非异质迁移,以避免复杂的数据映射和不兼容性问题。
![](https://d1trpeugzwbig5.cloudfront.net/NFX307-Safely_migrate_databases_that_serve_millions_of_requests_per_second/images/rebranded/NFX307-Safely_migrate_databases_that_serve_millions_of_requests_per_second_6.png)
## 总结
奈飞公司正面临着一个挑战:如何将服务于每秒数百万请求的数据库在不影响服务的情况下进行迁移。Joey和Ayushi讨论了在进行状态迁移时采用的安全技术。首先,他们强调了从应用程序中剥离底层存储API的重要性,以便在不同的数据存储实现之间轻松切换,而不需要修改代码。他们还使用了允许合并重复权限的令牌来自动化读取过程,从而提高了效率。
在实际迁移过程中,他们将流量引导到新的数据存储区域,并通过强大的项目方式来复制数据,以确保数据的完整性。通过广泛的监控来验证正确性和性能,然后逐渐将负载转移到新系统。如果出现问题,他们还有回滚计划,可以快速恢复到之前的状态。案例研究表明,通过像Cassandra 3中的慢速多分区读取这样的阴影操作,可以在团队注意到之前发现并修复网络中的错误。
总的来说,通过适当的自动化、测试以及将API与数据更改解耦,可以简化复杂的迁移过程。逐步验证是确保在停用旧系统之前获得零停机时间和信心的关键。奈飞公司已经应用了这些技术来在后台顺利迁移数百个数据库。
## 演讲原文
## 想了解更多精彩完整内容吗?立即访问re:Invent 官网中文网站!
[2023亚马逊云科技re:Invent全球大会 - 官方网站](https://webinar.amazoncloud.cn/reInvent2023/?s=8739&smid=19458 "2023亚马逊云科技re:Invent全球大会 - 官方网站")
[点击此处](https://aws.amazon.com/cn/new/?trk=6dd7cc20-6afa-4abf-9359-2d6976ff9600&trk=cndc-detail "点击此处"),一键获取亚马逊云科技全球最新产品/服务资讯!
[点击此处](https://www.amazonaws.cn/new/?trk=2ab098aa-0793-48b1-85e6-a9d261bd8cd4&trk=cndc-detail "点击此处"),一键获取亚马逊云科技中国区最新产品/服务资讯!
## 即刻注册亚马逊云科技账户,开启云端之旅!
[【免费】亚马逊云科技“100 余种核心云服务产品免费试用”](https://aws.amazon.com/cn/campaigns/freecenter/?trk=f079813d-3a13-4a50-b67b-e31d930f36a4&sc_channel=el&trk=cndc-detail "【免费】亚马逊云科技“100 余种核心云服务产品免费试用“")
[【免费】亚马逊云科技中国区“40 余种核心云服务产品免费试用”](https://www.amazonaws.cn/campaign/CloudService/?trk=2cdb6245-f491-42bc-b931-c1693fe92be1&sc_channel=el&trk=cndc-detail "【免费】亚马逊云科技中国区“40 余种核心云服务产品免费试用“")