我们自主站到MongoDB Atlas旅程

本文介绍了我们自主主机托管多个关键数据库的迁移。我们开始在EC2实例上自主托管MongoDB,并转变为MongoDB Atlas。

问题

自主主机数据库群集需要团队在管理时花时间。这意味着花在操作系统和数据库更新上的时间。它还意味着时间考虑监控操作系统和数据库。例如,可用的磁盘空间,磁盘队列长度等。

这需要时间为用户开发新的和创新功能。

管理解决方案来自团队的管理时间。数据库更新调度可用。此外,监视数据库行为也可用。这为我们提供了清晰的见解,我们以前没有。

2019年是一年的大量基础设施和业务变化。特别是,我们更新了用于消费者帐户和偏好微服务的部署管道。目标是通过切换到蓝色/绿色部署来减少服务中断。接下来是减轻我们大型和复杂的自托管数据库的中断。要减少管理时间,我们需要迁移到托管服务。

让我们花点时间量化问题。数据库版本和控件并未跟上我们不断增加的标准。当事件发生了我们团队的各种成员时,平均每周花费(在单身人员小时内)用于解决,根本原因分析,讨论和(我们可以在哪里)根本导致缓解。

解决方案

12月初我们开始评估了两个解决方案,专注于SLA,安全性和成本。 MongoDB Atlas是我们的第二选择,但我们的Pro / Con分析倾向于它。在我们的分析过程中,我们遇到了八个不同的团队超过了六次。团队包括云提供商,Newstech,Infosec,云服务和架构。圣诞节前几天,我们觉得我们在正确的课程中,并具有坚实的长期计划。

通过这个过程,我们做了一些重要的发现。安全性更容易控制。基础设施相关的服务中断将结束。减少对数据库管理员的依赖。开发人员更简单地与数据库一起使用。数据库健康和性能的可见性。

支持

获得这一权利很重要,我们购买了几个星期的专业支持,这些支撑在八小时的街区。我们还选择了Atlas Pro支持计划。前者给我们时间与专家;后者处理事件管理。专家具有深刻的知识,并提供有关数据库及其工具的指导。

Pro提示:在专业支持会上提前准备您的技术问题。

Pro提示:清除您的日历,以最大限度地使用专业支持。

概念证明

我们开始了旨在验证以下内容的概念证明。

  • 应用程序和数据库之间的稳定连接
  • 可比或更好的性能
  • 轻松管理群集和备份
  • 改进了管理和数据库访问的安全性

证据将针对具有良好端到端测试覆盖和中型数据库的服务。重要的是不要选择一个没有太简单或太硬的服务数据库设置的服务。我们在地图集中创建了两个群集,一个用于QA,另一个用于生产环境。 AWS中有一些设置需要连接到Atlas。我们的端到端测试得到了改进,并分为QA的完整读/写套件和用于生产的只读套件。我们还创建并运行脚本以将来自生产中的数据复制和匿名地复制到QA环境。我们的QA环境从生产中有15%的数据,这是一个很好的样本大小。

端到端的测试变体允许我们验证QA和生产中的兼容性和性能。我们找到了ATLAS MongoDB版本的连接问题,因此我们必须更新到最新的MongoDB客户端驱动程序。参与Mongodb.local 2020会议 在旧金山和MongoDB客户端库的支持下,开发人员帮助我们快速解决此问题。

概念证明性能测试的结果是:

  •  表现和稳定性的阿特拉斯比我们的自托管相当大小集群更好。
  • 服务与MongoDB 3.6和PrivateLink连接兼容,具有最小和已知的配置更改。
  • 我们的许多团队利用阿特拉斯UI并考虑透明和可访问
  • 测试套件无法达到生产流量水平,我们最大限度地耗尽了60%的吞吐量。这是由于我们的测试基础设施的限制。

概念证明是成功,我们对开始研究我们的第一次迁移感到充满信心。

实时迁移

为确保业务连续性,Realtor.com数据库管理员设置了镜像服务。

切割方法有两种方法:

  • 完全停止服务以确保没有写入活动。停止所有应用程序实例。停止镜像服务。用新的DB端点重新启动应用程序。这是一种推荐的方法,可确保数据安全和连续性。但在我们的情况下需要大约10分钟的大约10分钟。
  • 具有新DB端点的零步蓝/绿色部署。在新部署开始之前,应停止镜像服务。

在这种情况下,您在停止的时刻镜像服务之间存在数据丢失的风险,并且新部署完全替换旧的。因此,某些写入可能会发生在旧DB端点上而不被镜像。 对于这种特殊的服务,我们决定的零停机时间比交换机期间的潜在数据丢失更多。

对于其他服务,推荐的方法更适合,较小的停机时间被接受。服务在行为中有所不同,其中包括数亿个小型记录,不经常访问,另一个有数亿挥发记录,另一个孤儿记录难以迁移。专业服务帮助我们优化查询和清除孤立记录。这些服务的停机时间范围从七到十六分钟。

结论

完成初始讨论需要四个月到完成。迁移了几乎十几种服务,迁移了数十亿条记录大约一个数据的数据。这包括性能优化,群集调整大小和索引调整。

虽然表现不是我们的主要目标,但结果是每项服务的不同,我们必须突出显示:

  • 应用程序的平均减少到数据库延迟3-10%
  • 延迟在白天更平坦,这意味着当我们自主主办时,他们并没有接近性能上限。

运营和稳定性的改进是关键目标之一:

  • 我们对资源使用量更大的可视性(IOPS,票证,磁盘利用率,CPU)– all in one place
  • 我们通过OKTA和ATLAS更容易访问管理数据库
  • 我们有更好的安全控制
  • 我们有更好的可见性和对DB数据指标的理解(索引大小为约25%RAM,Index大小在一个地方)
  • 我们有直接控制来管理资源
  • 我们对备份策略和相应的费用更具粒度控制
  • 我们有一个非常明确的计费崩溃(每个项目,每簇数量有很多使用细节)
  • 我们在过去9个月内没有关于迁移的集群的生产事件
  • 由于ATLAS功能,例如一键式滚动索引,我们可以轻松地在巨大的集合上介绍新的索引。
  • 将数据库带到最新版本

总之,我们实现了降低与基础设施相关的生产事件的目标。事实上,我们只有一个问题,这是由于与另一个队伍缺乏沟通,这是一个推拉意外的大量数据。我们的操作时间的运作时间已经减少到零零;我们确实需要更新数据库版本,但这占我们之前支出的时间的一小部分。对于我们来说,这些是巨大的胜利,因为我们现在有更多的时间专注于开发酷炫的新功能!