ITPub博客

首页 > 数据库 > 国内数据库 > 多主的数据库,如何横向扩展

多主的数据库,如何横向扩展

原创 国内数据库 作者:火龙呼呼猫 时间:2025-01-06 22:47:38 0 删除 编辑
从开始设计Cantian多主引擎这个项目之初,就一直有人在问我一个问题,基于Cantian的多写数据库集群,技术上可以做到多大,规模是否受限?

在元旦前的武汉,开放原子开发者大会上,做完关于Cantian的三层解耦及向量检索的报告之后,主持人代表观众问了我一个问题,就是Cantian是否有考虑过支持分布式数据库或者云化部署的模式。
这是个很有意思的话题,所以借元旦后的第一个周末,写一点我的看法。

首先简单回顾一下Cantian是如何实现多主的。参见: 分布式数据库的多主,有哪几种方式?
参天借助一个插件嵌入MySQL实例,然后在存储加速层构建了一个全局的Cache(如下图)。这使得多个MySQL实例之间可以对同一个表进行多读多写操作,实现了 类似Oracle RAC的能力。
图片

这个全局Cache具体是如何工作的呢?
集群中的每个页面,都可以视为一个资源,在执行事务的时候,事务需要的资源(页面)都要被协商调度到事务执行节点(因此Cantian系统中不会出现“分布式事务”)。

资源调动的过程如下所示
Requester(R)是资源请求方。Master(M)是资源的登记服务。①请求方需要向Master询问及索取资源。如无人持有资源,Master可以告知requester,从存储读页面并成为Owner(O)。如果已经有了Owner,②Master会通知其把资源转移到Requester。③完成转移之后,④Requester变成新的Owner并通知Master更新。
图片

所以在事务跨节点执行期间,其实涉及的主要就是这三个角色通信,他们最多分布在3个不同的实例上。

事实上,只要两个不同实例执行的事务涉及的资源不同,冲突很少,就不会有资源来回迁移的问题。而且每个实例都会把自己需要的资源(Owner代表的Page)放到本地缓存,与事务之间形成本地化,执行效率是提高的。这也是为什么Cantian+MySQL实测的TPC-C结果,2节点的线性度比单节点可以提升1.6倍以上。

随着节点进一步增多,虽然集群规模在变大,但是上述三个角色构成的“铁三角”没有变化,因此对于每个事务而言,参与的实例和网络交互没什么变化,只要没有很多资源访问冲突。性能的线性度不会随着集群规模变大受影响。

可能有人会问访问冲突很少这个假设是否合理。其实不管哪种技术架构,甚至不管是否在数据库领域,资源的耦合永远都是横向扩展的敌人。可以横向几千节点的分布式架构,一个基本假设也是节点间/shard间没有太多的关联与资源耦合才能成立。

所以当节点真的很多的时候,其实资源合理分配可能像下面的样子,每个实例执行各自的事务,事务之间资源冲突较少,各自缓存各自的页面。所有数据都在一套共享存储中。
图片

到了这里,如果我们再回顾一下《 分布式数据库的多主,有哪几种方式?》中的这张图就会发现,既然我们有了访问冲突不大的这种假设,那么不论是Cantian的多主架构,还是分布式Sharding架构,他们的运行时资源布局似乎呈现了相似的模样,即每个实例都在管理自己需要的资源。
图片

而他们之间的区别主要在于两点。
1 、故障处理方式不同。
上面的分布式数据库一个Shard的实例故障时,是通过主从倒换的方式完成故障接管修复的,其中一个从节点需要升主回放日志。
而Cantian多主则是基于共享缓存和集群管理,在故障时直接有另外一个主实例提供服务即可,没有主从倒换的过程,只有重新路由的过程,能够快速恢复。
2、 分布策略不同
上面的分布式数据库,其Shard分配策略是固定不变的。所以如果出现了跨Shard操作,就必须用分布式事务解决。
Cantian的分配策略,是基于RMO三个角色动态决定的,随着业务访问的变化,Cantian会自动去调整Owner的布局分配来让事务的资源局部性最好,不会产生分布式事务。

当然了,目前一些原生分布式数据库,对于上面提到的故障切换接管会有更优雅一些的处理方式。

继而,我们还可以考虑做进一步的资源局部性优化,比如实例1/2与实例3/4的操作来自不同业务部门,他们之间没有互访需求这时我们就可以把RMO的角色分配(主要是M的分配)进一步局部化,让实例1/2相关RMO交互尽量局限在左侧虚框,同样3/4的RMO交互也尽量局限在右侧虚框。两个虚框整体还是一个集群,数据依然共享一套存储。
图片

至此我们发现,如果把虚框映射到分布式数据库的“Shard”概念上去,那么上面描述的其实就是一个可以横向扩展且支持多读多写(RAC)和缓存级同步快速倒换的架构了。

在Shard(姑且先借用这个词这么叫吧)内,多个实例之间是多主基于RMO调度的共享缓存,在Shard间资源访问冲突极低,Master不跨Shard分配。

所以,当时主持人的问题,我回答的是Cantian的架构本身,和分布式之间是完全可以深度结合起来的。

可能有小伙伴会指出,这个是不是和Oracle的Sharding很像。确实,只要把问题说透了,阳光底下确实没啥新鲜事。
所以Cantian多主架构,其实可以很容易地扩展成大规模集群。对此,你怎么看。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70042829/viewspace-3062413/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2024-12-14

  • 博文量
    15
  • 访问量
    9613