分布式数据库

时间:2022-09-22 00:18:59

分布式系统的CAP原则:Consistency(一致性),Availability(可用性), Partition tolerance(分区容错性) 。

分布式数据库系统主要由以下几个部分组成: 数据中心, 远程数据库, 远程数据库与数据中心之间的数据交换。

两种运行状态:“常连接” 和 “偶连接”。 常连接 : 数据中心与远程数据库长期保持联通状态的部署环境,适合对实时性或者近乎实时(秒级)条件下保持数据的一致性。

偶连接:允许数据交换有一定的延迟,数据中心与各远程数据库在平时不保持连接状态,且两者都有可能会有数据的变更。在需要的时候才会通过数据交换模块连接进行数据的交换。

数据交换可能需要考虑的问题:

双向同步, 异构数据库支持, 增量同步, 数据一致性, 安全性。

 

本来准备直接找找具体的分布式数据库数据同步的实现或者成熟的方案,结果发现这个想法就不对,实现果然没有什么银弹,每个数据库可能都有主从同步的实现,不同的公司也有自己的实现方案,我们可以做的就是参考他们的方案,或者考虑复用*,或者自己造*,但是基本的算法思想应该还是一致的,先列下网上找的分布式一致性的算法,然后列下各个数据库实现同步的方案,以及各个公司实现分布式数据库一致性同步的方案。

算法部分:

  分布式一致性算法:

  XA规范介绍:分布式事物处理模型,包括应用程序(AP),事物管理器(TM),资源管理器(RM),通信资源管理器(CRM)四部分。

  一般 TM 是交易中间件, RM是数据库,CRM是消息中间件。分布式事物属于全局事物,多个数据库需要共同完成一个工作。由于一个数据库无法知道其他的数据库是否成功,需要依赖交易中间件来通知和协调相关数据库的提交或者回滚。

  XA就是X/Open DTP定义的交易中间件和数据库之间的接口规范,交易中间件用它来通知数据库事物的开始,结束以及提交,回滚等。

  1. Paxos 算法:

Google Chubby的作者Mike Burrows说过, there is only one consensus protocol, and that’s Paxos” – all other approaches are just broken versions of Paxos.

  paxcos :https://zh.wikipedia.org/wiki/Paxos%E7%AE%97%E6%B3%95(Paxos算法)

       http://www.hollischuang.com/archives/693(分布式一致性算法——paxos)

       https://segmentfault.com/a/1190000005717258(分布式一致性算法Paxos介绍)

  2. 二阶段提交协议,三阶段提交协议:

  http://www.hollischuang.com/archives/681 (关于分布式事务、两阶段提交协议、三阶提交协议)

  3. raft算法介绍:

  http://www.cnblogs.com/mindwind/p/5231986.html(Raft 为什么是更易理解的分布式一致性算法)  

  https://raft.github.io/#implementations

  

数据库分布式模式:

  1. redis: 使用异步同步方式,从机定时获取复制源。一个主可以对应多个源。

     Master-sliver模式:  

    复制的过程:

    1.启动一个slave后,它会发送一个 PSYNC连接。如果是一个重新连接,主机有足够的backlog,只有差异部分会发送,否则会触发一个重新同步(resynchronization)的活动。触发了重新同步后,主机会开始一个后台保存进程产生RDB文件。同时把新增加的写命令写到缓存中。后台保存进程完成后,主机会把db文件写到从机的硬盘,并且加载到内存中。并且也会将缓存的命令传给从机。如果主机收到多个同步请求时,主机只会启动一个保存进程来处理它们。

   2.MongoDb:常见模式:replica set ;master-slave(自3.2版本开始逐渐淘汰)

    同时还涉及到 oplog的使用。

    https://docs.mongodb.com/manual/replication/

    Mongodb 拥有sharding功能,可以将一个数据库分表存储到不同的机器上。

    https://docs.mongodb.com/manual/sharding/

------------------------------------

分割线 查找哪些实现了分布式数据库的方式不足,还有实现的一些方案还需要搜索。

------------------------------------

分布式实现方案:

  从数据库方面:mongodb,mysql,db2,redis              

 

参考:http://blog.chinaunix.net/uid-7374279-id-3688012.html ( 分布式数据库的数据同步技术之一:什么是数据同步 )