上一篇聊了聊构建分布式系统所面临的困难,这篇将着重讨论构建容错分布式系统的算法与协议.构建容错系统的最佳方法是使用通用抽象,允许应用程序忽略分布式系统中的一些问题.本篇我们先聊一聊线性一致性,以及与线性一致性有关的技术,后续需要了解的分布式协调服务,如:ZooKeeper等,都是基于分布式系统的线性一致性. 1.更强的一致性 大多数分布式数据库至少提供了最终一致性,这意味着如果停止对数据库的写操作并等待一段时间,最终所有读请求将返回相同的值.但是,这是一个非常弱的一致性保证,所谓的一段时间并不确…
第一章相对简单,也么有什么需要记录的内容,主要用到的工具的简介及环境配置,粗略的过一下就行了.下面我们开始第二章的学习 CHAPTER 22.2Python Language Basics, IPython, and Jupyter Notebooks when you first meet the python ,you may be confuse by In [6]: data = {i : np.random.randn() for i in range(7)} In [7]: data…
线性一致性 CAP 什么是CAP CAP的权衡 AP wihtout C CA without P CP without A 线性一致性 etcd中如何实现线性一致性 线性一致性写 线性一致性读 1.客户端的get请求 2.服务端响应读取请求 3.raft中如何处理一个读的请求 如果follower收到只读的消息 如果leader收到只读请求 总结 参考 线性一致性 CAP 什么是CAP 在聊什么是线性一致性的时候,我们先来看看什么是CAP CAP理论:一个分布式系统最多只能同时满足一致性(Co…
一致性算法是分布式系统中最重要的问题之一.表面上看,这似乎很简单,只是让几个节点在某些方面达成一致.在本篇之中,会带大家完整的梳理分布式系统之中的共识算法,来更加深刻的理解分布式系统的设计. 1.原子提交和两阶段提交(2PC) 原子提交防止了数据库处于半更新的状态,这对于需要满足多对象事务和维护次级索引的数据库尤为重要.每个次级索引都是从主数据中分离出来的数据结构,因此,如果修改某些数据,也需要在次级索引中做出相应的更改.通过原子性保证二级索引能够与原数据保持一致. 分布式系统下的原子提交 我们…
分布式数据库会面临着一个独特的挑战,就是数据必须要严格的按照读,写顺序执行.如创建用户,转账,两个潜在的写操作竞态条件必须要确保一个写操作必须在另外一个之前发生.在Cassandra中,使用Paxos协议来实现轻量级的事务来处理并发操作. Paxos协议是用来实现线性一致性,这是实时约束的顺序一致性.线性一致性保证事务的隔离性类似于RDBMS提供的串行level的隔离性.这种类型的事务就是众所周知的compare and set(CAS):副本数据被拿来进行比较,发现有任何数据过期了,就设置为最…
开篇 其实这篇文章我本来想在讲完选举的时候就开始讲线性一致性读的,但是感觉直接讲没头没尾的看起来比比较困难,所以就有了RheaKV的系列,这是RheaKV,终于可以讲一下SOFAJRaft的线性一致性读是怎么做到了的.所谓线性一致性,一个简单的例子是在 T1 的时间写入一个值,那么在 T1 之后读一定能读到这个值,不可能读到 T1 之前的值. 其中部分内容参考SOFAJRaft文档: SOFAJRaft 线性一致读实现剖析 | SOFAJRaft 实现原理 SOFAJRaft 实现原理 - SO…
进入到第五章了,来到了分布式系统之中最核心与复杂的内容:副本与一致性.通常分布式系统会通过网络连接的多台机器上保存相同数据的副本,所以在本篇之中,我们来展开看看如何去管理和维护这些副本,以及这个过程之中会遇到的各种问题. 1.副本 在数据系统之中,我们通常会有这样几个原因来使用副本技术: 保持地理位置接近用户,从而减少延迟(如:Cache,CDN技术) 提高系统的可用性和鲁棒性,即使系统中的某些部分已经失效了,仍然可以对外提供服务.(如:GFS三副本的设计) 通过扩展性来提供读查询,从而增加读取…
坦白说也是机缘巧合,在硕士生阶段进入分布式系统领域学习.无论是大规模存储或计算,其核心也是运用分布式技术利用并行性来解决数据密集型应用的需求.最近开始在啃这本<Designing Data-Intensive Applications>大部头,作者Martin Kleppmann在分布式数据系统领域有着很深的功底,并在这本书中完整的梳理各类纷繁复杂设计背后的技术逻辑,不同架构之间的妥协与超越,很值得开发人员与架构设计者阅读. 很可惜的是国内目前并没有对应的中文版本,这个系列算是一个读书感悟,同…
接着上一篇的内容,我们继续来梳理分布式系统之中的副本机制与副本一致.上文我们聊到了在可用性与一致性之间的一个折中的一致性等级:最终一致性.我们顺着上篇的内容,由用户来分析一致性等级. 1. 客户端的困扰 上篇文章我们提到了数据系统常用的模型,当提交新数据时,必须将它发送给Leader节点,但是当用户查询数据时,可以从一个Follower节点读取该数据. 这样的模型使十分适合Web应用的读多写少的特点. 读写一致性 但是倘若Leader与Follower之间以异步的方式复制的话,会存在一些问题.如…
终于来到这本书最后的一章了<Designing Data-Intensive Applications>大部头,这本书应该是我近两年读过最棒的技术书籍.作者Martin Kleppmann帮助我们梳理了数据系统的纷繁复杂的技术逻辑,在这本书的最后,他将带领我们瞭望数据系统的未来,虽然预测未来是一件很主观的事情,但是,立足于现在去展望未来是可能的事情.所以现在,扬帆起航,让咱们来一起看看作者 Martin Kleppmann 眼中数据系统的未来. 1.因地制宜的工具 对于任何给定的数据问题,总会…