MIT6.824/lecture-10-cloud-replicated-db-aurora/10.8-shu-ju-fen-pian-protection-group.md
2022-01-25 02:41:31 +00:00

5.4 KiB
Raw Permalink Blame History

10.8 数据分片Protection Group

这一部分讨论Aurora如何处理大型数据库。目前为止我们已经知道Aurora将自己的数据分布在6个副本上每一个副本都是一个计算机上面挂了1-2块磁盘。但是如果只是这样的话我们不能拥有一个数据大小大于单个机器磁盘空间的数据库。因为虽然我们有6台机器但是并没有为我们提供6倍的存储空间每个机器存储的都是相同的数据。如果我使用的是SSD我可以将数TB的数据存放于单台机器上但是我不能将数百TB的数据存放于单台机器上。

为了能支持超过10TB数据的大型数据库。Amazon的做法是将数据库的数据分割存储到多组存储服务器上每一组都是6个副本分割出来的每一份数据是10GB。所以如果一个数据库需要20GB的数据那么这个数据库会使用2个PGProtection Group其中一半的10GB数据在一个PG中包含了6个存储服务器作为副本另一半的10GB数据存储在另一个PG中这个PG可能包含了不同的6个存储服务器作为副本。

因为Amazon运行了大量的存储服务器这些服务器一起被所有的Aurora用户所使用。两组PG可能使用相同的6个存储服务器但是通常来说是完全不同的两组存储服务器。随着数据库变大我们可以有更多的Protection Group。

这里有一件有意思的事情你可以将磁盘中的data page分割到多个独立的PG中比如说奇数号的page存在PG1偶数号的page存在PG2。如果可以根据data page做sharding那是极好的。

Sharding之后Log该如何处理就不是那么直观了。如果有多个Protection Group该如何分割Log呢答案是当Aurora需要发送一个Log条目时它会查看Log所修改的数据并找到存储了这个数据的Protection Group并把Log条目只发送给这个Protection Group对应的6个存储服务器。这意味着每个Protection Group只存储了部分data page和所有与这些data page关联的Log条目。所以每个Protection Group存储了所有data page的一个子集以及这些data page相关的Log条目。

如果其中一个存储服务器挂了我们期望尽可能快的用一个新的副本替代它。因为如果4个副本挂了我们将不再拥有Read Quorum我们也因此不能创建一个新的副本。所以我们想要在一个副本挂了以后尽可能快的生成一个新的副本。表面上看每个存储服务器存放了某个数据库的某个某个Protection Group对应的10GB数据但实际上每个存储服务器可能有1-2块几TB的磁盘上面存储了属于数百个Aurora实例的10GB数据块。所以在存储服务器上可能总共会有10TB的数据当它故障时它带走的不仅是一个数据库的10GB数据同时也带走了其他数百个数据库的10GB数据。所以生成的新副本不是仅仅要恢复一个数据库的10GB数据而是要恢复存储在原来服务器上的整个10TB的数据。我们来做一个算术如果网卡是10Gb/S通过网络传输10TB的数据需要8000秒。这个时间太长了我们不想只是坐在那里等着传输。所以我们不想要有这样一种重建副本的策略找到另一台存储服务器通过网络拷贝上面所有的内容到新的副本中。我们需要的是一种快的多的策略。

Aurora实际使用的策略是对于一个特定的存储服务器它存储了许多Protection Group对应的10GB的数据块。对于Protection Group A它的其他副本是5个服务器。

或许这个存储服务器还为Protection Group B保存了数据但是B的其他副本存在于与A没有交集的其他5个服务器中虽然图中只画了4个

类似的对于所有的Protection Group对应的数据块都会有类似的副本。这种模式下如果一个存储服务器挂了假设上面有100个数据块现在的替换策略是找到100个不同的存储服务器其中的每一个会被分配一个数据块也就是说这100个存储服务器每一个都会加入到一个新的Protection Group中。所以相当于每一个存储服务器只需要负责恢复10GB的数据。所以在创建新副本的时候我们有了100个存储服务器下图中下面那5个空白的

对于每一个数据块我们会从Protection Group中挑选一个副本作为数据拷贝的源。这样对于100个数据块相当于有了100个数据拷贝的源。之后就可以并行的通过网络将100个数据块从100个源拷贝到100个目的。

假设有足够多的服务器这里的服务器大概率不会有重合同时假设我们有足够的带宽现在我们可以以100的并发并行的拷贝1TB的数据这只需要10秒左右。如果只在两个服务器之间拷贝正常拷贝1TB数据需要1000秒左右。

这就是Aurora使用的副本恢复策略它意味着如果一个服务器挂了它可以并行的快速的在数百台服务器上恢复。如果大量的服务器挂了可能不能正常工作但是如果只有一个服务器挂了Aurora可以非常快的重新生成副本。