Percona服务器MongoDB中基于文件拷贝的初始同步性能大幅超越逻辑初始同步

本文详细比较了Percona服务器MongoDB中基于文件拷贝的初始同步与逻辑初始同步的性能差异。通过多个测试场景,包括不同数据大小、索引数量和集合数量的对比,证明基于文件拷贝的方法在大型数据集上性能提升2-4倍。

基于文件拷贝的初始同步在Percona服务器MongoDB中大幅超越逻辑初始同步

在之前的文章《大规模可扩展性:Percona服务器MongoDB的基于文件拷贝初始同步》中,我们展示了Percona服务器MongoDB中新的基于文件拷贝的初始同步(FCBIS)的一些早期基准测试结果。这些初步结果已经表明,与默认的逻辑初始同步相比有显著改进。

在这篇文章中,我们通过更结构化的比较扩展了测试。我们使用不同大小的数据库执行了多次初始同步操作,从几GB到几百GB,再到几TB。我们还测试了不同数量的索引和集合的影响。

对于每个测试,我们测量了执行初始同步所需的时间:停止一个节点,删除数据目录,然后重新启动它,这会触发初始同步。在提供的图表中,您可以看到两种方法之间的时间比较。

重要说明

FCBIS功能仅在Percona服务器MongoDB的ProBuild中可用,从版本8.0.12-4和7.0.22-12开始。Percona服务器MongoDB的ProBuild是一个包含专门构建的企业功能的构建版本。它包装在由Percona创建和测试的软件包中,可供Percona客户使用。非付费的Percona软件用户也可以从Percona ProBuilds中受益,但他们需要从Percona提供的源代码构建,这些源代码对所有人开放。

使用方法

FCBIS方法是将数据文件从源节点物理复制到目标节点。它比默认的逻辑初始同步快得多,特别有利于大型数据集。使用这种初始同步方法可以加速集群扩展并提高恢复性能。

Percona的基于文件拷贝的初始同步实现与MongoDB Enterprise Advanced兼容,并具有相同的配置参数。

要选择初始同步方法,请在目标节点的配置文件中指定initialSyncMethod参数:

1
2
setParameter:
  initialSyncMethod: fileCopyBased

您只能在启动时设置此服务器参数。如果要返回默认行为,可以将参数设置为logical或直接删除配置。

测试环境

我们在AWS上使用EC2实例部署了一个3节点副本集(主-从-从)。以下是规格:

  • 实例类型:t3.xlarge
  • vCPU:4
  • 内存:16 GB
  • 存储:1.2TB,gp2,3600 IOPS

对于所有测试,我们使用了Percona服务器MongoDB 8.0.12-4,采用默认设置。使用POCDriver创建模拟集合和数据。

第一次测试:具有不同索引的小型数据集

让我们看看FCBIS如何影响具有不同数量索引的非常小的数据集。只创建了一个集合。

集合数 1 1 1 1
索引/集合 1 2 5 10
数据大小 30GB 30GB 30GB 30GB
存储大小 10GB 10GB 10GB 10GB
文档大小 500字节 500字节 500字节 500字节
逻辑同步(分钟) 4 5 8 12
FCBIS(分钟) 2 2 3 3

在添加更多索引时,FCBIS的时间增加比逻辑同步更慢。在逻辑初始同步期间,索引重建需要更多时间。在物理拷贝中,文件稍多,但索引不需要重建。因此,我们创建的索引越多,逻辑同步增加得越快。

第二次测试:300GB数据集与不同索引

现在尝试使用具有几个集合的较大数据集。

集合数 2 2 2 2
索引/集合 2 3 4 5
数据大小 300GB 300GB 300GB 300GB
存储大小 100GB 100GB 100GB 100GB
文档大小 10KB 10KB 10KB 10KB
逻辑同步(分钟) 25 26 28 29
FCBIS(分钟) 9 11 12 12

测试证实FCBIS比逻辑同步快2到3倍。它们还证实了拥有更多索引的影响。

第三次测试:1.5TB数据集与不同索引

现在转向副本集的大规模测试,使用1.5TB数据集。

集合数 5 5 5 5
索引/集合 1 4 7 10
数据大小 1.5TB 1.5TB 1.5TB 1.5TB
存储大小 500GB 500GB 500GB 500GB
文档大小 10KB 10KB 10KB 10KB
逻辑同步(分钟) 111 125 129 131
FCBIS(分钟) 44 46 46 48

同样,FCBIS比逻辑同步快2到3倍。每个集合的索引越多,比率越高。

第四次测试:3TB数据集与不同索引

现在转向副本集的超大规模测试,使用3TB数据集和不同的索引。

集合数 60 60 60
索引/集合 0 5 10
数据大小 3TB 3TB 3TB
存储大小 1TB 1TB 1TB
文档大小 8KB 8KB 8KB
逻辑同步(分钟) 212 235 275
FCBIS(分钟) 87 93 102

再次确认了相同的行为。在超大规模下,FCBIS更可取,我们创建的索引越多,逻辑同步越慢。

第五次测试:增加集合数量的影响

在最后一个测试中,目标是测试增加集合数量对数据大小的影响,但保持每个集合的索引数相同。

集合数 1 5 10 20 40 60 80 100
索引/集合 5 5 5 5 5 5 5 5
数据大小 4GB 30GB 66GB 123GB 230GB 330GB 426GB 530GB
存储大小 2GB 10GB 22GB 41GB 76GB 110GB 142GB 177GB
文档大小 3KB 3KB 3KB 3KB 3KB 3KB 3KB 3KB
逻辑同步(分钟) 1 4 9 17 35 54 82 96
FCBIS(分钟) 2 2 3 5 9 13 17 21

正如预期的那样,两种方法随着数据量的增加都需要更长时间,但逻辑同步随着集合数量的增加几乎呈指数增长,而FCBIS看起来是线性的。比率从2倍到4倍,并且在更大的数据集上应该会进一步增加。

结论

在大型数据集上,与逻辑初始同步相比,基于文件拷贝的方法可以提供2到4倍的初始同步速度提升,特别是在有大量集合和更多索引的情况下。这意味着添加新的副本集成员或在故障后恢复节点可以在以前所需时间的一小部分内完成。

对于运行大型MongoDB部署的环境,基于文件拷贝的初始同步是一个改变游戏规则的功能,与传统的逻辑方法相比,提供了显著的效率和操作优势。

请记住,结果可能受到外部因素的影响,如网络开销、存储资源和MongoDB特定的调优。无论如何,我们可以说在大多数使用案例中,FCBIS绝对更快。

我们很期待听到您在Percona服务器MongoDB中使用新的基于文件拷贝的初始同步方法的经验。您的反馈和性能结果对我们继续改进软件非常宝贵。请在我们的社区论坛https://forums.percona.com/c/mongodb/percona-server-for-mongodb/17上分享您的想法、基准测试和遇到的任何问题。我们期待听到您的意见,并感谢您对Percona社区的贡献!

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计