深入浅出分布式系统架构及算法
文章平均质量分 90
为读者提供详尽的分布式系统架构及算法,拒绝枯燥难懂没有干货的文章!
孙飞 Sunface
一枚略懂Rust的全栈程序员,喜欢写作&编程
展开
-
Raft算法国际论文全翻译
最近在开发强一致性的分布式算法,因此需要深入理解下Raft算法,这里对Raft论文进行了翻译,留以备用 - Sunface. 英文版论文:https://ramcloud.atlassian.net/wiki/download/attachments/6586375/raft.pdf Raft 是一种通过日志复制来实现的一致性算法,提供了和(多重)Paxos 算法相同的功能和性能,但是它的翻译 2016-12-15 16:43:46 · 19441 阅读 · 9 评论 -
通过一个大型项目来学习分布式算法(6)
图7:三个策略的分区和key的位置。甲,乙,丙描述三个独立的节点,形成keyk1在一致性哈希环上的首选列表(N=3)。阴影部分表示节点A,B和C形式的首选列表负责的keyrangee。黑色箭头标明各节点的Token的位置。策略3:每个节点Q/S个Token,大小相等的分区:类似策略2,这一策略空间划分成同样大小为Q的散列分区,以及分区布局(placement of partition)与划分方法(原创 2016-03-11 17:07:48 · 2563 阅读 · 1 评论 -
通过一个大型项目来学习分布式算法(5)
这也引入了一个耐用性漏洞(vulnerability)窗口:即使它只是在少数几个节点上持久化了但写入请求成功返回到客户端。传统的观点认为,耐用性和可用性关系总是非常紧密(hand-in-hand手牵手^-^)。但是,这并不一定总是真的。例如,耐用性漏洞窗口可以通过增加W来减少,但这将增加请求被拒绝的机率(从而减少可用性),因为为处理一个写请求需要更多的存储主机需要活着。被好几个Dynamo实例采用原创 2016-03-11 17:06:25 · 2051 阅读 · 0 评论 -
通过一个大型项目来学习分布式算法(4)
使用暗示移交,Dynamo确保读取和写入操作不会因为节点临时或网络故障而失败。需要最高级别的可用性的应用程序可以设置W为1,这确保了只要系统中有一个节点将key已经持久化到本地存储 , 一个写是可以接受(即一个写操作完成即意味着成功)。因此,只有系统中的所有节点都无法使用时写操作才会被拒绝。然而,在实践中,大多数Amazon生产服务设置了更高的W来满足耐久性极别的要求。对N, R和W的更详细的配置原创 2016-03-11 17:05:42 · 2330 阅读 · 0 评论 -
通过一个大型项目来学习分布式算法(3)
图2:Dynamo的划分和键的复制。一个负责存储一个特定的键的节点列表被称为首选列表(preference list)。该系统的设计,如将4.8节中解释,让系统中每一个节点可以决定对于任意key哪些节点应该在这个清单中。出于对节点故障的考虑,首选清单可以包含起过N个节点。请注意,因使用虚拟节点,对于一个特定的key的第一个N个后继位置可能属于少于N个物理所节点(即节点可以持有多个第一个N个位置)。原创 2016-03-11 17:03:44 · 2135 阅读 · 0 评论 -
通过一个大型项目来学习分布式算法(2)
对称性:每个Dynamo节点应该与它的对等节点(peers)有一样的责任;不应该存在有区别的节点或采取特殊的角色或额外的责任的节。根据我们的经验,对称性(symmetry)简化了系统的配置和维护。去中心化:是对对称性的延伸,设计应采用有利于去中心化而不是集中控制的技术。在过去,集中控制的设计造成系统中断(outages),而本目标是尽可能避免它。这最终造就一个更简单,更具扩展性,更可用的系统。异质原创 2016-03-11 17:01:34 · 4349 阅读 · 0 评论 -
通过一个大型项目来学习分布式算法(1)
Dynamo:Amazon的高可用性的键-值存储系统摘要 巨大规模系统的可靠性是我们在Amazon.com,这个世界上最大的电子商务公司之一,面对最大的挑战之一,即使最轻微的系统中断都有显着的经济后果并且影响到客户的信赖。Amazon.com平台,它为全球许多网站服务,是实现在位于世界各地的许多数据中心中的成千上万的服务器和网络基础设施之上。在这一规模中,各种大大小小的部件故障持续不断发生,管理持原创 2016-03-11 16:59:37 · 4656 阅读 · 0 评论 -
多版本并发控制(MVCC)在实际项目中的应用
最近项目中遇到了一个分布式系统的并发控制问题。该问题可以抽象为:某分布式系统由一个数据中心D和若干业务处理中心L1,L2 … Ln组成;D本质上是一个key-value存储,它对外提供基于HTTP协议的CRUD操作接口。L的业务逻辑可以抽象为下面3个步骤:read: 根据keySet {k1, … kn}从D获取keyValueSet {k1:v1, … kn:vn}do: 根据keyValueS原创 2016-03-11 16:52:30 · 6093 阅读 · 1 评论