分类:分布式系统

ZAB协议和Paxos算法

前言 在上一篇文章Paxos算法浅析中主要介绍了Paxos一致性算法应用的场景,以及对协议本身的介绍;Google Chubby是一个分布式锁服务,其底层一致性实现就是以Paxos算法为基础的;但这篇文件并不是介绍Chubby,而是介绍了一个和Chubby拥有类似功能的开放源码的分布式协调服务Zookeeper,以及Zookeeper数据一致性的核心算法ZAB。 Zookeeper简介 Zookeeper是一个分布式数据一致性的解决方案,分布式应用可以基于它实现诸如数据发布/订阅,负载均衡,命名服务,分布式协调/通知,集群管理,Master选举,分布式锁和分布式队列等功能。Zookeeper致…

阅读全文 »

Paxos算法浅析

前言 在文章2PC/3PC到底是啥中介绍了2PC这种一致性协议,从文中了解到2PC更多的被用在了状态一致性上(分布式事务),在数据一致性中很少被使用;而Paxos正是在数据一致性中被广泛使用,在过去十年里,Paxos基本成为了分布式领域内一致性协议的代名词。Google的粗粒度锁服务Chubby的设计开发者Burrows曾经说过:“所有一致性协议本质上要么是Paxos要么是其变体”。Paxos的提出者LeslieLamport也因其对分布式系统的杰出理论贡献获得了2013年图灵奖。 在介绍Paxos之前,先介绍一下数据一致性到底被用在什么场景中,下面以副本状态机来表述 副本状态机 在分布式环境…

阅读全文 »

2PC/3PC一致性协议

前言 在上一篇文章从ACID到CAP/BASE中我们介绍了CAP理论,其中最重要的一点就是一个分布式系统不可能同时满足一致性、可用性和分区容错性这三个基本需求,最多只能同时满足其中的两项;而一般都会在一致性和可用性之间进行权衡,于是产生了一系列的一致性协议。 在介绍有哪些一致性协议之前,我们先来看看一致性模型 一致性模型 一致性模型大体上可以划分为2个大类:强一致性和弱一致性 弱一致性可以划分为:最终一致性,因果一致性,读你所写一致性,会话一致性,单调读一致性,单调写一致性 其中最常见的两项就是:强一致性和最终一致性 强一致性:新的数据一旦写入,在任意副本任意时刻都能读到新值 最终一致性:当你…

阅读全文 »

从ACID到CAP/BASE

由集中式系统到分布式系统的发展,事务的原则也有原先的ACID发展成了CAP/BASE。 ACID 事务(Transaction)是由一系列对系统中数据进行访问和更新的操作锁组成的一个程序执行逻辑单元(Unit),狭义上的事务特指数据库事务。 事务具有四个特征,分别是原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),简称事务的ACID特性。 原子性:事务必须是一个原子的操作序列单元,要么全部成功,要么全部失败。 一致性:事务的执行不能破坏数据库数据的完整性和一致性,一个事务在执行之前和执行之后,数据库都必须处于一致性状态…

阅读全文 »

Java CAS操作的ABA问题

CAS介绍 比较并交换(compare and swap, CAS),是原子操作的一种,可用于在多线程编程中实现不被打断的数据交换操作,从而避免多线程同时改写某一数据时由于执行顺序不确定性以及中断的不可预知性产生的数据不一致问题。 CAS操作基于CPU提供的原子操作指令实现,各个编译器根据这个特点实现了各自的原子操作函数。来源维基百科: java.util.concurrent包完全建立在CAS之上的,借助CAS实现了区别于synchronouse同步锁的一种乐观锁。 可以看一下AtomicInteger: 其中牵扯到3个值:current,next以及当前内存中的最新值,当且仅当curren…

阅读全文 »