时间、顺序与一致性
一、背景
分布式架构下,需要协调不同节点之间的先来后到,但不同节点又没有统一承认的时间标准,于是创造了网络时间协议(NTP)试图来解决不同节点之间的时间标准,但是NTP本身表现并不如人意,所以又构造出了逻辑时钟,最后在逻辑时钟的基础上改进为了向量时钟
二、时间标准分类
1. 网络时间协议(NTP)
一种分层的时间同步体系结构,其中有一个或多个时间服务器作为参考,其他计算机系统通过NTP协议与这些时间服务器进行通信,以校准和调整自己的系统时间。
NTP面临的问题:
节点间时间不同步
硬件时钟漂移
线程可能休眠
操作系统休眠
硬件休眠
2. 逻辑时钟
它不是真实的物理时钟,而是一种用于确定事件发生顺序的抽象时钟。
逻辑时钟通常由一个计数器组成,每个事件都会更新计数器的值,通过比较不同节点上的逻辑时钟值,可以确定事件的先后顺序。
逻辑时钟的两种主要的类型:Lamport时钟和向量时钟。
2.1 Lamport时钟
每个进程在发送消息时都会将自己的时钟值附加到消息上,接收到消息的进程会根据接收到的消息和自己的时钟值来更新自己的时钟,通过比较不同进程的时钟值来确定事件的先后关系。
2.2 向量时钟
每个进程都维护一个向量,该向量的长度等于进程的数量,当进程发送消息时,它会将自己的向量值附加到消息上,接收到消息的进程会根据接收到的消息和自己的向量值来更新自己的向量,通过比较不同进程的向量值,可以确定事件的先后顺序。
三、解决时间问题的意义
通过衡量时间的工具,解决顺序问题。
整个分布式的理论基础就是如何协商不同节点的一致性问题,而顺序则是一致性理论的基本概念。
四、一致性理论
1. 强一致性ACID
单机环境下我们对传统关系型数据库有苛刻的要求,由于存在网络的延迟和消息丢失,ACID便是保证事务的四大原则:
-
- Atomicity:原子性,一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。
- Consistency:一致性,在事务开始之前和事务结束以后,数据库的完整性没有被破坏。
- Isolation:隔离性,数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。
-
- Durabilit:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
分布式环境下,我们无法保证网络的正常连接和信息的传送,于是发展出了CAP/FLP/DLS这三个重要的理论
2. 分布式一致性CAP(Consistency, Availability, Partition tolerance)
CAP理论指出,在一个分布式系统中,无法同时满足以下三个属性:
-
一致性(Consistency):分布式系统的所有节点在任何时刻都具有相同的数据副本。即,当一个节点对数据进行更新后,其他节点能够立即读取到最新的数据。保持一致性可以确保数据的准确性和完整性。
-
可用性(Availability):分布式系统在任何时刻都能够对外提供正常的服务和响应。即,系统能够处理来自客户端的读写请求,并返回有效的响应。保持可用性可以确保系统的稳定性和可靠性。
-
分区容忍性(Partition tolerance):分布式系统能够在网络分区或节点故障等情况下继续运行和提供服务。即,分布式系统能够将数据和请求进行合理的分区和复制,以应对网络故障或节点失效的情况。
-
根据CAP理论,当发生网络分区或故障时,分布式系统只能满足其中的两个属性,无法同时满足所有三个属性。这是由于在分布式系统中,数据的一致性和可用性往往是相互冲突的,而分区容忍性是必须要保证的。
3. FLP(Fischer Lynch Paterson 不可能性定理)
FLP定理证明了在异步消息传递的分布式系统中,不存在一个确定性的分布式算法能够在发生节点故障的情况下保证一致性的达成。
4. DLS(Distributed Locking Service)
DLS是一种分布式锁服务,用于协调分布式系统中对共享资源的访问控制,实现分布式环境下的互斥访问和一致性保证。它提供了一种机制,允许多个节点在并发访问共享资源时进行互斥控制,以防止数据访问冲突。
在分布式系统中,由于节点之间的并行执行和网络延迟等因素,可能同时有多个节点试图访问同一共享资源,DLS提供了一种机制,确保只有一个节点能够获取到锁,从而避免数据的不一致和冲突。
DLS通常包含以下关键组件和功能:
-
锁管理:DLS维护一个锁管理器,用于管理所有的锁。节点可以申请锁、释放锁、查询锁的状态等操作。
-
锁机制:DLS通过一定的算法和协议,确保只有一个节点能够获取到锁。常见的机制包括基于时间戳或基于节点优先级的锁。
-
一致性保证:DLS在提供分布式互斥访问的同时,还需要保证一致性。即,在一个节点获取到锁之后,其他节点需要等待或协调自己的操作,以避免数据冲突和不一致。
-
容错和可靠性:DLS需要考虑节点故障和网络故障等情况,提供容错机制和可靠性保证,以确保系统的稳定运行。
-
5. BASE(Basically Available, Soft state, Eventually consistent 弱一致性/最终一致性)
BASE是一种分布式系统设计原则,指基本可用(Basically Available)、软状态( Soft State)、最终一致性( Eventual Consistency),用于解决CAP理论中的一致性与可用性之间的权衡问题,强调最终一致性。
BASE原则的核心思想是:
-
基本可用:系统必须在面临网络故障、节点故障或负载过高等异常情况下,允许损失部分可用性,即保证核心可用,能够继续处理部分请求。
-
柔性状态:系统中的数据可能会在一段时间内保持不一致的状态,而不要求强一致性。系统允许数据的延迟更新和异步复制,以提高系统的可用性和性能。
-
最终一致性:系统中的所有数据副本经过一定时间后,最终会达到一致的状态,但不要求实时的强一致性。弱一致性和强一致性相反,最终一致性是弱一致性的一种特殊情况。
-
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战