不确定性有两个因素:一是操作/事件需要感知和响应;二是系统部件可能出现故障。对于分布式系统,构建者总是期望系统在预期中运行,而不是充满各种不可预测的事件和结果,因此他们总是发明一些东西来预防和规范分布式系统的行为和结果。
是使分布式系统具有确定性的有效手段。有序使系统可预测,这在逻辑上是可预测的。
,这包括两个方面:并发操作/并发操作
事件数据异常问题可以通过排序解决,事务处理技术是使相关数据项具有原子性和隔离性(并发事务不受其他事务影响,保持结果满足特定隔离级别的期望),从而确定操作/事件之间的偏差顺序关系,然后在事务中积累偏差顺序或全序关系(如果事务有全序关系,则无异常);分布式一致性是确认系统外部发生的操作/事件的部分顺序或全序关系。因此,本文利用数学知识进一步阐述了分布式一致性和事务一致性的本质。简单地说,分布式一致性是操作/事件的顺序,事务一致性是由多个操作/事件组成的事务顺序。
01 - 偏序与全序
在一个多进程或分布式架构的系统中,需要知晓事件和消息传递时的顺序关系,这涉及偏序和全序的概念。
偏序和全序是数学公理集合论中的概念。
偏序是指只有部分元素可以在内部关系下进行比较。例如,复数集中并不是所有的数字都可以比较大小,只有一部分可以比较大小,所以大小是复数集的偏序关系。它被定义为:
设置R是集合A上的二元关系。如果R满足以下条件,则称为RA偏序关系。
Ⅰ 自反,即对任意x∈A,有xRx;
Ⅱ 反对称性(即反对称关系),即对任x, y∈A,若xRy,且yRx,则x = y;
Ⅲ 传递,即任意x, y, z∈A,若xRy,且yRz,则xRz。
全序是指在某种关系下,集合中的任何一对元素都是相互比较的。例如,英语单词在字典中是全序的。它被定义为:
如果我们使用这种关系,集合X上有一个全序关系 ≤ 表示(数学中不小于等于),下面的陈述对 X 中的所有 a、b 和 c 成立:
Ⅰ 如果 a ≤ b 且 b ≤ a,则 a = b (反对称);
Ⅱ 如果 a ≤ b 且 b ≤ c,则 a ≤ c (传递);
Ⅲ a ≤ b 或 b ≤ a(完整性)。
因为完整性本身也包括自反性,所以整个顺序关系必须是部分顺序关系。然而,在满足反对称性和传递性的条件下,部分顺序关系并不满足完整性。例如,自然数集中的排除关系是部分顺序关系,但不是全部顺序关系,因为任何两个自然数都不能相互排除。
分布式系统中各种一致性的本质是讨论各种不同的顺序关系。分布式一致性可分为结果一致性和顺序一致性两种情况。部分顺序和全序表达了顺序的一致性,因此本段的第一句话可以修改为分布式系统中的顺序一致性,其本质是讨论各种不同的顺序关系。构建分布式系统时,并发事件如何构成偏序或全序是面临的挑战之一。
02 -有序与并发
世界/宇宙是一个高度并发的分布式系统。在这个系统中,相关的,不相关的,一起发展。相关的互动需要有序来帮助我们理解/规范它们之间的关系,而不相关的一直在并发。其中,衡量相关关系的逻辑之一是序列。我们可以把时间作为衡量序列的尺子,这个过程被称为一致性。
在计算机范围内,参考文献首先提出了数据一致性问题。随着多处理器系统和并行计算模式的兴起和发展,提出了数据一致性。这里有两种多处理器系统。
(tightly coupled multi-processor system):多个处理器访问相同的集中共享内存。
(loosely coupled multi-processor system):每个处理器都有自己的(本地)内存,可以远程访问其他处理器。
无论是在紧耦合还是松耦合的多处理器系统中,多处理器通过并发访问相同的地址空间进行通信,导致数据一致性问题。
影响分布式系统一致性的维度有两个:一个,另外一个是。
时间维度是指时间系统对分布式系统的直接影响。这种影响主要体现在延迟上。延迟是指多个节点之间的时间值不同。分布式系统需要一个统一的尺子来衡量每个节点的操作,这自然是时间。为了同步多个节点之间的时间,需要用全球时钟校对每个节点的时钟,使分布式系统中的所有节点在时间层面保持同步。然而,同步并不意味着每个节点之间的时间值完全相同,但会有一定的误差。这个误差值越小,就说明该时钟同步系统越精确。例如Google的Truetime系统误差在7ms而通过NTP校对的分布式系统误差为100ms到250ms之间。
事件的顺序维度是指事件的前后顺序,但事件发生后,观察者观察到的结果可能与原来的顺序相反。事实上,事件的顺序也意味着考虑事件之间的逻辑顺序,即事件的顺序与时间密切相关。从观察者的角度来看,对事件顺序的感知。这表明分布式系统的一致性本质是观察者对事件逻辑顺序的感知,但这种感知受到了分布式系统中单个节点根据节点时间系统赋予事件时间的影响(时间的初衷是单调有序的)。
此外,对于分布式数据库,如果是基于封锁技术的,则不需要整体时间。根据整体时间校对每个节点的时间并同步意味着数据库将使用基于时间戳排序的并发访问控制技术来描述不同节点的并发操作之间的顺序关系。如果使用分布式数据库MVCC技术,会因为MVCC该技术本身不考虑事务的顺序,而是需要配合封锁技术或时间戳排序技术。Google的Percolator采用逻辑时间(单调增加的全局事务号)来避免各节点校对和同步时间的问题,因此如果采用类似的方法Percolator对于事务处理机制,基于时间戳的并发访问控制技术可以实现并发事务之间的提交顺序。
如上所述,无论是应用封锁技术还是基于时间戳排序,都试图将相关操作/事件有序化,使相关和非相关操作/事件并发执行。
本文摘自分布式数据库的原理、结构和实践。请注明文章的来源。
直播预告
更精彩的回顾
书讯 |4月书讯(上)| 新的,华章
书讯 |4月书讯(下)| 新的,华章
资讯 |视频时代的大数据:问题、挑战和解决方案
书单 |金三银四求职季,十道腾讯算法真题分析!
干货 |TypeScript 什么是类型?
收藏 |终于有人把Scrapy爬虫框架很清楚
上新 |NLP大牛菲利普科恩机器翻译权威
赠书|金融企业下半年应该如何进行数字经营?
活动 |【向上突破系列】第一期:互联网裁员潮下,去还是留?