背景

今天,Wayfire使用SQL Server来存储我们的客户数据。我们有一个分叉的架构,由许多碎片组成,这些碎片在整个美国和欧洲的多个数据中心传播。在过去的几年里,我们一直推动了这一基础设施的极限,造成了以下问题:

  1. 由于我们分叉策略中达到最大节点数量,难度缩放
  2. 尝试增加可用性时添加了复杂性
  3. 由于许可成本,不断增加的价格

我们一直在评估谷歌云扳手作为我们当前架构的潜在替代品。

扳手是一种分布式关系数据库管理系统(RDMS),它允许易于水平缩放,高可用性外部一致性,并降低成本。作为我们努力评估其可行性的一部分,我们完成了可用的性能测试实例配置。每个配置都提供了其副本的不同地理布局,并且我们的工作原因是由于可用GCP位置和扳手的副本的采样之间的地理距离来量化查询时间的增加。

方法

所有Spanner的多区域实例配置都由多个GCP区域跨各种地理位置的复制品分布组成。执行某些操作时,需要扳手以与客户端跨越世界的区域中的副本通信。我们希望确定执行此类业务的确切延迟损失。

我们进行了四次核心性能测试:更新强烈阅读,和陈旧读书。所有测试都是在五个样本GCP区域的CentOS VM上运行的独立Java应用程序进行所有测试:US-EAST4.(弗吉尼亚州),US-Cental1.(爱荷华州),美国西部(俄勒冈州),欧洲 - 西4.(荷兰),和欧洲 - 西3.(法兰克福)。该应用程序使用了由此提供的扳手数据库客户端春天数据云扳手客户端库连接到扳手实例。

测试在九个不同的扳手上运行实例配置每个都有一个节点。在每个测试套件运行期间,在30分钟的时间范围内使用单个实例配置在单个客户端上同时执行所有测试。我们从我们的测量中排除了15分钟的连接变暖期,导致我们每30分钟运行的最后15分钟取样。扳手实例在正在测试的测试外部没有额外的负载。据报道的结果全部使用各自的数据集的平均值。

架构

下面的模式用于数据库,今天在SQL Server中的客户数据表模式的非常简化版本:

运营

扳手有两种不同的阅读类型,陈旧强大。前者是从过去的时间戳中的数据读取数据,后者是读取最新数据的读取。强大读取要求服务副本与领导副本通信,以确保最新。这需要往返可能的地理位置遥远的地区。陈旧读取只需要击中最接近的可读副本,而无需与领导者通信,从而减少延迟。僵化的数量是可配置的,但谷歌建议使用僵持15秒最佳利益。这是我们所有人所用的价值陈旧读取测试。

写道

要完成写入,请处理请求的扳手副本必须与领导副本界面,又启动A.投票关于写是否可能发生。投票需要与额外的地理上遥远的副本通信。所有这一来回导致在大多数实例配置中写入请求的显着延迟成本。

延迟分析

以下是我们的核心读取和写入操作测试的时序数据,从我们的5个示例客户端区域到所有9个实例配置。如上所述,定时的差异主要是由于客户端到扳手副本的地理延迟。根据实例配置,某些客户端在地理上远离必要的副本以进行操作,而其他客户则共享相同的GCP区域。

Nam-Eur-Asia1

Nam-Eur-Asia1配置的领导地区位于Us-Central1(爱荷华州)。插入,更新和大多数强大读取需要与扳手领先的副本进行接口,因此对于这些操作,我们看到欧洲客户的非常高的延迟欧洲 - 西3.欧洲 - 西4.,来自东部和西海岸复制品的中等延迟,US-EAST4.美国西部,低延迟US-Central1,与引线扳手复制品相同的GCP区域。

同样地,陈旧读取必须与最近的可读副本交谈,并在Nam-Eur-Asia1配置,一个人非常接近欧洲客户和US-Cental1.。这个导致我们所有三个中的最小延迟陈旧读取测试。另一方面,US-EAST4.美国西部在爱荷华州拥有他们最近的可读性副本,从而导致上面看到的过度延迟。

NAM3,NAM6和EUR3

NAM3.

NAM6.

EUR3.

人们可以看到类似的地理延迟模式EUR3.NAM3.,和NAM6.实例配置。在北美配置中,跨大陆延迟最容易注意到。例如,领导者复制品NAM3.配置是US-EAST4.,而且美国西部客户在写作或强大的阅读以来,客户显示最大的延迟,因为前往领导者来自西海岸到东海岸。

随着领导者所在的欧洲配置显示较少的延迟影响欧洲 - 西部(比利时)这是欧洲客户附近的欧洲 - 西3.(法兰克福)和欧洲 - 西4.(荷兰);但是,既不是客户端都与扳手领先的副本共处,因此写入和强读数的最小延迟仍然高于其他配置。

区域配置

对于我们的区域配置测试,我们实际使用五种不同的实例配置。每个配置都具有其所有复制品,其都位于与正在测试的客户端相同的GCP区域中。查看这些配置允许我们基本上从等式中删除地理延迟。

在这些结果中,备注最重要的差异是,写入操作比与客户端共同配合的多区域实例配置更快。最初人们可能期望延迟是相同的,因为领导者和客户端是两个配置的同一GCP区域,但考虑到扳手的内部工作,这种差异是有道理的。当客户端向扳手副本进行写入请求时,它首先传递给领导者副本。然后,领导者将在多区域配置中的其他读/写和证人副本之间发起投票,该读取/写入和证人副本在地理上远离领导者。区域配置不必采取此往返,导致操作的延迟较少。

结论

从我们的测试来看,很明显,切换到Google云扳手的地理延迟影响将是重要的,特别是与来自在上印的SQL Server基础架构类似的时间相比时。在扳手中最好的情况(NAM6.与客户in.US-Cental1.),读取和写入时间是SQL Server的双倍,并在其最坏的情况下(Nam-Eur-Asia1与客户in.欧洲 - 西3.),延迟高达15倍。但是,重要的是要注意,由于服务器之间的地理延迟,任何分布式RDM都预计会有一些绩效命中。毕竟,光只能如此迅速行驶。还有可能使用陈旧读取的延迟等待延迟作为默认查询选项,推动允许同时查询执行和增加查询缓存的架构,并使用Google优化到一个客户端GCP区域的扳手实例配置产品。

当然,在比较数据库管理系统时,延迟只有一件拼图。总的来说,由于其完全管理的性质,易缩放和高可用性,我们预计扳手会降低成本和维护时间。我们还期望来自我们不同的用例的强大全球和脑内一致性的好处 - 使用SQL Server实现的东西是非常困难的。通过根据用例仔细选择实例配置,并考虑通过延迟缓解技术改进的可能性,我们认为这一关系数据库管理系统的许多优势超过了增加的延迟成本。

摄影者Mackenzie Weber.uns