加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

当数据库遇到分布式,你会怎么做?

发布时间:2020-03-10 17:11:38 所属栏目:MySql教程 来源:站长网
导读:副标题#e# 数据库通常有着完善的事务支持,但是局限于单机的存储和性能,于是就出现了各种分布式解决方案。最近读了《Designing Data-Intensive Applications》这本书,所以做一个总结,供大家做个参考,有什么不对的请大家指正,一起讨论。 数据模型 数据

我们知道分布式系统中,各个机器拥有相同的时钟(全局时钟)是不太可能的。1978年Lamport在一篇论文中提出了一种逻辑时间戳,来解决分布式系统中区分事件发生的时序问题。这篇论文是分布式系统领域被引用最多的论文之一。

当数据库遇到分布式,你会怎么做?

Lamport时间戳就是两者的简单结合:时间戳/计数器 + 节点ID,规则如下:

每个事件对应一个Lamport时间戳,初始值为0

如果事件在节点内发生,本地进程中的时间戳加1

如果事件属于发送事件,本地进程中的时间戳加1并在消息中带上该时间戳

如果事件属于接收事件,本地进程中的时间戳 = Max(本地时间戳,消息中的时间戳) + 1

事件的顺序按照时间戳排序,时间戳相同则按照节点ID大小排序

上图,ABC节点的所有事件的全序关系如下:

当数据库遇到分布式,你会怎么做?

Lamport时间戳背后的思想是:两个事件可以建立时序(因果)关系的前提是两个事件之间是否发生过信息传递。因此Lamport时间戳只保证因果关系(偏序)的正确性,不保证绝对时序的正确性。

全序广播

Lamport时间戳通过消息的传递来确定事件的时序关系,引出了全序广播(在节点间交换消息的协议)。全序广播需要满足两个安全属性:

可靠交付 (reliable delivery),没有消息丢失:如果消息被传递到一个节点,它将传递到所有节点

全序交付(total ordered delivery),消息以相同的顺序传递给每个节点

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读