因此,我们期望利用分布式数据库透明且可扩展的能力,平稳支撑业务的快速增长。
其次,从运维成本角度考虑,在保证系统稳定性的前提下,我们致力于降低运维复杂度。以 MySQL 为例,假设一个数据库(database)是一个“蛋”,一个 MySQL 实例是一个“篮子”,那么部署 1000 个数据库时,应该如何合理分配到多个 MySQL 实例中?哪些数据库应该放在同一个实例中?如果将两个对资源要求都很高的重要数据库放在同一个实例中,可能会导致资源抢占。另外,如支付类数据库,虽然数据量不大,但对业务要求极高,也不宜与其他数据库放在同一个实例中。由于业务差异、优先级不同、数据增长速度各异以及 QPS(每秒查询数) 要求不同,DBA 经常需要调整数据库分布。即便不考虑资源成本,仅运维挑战就已相当大。我们期望分布式数据库能够解决这一问题,帮助 DBA 自动调整数据库分布(见图1)。
图1 使用分布式数据库实现“自动挪蛋”示意图
最后,从高可用角度考虑,我们期望保证集群的高可用能力。在运维 MySQL 集群时,我们通常采用 MHA、Orchestrator 等工具实现高可用,但它们都是“外挂”形式,本质上无法解决网络分区导致的脑裂问题(见图2)。因为数据库和 MHA 组件是两个独立的软件,不在同一个进程内,缺乏一致性协同控制。相比之下,MySQL 的 Group Replication 这类高可用架构更为可靠,它与 OceanBase 或 TiDB 等分布式数据库一样,基于 Paxos 或 Raft 分布式一致性协议,可以实现 RPO=0(数据丢失为零),RTO