背景

今天,Wayfair使用SQL Server存储我们的客户数据。我们有一个分片架构,由分布在美国和欧洲多个数据中心的多个分片组成。在过去几年中,我们一直在推动这一基础设施的发展,造成了以下问题:

  1. 在我们的切分策略中,由于达到最大节点数,很难扩展
  2. 在尝试提高可用性时增加了复杂性
  3. 因许可证费用而不断上涨的价格点

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

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

方法

所有Panner的多区域实例配置都由分布在不同地理位置的多个GCP区域的副本组成。在执行某些操作时,需要panner与可能位于客户机所在的全球某个区域的副本通信。我们想确定执行此类操作的确切延迟惩罚。

我们进行了四次核心性能测试:插入更新强烈阅读,和过时的读取。所有测试都是在五个样本GCP区域的CentOS VM上运行的独立Java应用程序进行所有测试:US-EAST4.(弗吉尼亚州),US-Cental1.(爱荷华州),美国西部1(俄勒冈州),欧洲-西方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.美国西部1,并且从美国中部1,与引线扳手复制品相同的GCP区域。

同样地,陈腐的读取必须与最近的可读副本通信,并且Nam-Eur-Asia1配置,其中一个非常接近欧洲客户和US-Cental1.。这个导致我们所有三个中的最小延迟陈腐的阅读测试。另一方面,US-EAST4.美国西部1在爱荷华州有他们最接近的可读副本,因此造成了上面看到的额外延迟。

nam3、nam6和eur3

NAM3.

纳米6

3欧元

人们可以看到类似的地理延迟模式3欧元NAM3.,和纳米6实例配置。在两种北美配置中,跨大陆延迟最容易被注意到。例如NAM3.配置为US-EAST4.,和美国西部1客户端在写或强读时显示最大的延迟,因为到leader的往返是从西海岸到东海岸。

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

区域配置

对于我们的区域配置测试,我们实际上使用了五种不同的实例配置。每个配置的所有副本都与被测客户端位于同一GCP区域。通过查看这些配置,我们可以从等式中基本上消除地理延迟。

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

结论

从我们的测试来看,很明显,切换到Google云扳手的地理延迟影响将是重要的,特别是与来自在上印的SQL Server基础架构类似的时间相比时。在扳手中最好的情况(纳米6与客户in.US-Cental1.),读写时间是SQLServer的两倍,在最坏的情况下也是如此(Nam-Eur-Asia1与客户in.欧洲-西方3),延迟高达15倍。不过,需要注意的是,由于服务器之间的地理延迟,任何分布式RDM都会受到一定程度的性能影响。毕竟,光只能传播这么快。还有一些方法可以缓解延迟,比如使用过时的读取作为默认的查询选项,推动支持并发查询执行和增加查询缓存的体系结构,以及与Google合作优化panner为客户GCP区域提供的实例配置。

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

摄影者Mackenzie Weber.uns