单机部署+更强性能!OceanBase 4.0的“小型化”非同一般_日志_分区_规格

自2022 OceanBase年度发布会上发布4.0后,经过85天的快速迭代,OceanBase 4.0经历了内外部客户的场景测试与真实业务场景的稳定性打磨,最终在2022云栖大会上正式上线OceanBase 社区版4.0。该版本不仅从架构上解决了3.x 版本的设计瓶颈,还支持企业关注的多个核心能力,在内核功能、兼容性、稳定性、性能上取得突破。

更重要的是,其基于单机分布式一体化的架构,为企业提供一个面向未来的数据发动机。简单来说,它能以更强的OLTP及OLAP性能,帮助适合分布式场景的大型用户;同时也能通过“小型化、小规格部署能力”,帮助适合单机场景的中小规模用户,以及可能会在未来某个瞬间迎来业务爆发式增长的初创企业,都能更好地驾驭“数据库”的能力,

尤其是这个小型化,对于许多处于业务发展初期的用户来说,可以说是重要且必要。不但能帮助他们以一个非常低的成本,做业务启动探索,同时借助 OceanBase 的良好扩展性,在后期又可以弹性扩容,以面对不断增加的数据和性能需求。

不过,把数据库系统“做小”并非易事,这需要深入到每一个细节,几乎是用显微镜去抠每一处资源的使用。不仅如此,在大规格下一些合适的设计或者配置,到小规格下会变得完全不可接受。

更困难的是,OceanBase 4.0要在同一套架构里面同时兼顾小和大,这需要在大小规格之间做设计上的权衡取舍,尽可能减少分布式架构带来的额外开销,同时在很多场景中让数据库系统根据机器规格做自适应处理。

第一个问题:CPU 消耗

OceanBase 4.0 实现小型化,要解决的第一个问题是 CPU 消耗,在 4.0 版本之前,OceanBase 会为每个数据表的分区创建一个 Paxos 日志流,通过 Paxos 协议来保证分区数据的多副本一致性。这样的设计非常灵活,因为 Paxos 组是基于分区的,这意味着分区可以非常灵活地在不同服务器之间迁移;但同时也带来了很大的 CPU 开销,由于对每个 Paxos 日志流都会有选主、心跳和日志同步的开销,当服务器规格较大或者分区数量较少时,这些额外开销相对来说占的比例并不是很高;但当服务器规格变小时,Paxos 协议带来的开销就变得难以接受了。

OceanBase 4.0 是如何解决这一问题呢?研发团队认为最直接有效的办法是减少 Paxos 日志流的数量。如果能够将 Paxos 日志流的数量减少到与服务器个数同量级的程度,那么这部分开销就和传统数据库主备库模式下的日志开销差不多了。

展开全文

于是,研发团队将多个数据表分区聚合为一个 Paxos 日志流,并进行动态日志流控制。一个数据库集群中有三个 zone,每个 zone 各包含两台服务器。假设有一个租户配置了两个 unit,那么相应地这个租户就会有两个 Paxos 日志流,一个日志流中包含分区(P1, P2, P3, P4),另一个日志流中包含分区(P5, P6)。

如果两台服务器的负载不均衡,那么 OceanBase 的负载均衡模块会在 Paxos 日志流之间做分区的调度;

如果需要做集群的扩容,那么可以将一个 Paxos 日志流分裂为多个 Paxos 日志流,并做 Paxos 日志流的整体迁移;

如果需要做集群的缩容,那么可以将多个 Paxos 日志流迁移到一起,并做多个 Paxos 日志流的归并。

通过动态日志流控制,OceanBase 4.0 在保证高可用灵活扩展的基础上,极大减少了分布式架构带来的 CPU 开销。

第二个问题:内存消耗

OceanBase 4.0 实现小型化,要解决的第二个关键问题是内存消耗。在 4.0 版本之前,出于性能的考虑,OceanBase 会让一部分元数据在内存中常驻,当内存规格较大时,这些内存所占的比例并不是很高;而当服务器规格要降低到很小时,这些元数据内存的大小就变得难以接受了。为了带给用户更加极致的小规格能力,研发团队实现了所有元数据的动态加载。

他们将 SSTable 做了分层存储,将 SSTable 的根存储在分区内,在内存中只维护分区的句柄。只有当需要对分区进行访问时,才将需要访问的数据通过 kvcache 动态加载起来。从而做到了让 OceanBase 4.0 可以在较小内存的规格下,支持较大数据量的高并发访问。

为了测试小规格下的实际性能效果,团队基于三台 4C16G 的服务器,按照 1:1:1 模式来部署 OceanBase 社区版 4.0,并同时和 4C16G 的 RDS for MySQL 8.0 通过 Sysbench 进行性能对比,可以看到绝大多数场景中,OceanBase 社区版 4.0 的性能都优于 RDS for MySQL 8.0,尤其在 Insert 和 Update 两个场景中,同样的硬件条件下,OceanBase 社区版 4.0 的吞吐量表现是 RDS for MySQL 8.0 的 1.9 倍。

可以说,OceanBase 4.0 突破了分布式数据库的边界,让分布式数据库向通用性数据库又迈进了一步,即使是普通的个人电脑也可以流畅运行OceanBase社区版4.0,真正让分布式数据库真正做到“触手可及”。

特别声明

本文仅代表作者观点,不代表本站立场,本站仅提供信息存储服务。

分享:

扫一扫在手机阅读、分享本文