邓刚
作者邓刚2021-12-31 13:51
解决方案架构师, 英特尔社区

分布式数据库技术趋势与英特尔最佳实践 - 文字版(下)

字数 4663阅读 1472评论 0赞 0

我是来自英特尔数据中心与人工智能事业部的邓刚。我来给大家分享一下英特尔产品如何助力分布式数据库进行技术创新,以及我们的一些最佳实践。

在使用数据库,尤其是分布式数据库的时候,我们发现一个特点就是数据库往往有性能瓶颈。当性能达到了这个瓶颈的时候,即使给数据库分配再多的 CPU ,数据库的性能也依然无法提升。这是因为数据库相对于其他应用来说,它为了支持 ACID ,它在内部实现上会有非常多的锁。因为这些锁的存在造成了数据访问的竞争,最终导致数据库很难在超过一定核数下仍然保持性能的提升。要改变这个问题,一方面是需要数据库的层面对锁进行优化,减小锁的粒度,从而降低数据的访问竞争,但这种访问竞争总是永远存在的。所以它对于 CPU 这一层架构的实现也是一个挑战,这一块在 第三代英特尔 ® 至强 ® 可扩展处理器 上会有很大的改进。一个是因为在 第三代英特尔 ® 至强 ® 可扩展处理器 上, CPU 的缓存在 L1 、 L2 、 L3 ,都有明显的增加。更大的缓存可以有效地降低数据访问的延时,从而更快地访问数据。同时, 在 CPU 架构里面,英特尔独特的 Mesh 架构也可以明显的降低数据冲突时候的访问延时。

除了 CPU 处理器的这种内核架构提升以外,在数据库领域,除了计算, io 往往也是瓶颈。针对 io 瓶颈, 第三代英特尔 ® 至强 ® 可扩展处理器 一方面 PCIe 从 3.0 提升到 4.0 ,这可以带来两倍的 IO 带宽的提升。为了充分利用这些提升后的 io 带宽,英特尔也推出了一些 CPU 以外的产品,比如 英特尔 ® 傲腾 ™ 持久内存 ,或者是 英特尔 ® 傲腾 ™ 固态盘 , 以及英特尔 ® 以太网 800 系列。他们充分利用了 PCIe4.0 带宽的这种提升,达到了更好的性能。

我们知道金融行业用户对于数据安全有非常高的要求。 第三代英特尔 ® 至强 ® 可扩展处理器 实现了非常多的安全方面的指令或者特性。比如说全内存加密技术( 英特尔 ® Total Memory Encryption ,英特尔 ® TME ) ,以及 英特尔 ® 软件防护扩展(英特尔 ® SGX ) 。利用这些技术,一些合作伙伴也推出了基于 英特尔 ® SGX 的云上的数据库服务实例。利用这种云上高可用、高安全的、内存加密的数据库,那么用户,特别是金融行业用户可以有效避免因为这种安全漏洞带来的数据泄露风险。

这里我来举几个数据库的合作伙伴使用 第三代英特尔 ® 至强 ® 可扩展处理器 后获得性能提升的案例。第一个案例,来自微软 Azure 云,在使用 MYSQL 进行测试的时候的一个测试案例。在使用 第三代英特尔 ® 至强 ® 可扩展处理器 与上一代处理器进行对比,发现在相同核数的情况下,都是八核,可以达到 1.39 倍的性能提升。第二个是亚信内存数据库场景。在 5G 技术的加持下,用户对于计费应用性能有了更高的要求。为了满足这个要求,亚信内存数据库针对 第三代英特尔 ® 至强 ® 可扩展处理器 的一些特性,比如 英特尔 ® 傲腾 ™ 持久内存 进行了优化和开发,从而在新一代处理器上,实现两倍性能提升。与此同时,通过利用 英特尔 ® 傲腾 ™ 持久内存 ,可以在达到接近内存性能的前提下,同时获得 TCO 的优化。还有一个案例是南大通用的 GBase 8a MPP 分布式数据库,在 第三代英特尔 ® 至强 ® 可扩展处理器 上,相对于上一代,实现 1.42 倍的性能提升。

上面几个是关于性能测试的一些结果。除此以外,英特尔还发布了一些最佳实践的白皮书,比如下面,我们发布了基于 第三代英特尔 ® 至强 ® 可扩展处理器 优化开源数据库,比如说 MySQL 和 PostgreSQL 性能的白皮书 大家可以点击链接直接查看。

前面晓蕾老师介绍过几种不同的分布式数据库的实现。其中一种实现方法是以 Oracle Exadata 为代表的数据库一体机的方案,在一体机方案里面,进行了计算和存储的分离。因为计算和存储的分离,对 io 的高要求,采用了 100g 的 RDMA 网络连接计算节点和存储节点。在这里面的计算节点,一般的配置会高于存储节点,同时,在这个 Exadata X8M 里面,里面集成英特尔 ® 傲腾 ™ 持久内存

,它每个节点都会有 1.5T 的傲腾™持久内存作为热点数据的缓存层。同时,它把温数据放在 NVME SSD 上,把大量的原始数据放在 HDD 上。通过这种数据的分层能达到一个更优的性价比以及更好的性能。相对于没有英特尔 ® 傲腾 ™ 持久内存的方案,在集成了英特尔 ® 傲腾 ™ 持久内存方案里面,我们可以看到它的延时会有明显的降低, OLAP 的延时可以达到十九毫秒。同时,数据分析时的带宽可以达到 560GB 每秒。

类似于 Oracle Exadata 方案。国内的一些数据库厂商比如说沃趣也推出了他们自己的数据库一体机,不仅可以支持 Oracle 也可以支持其他的一些数据库。在这里,大家的方案其实是非常类似的,首先也是进行了计算和存储的分离,同时,通过高性能的网络把计算节点和存储节点连接。那么在这里面,其实有个关键的因素,就是存储节点的性能。那么,在这个方案里面,一般会集成像比较高性能的 P4600 SSD ,或者是采用 英特尔 ® 傲腾 ™ SSD ,实现 io 性能的提升。

针对于数据库一体机,我们分别提供了计算节点和存储节点的配置的最佳实践。大家可以看到这张表,左边是计算节点的配置,右边是存储节点的配置。一般来说,计算节点的 CPU 配置需要会高于存储节点,而在硬盘的配置上,存储节点通常在对性能不太高的时候,可以采用 SATA 的 SSD, 如果对 io 的性能要求比较高,可以采用 NVME 的 SSD 或者是使用 英特尔 ® 傲腾 ™ SSD 系来作为 io 性能的提升办法。

关于数据库,一个是 HA 的集群方案,或者是数据库分库分表的方案。 HA 方案里面的一般会有一个主节点,主节点负责数据库整个数据库的写入工作,那么还会有一个到多个 Slave 节点,他们不仅提高帮助数据库整个集群实现数据库的高可用 , 同时它可以分担一部分读的压力。那么分表方案,它会相对于 HA 的方案更复杂一些,计算和存储,相对来说是分离的。绿色部分的是计算节点,蓝色部分的是存储节点,整个数据库表通过应用或者是绿色的计算节点,把数据库表用数据分区的方式,分别存储到不同的存储节点上,来实现数据库的高可用包括高性能。这两种方案都是比较成熟的方案,也是现在金融领域采用的较多的一种方案。在上面的这两种方案里面,其实他们对于 io 的性能都会有比较高的要求。

我引用了来自于 MySQL 开发团队架构师发布的结果,他们在做 MySQL8.0 GA 发布的时候做的测试。在测试中,分别采用了两种不同的硬盘配置,一种是基于英特尔的 SATA SSD, 另外一种是基于 英特尔 ® 傲腾 ™ SSD 。蓝色这根线是采用 SATA SSD 的性能,红色这根线是采用 英特尔 ® 傲腾 ™ SSD 的性能。我们可以看到,当 io 式数据库瓶颈的时候,采用 英特尔 ® 傲腾 ™ SSD, 相对 SATA SSD 或者是 NVME ,它都会有非常大的性能提升。

关于传统的开源数据库,比如说 MySQL 数据库,它在采用不同的部署场景的时候 , 单库或者是 HA 的方案,或者是分库分表的这种集群方案,在不同方案里面,数据库硬件配置的最佳实践。具体的细节我就不展开了,这里面有几个大的原则。在处理器上,单库的方案对于数据库的 CPU 要求会相对低一些,在集群方案里面 , 对 CPU 的要求会更高,同时,内存和磁盘的配置要在集群方案里面也会更高,因为它的延时会相对来说成为整个性能的瓶颈。

另外针对数据库类的应用来说,数据的高可用是比较关键的方面,传统上会采用 RAID 来实现。 RAID 一般来说是采用 HBA 卡的方式,因为现在 SSD 应用较多,尤其是 NVME 的 SSD ,每个 NVME SSD 都可以达到 2G 到 4G 左右的带宽。当把些 SSD 组成一个 RAID 方案的时候,整个方案里面的性能瓶颈往往在于 HBA 卡和 CPU 之间的带宽问题:,无论采用 x8 或者 x16 的 PCIE 线,带宽都是有限的,要么是 8GB ,要么是 16GB 。针对这个瓶颈,英特尔 ® 至强 ® CPU 支持英特尔 ® VROC 软件,它在 CPU 这一级可以取代传统的 HBA 卡,从而消除掉 HBA 卡和 CPU 之间的访问带宽的瓶颈。同时,在 VROC 方案里面,我们也推出了开源的存储软件, Open CAS, 这个开源软件,它可以帮助我们的 RAID 实现分层存储,把热点数据缓存在一个高性能的存储介质上,一些冷的或者温的数据,存储在相对低成本的存储介质上。这个开源的软件,大家可以 免费下载 。我们也集成在了一些主流的 linux 发行版,比如说 Redhat7.8 里面已经集成了我们的 Open CAS 的功能。

下面是针对英特尔 ® VROC 加 Open CAS 做的测试。左边是传统的 HBA 的方案,右边是 VROC 和再加 OpenCAS 方案的对比这里包括了传统 HBA 方面的具体硬盘配置,以及 VROC 的方案硬盘配置。可以看到的结果是,在性能上使用英特尔 ® VROC 的方案,性能可以提高 96% 。延时可以下降 50% 。同时在可靠性上, Endurance 上其实两个方案之间的差别是不大的,在成本上也是类似的。通过采用英特尔 ® VROC 再加 Open CAS 的这种分级存储,得到非常好的性价比的提升。

再有另一类分布式数据库,云原生数据库。云原生数据库里面列了三个例子,一个是 AWSAurora 数据库。国内是以阿里 Polar DB 和腾讯的 Cynos DB 为代表的云原生数据库。云原生数据库有几个显著的特点,比如说计算和存储分离。存储节点一般来说是 Share everything 架构。在一些大规模的集群里面,它也会与 Share nothing 架构去结合。无论哪种实现,高性能的分布式存储都是整个云原生数据库实现的关键功能。

针对数据库上云,金融行业的一个领先的 HCI 解决方案厂商 SmartX ,构建了一个高性能的分布式存储。在高性能分布式存储里面,他们可以使用英特尔 ® 傲腾 ™ 持久内存进行 io 性能加速。大家可以看到下面中间有一张表 , 这是采用和未采用英特尔 ® 傲腾 ™ 持久内存的硬件的置。表的左边是性能的对比,可以看到在这张表里面采用了英特尔 ® 傲腾 ™ 持久内存配置的时候,它的性能可以有 3 倍到 10 倍的 io 性能提升。利用这种 io 性能提升,基于分布式存储的数据库,比如说以 MySQL 为例,它的性能会得到比较明显的性能提升,性能提升在我们的测试里面可以达到 2.2 倍。也就是右下角的这张表里面,可以看到在读写或者是只读的场景里面,都得到了明显的性能提升。

以上是我分别针对不同的分布式数据库的实现,例如一体机方案、经典的分库分表方案,以及云原生数据库方案,英特尔的产品或者技术能够对于各种方案带来哪些性能提升,进行的一个案例的展示和总结,谢谢大家。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表

分布式关系型数据库选型优先顺序调查

发表您的选型观点,参与即得50金币。