
数据结构和算法
文章平均质量分 93
林木森^~^
这个作者很懒,什么都没留下…
展开
-
Quorum NWR算法
不知道你在工作中有没有遇到这样的事儿:你开发实现了一套 AP 型的分布式系统(我在 04 讲提到了 AP 型系统的特点,你可以回顾一下),实现了最终一致性。业务也接入了,运行正常,一起看起来都那么美好。可是,突然有同事说,我们要拉这几个业务的数据做实时分析,希望数据写入成功后,就能立即读取到新数据,也就是要实现强一致性( Werner Vogels 提出的客户端侧一致性模型,不是指线性一致性),数据更改后,要保证用户能立即查询到。这时你该怎么办呢?首先你要明确最终一致性和强一致性有什么区别原创 2020-05-26 21:40:14 · 948 阅读 · 0 评论 -
Gossip协议 详解
我们之前讲的二阶段提交协议和 Raft 算法,它们都需要全部节点或者大多数节点正常运行,才能稳定运行。假如我们希望自己的系统能在极端情况下(比如集群中只有一个节点在运行)也能运行.我们要怎么办呢?我们可以通过 Gossip 协议实现这个目标。Gossip 协议,顾名思义,就像流言蜚语一样,利用一种随机、带有传染性的方式,将信息传播到整个网络中,并在一定时间内,使得系统内的所有节点数据一致。对你来说,掌握这个协议不仅能很好地理解这种最常用的,实现最终一致性的算法,也能在后续工作中得心应手地实现数据原创 2020-05-26 21:28:11 · 11315 阅读 · 0 评论 -
一致哈希算法详解
学完前面几讲后,有些同学可能有这样的疑问:如果我们通过 Raft 算法实现了 KV 存储,虽然领导者模型简化了算法实现和共识协商,但写请求只能限制在领导者节点上处理,导致了集群的接入性能约等于单机,那么随着业务发展,集群的性能可能就扛不住了,会造成系统过载和服务不可用,这时该怎么办呢?其实这是一个非常常见的问题。在我看来,这时我们就要通过分集群,突破单集群的性能限制了。说到这儿,有同学可能会说了,分集群还不简单吗?加个 Proxy 层,由 Proxy 层处理来自客户端的读写请求,接收到读写请求原创 2020-05-26 21:12:04 · 442 阅读 · 0 评论 -
Raft算法详解(三)解决成员变更的问题
在日常工作中,可能会遇到服务器故障的情况,这时就需要替换集群中的服务器。如果 遇到需要改变数据副本数的情况,则需要增加或移除集群中的服务器。总的来说,在日常工 作中,集群中的服务器数量是会发生变化的。讲到这儿,也许你会问:“Raft 是共识算法,对集群成员进行变更时(比如增加 2 台服务器),会不会因为集群分裂,出现 2 个领导者呢?”在我看来,的确会出现这个问题,因为 Raft 的领导者选举,建立在“大多数”的基础之 上,那么当成员变更时,集群成员发生了变化,就可能同时存在新旧配置的 2 个“大多数”转载 2021-01-10 17:58:17 · 798 阅读 · 0 评论 -
Raft 算法详解(二)日志复制
在 Raft 算法中,副本数据是以日志的形式存在的,领导者接收到来自客户端写请求后,处 理写请求的过程就是一个复制和提交日志项的过程。那 Raft 是如何复制日志的呢?又如何实现日志的一致的呢?这些内容是 Raft 中非常核心 的内容,首先,咱 们先来理解日志,这是你掌握如何复制日志、实现日志一致的基础。如何理解日志?刚刚我提到,副本数据是以日志的形式存在的,日志是由日志项组成,日志项究竟是什么样 子呢?其实,日志项是一种数据格式,它主要包含用户指定的数据,也就是指令(Command), 还包含一些原创 2020-05-24 21:34:32 · 2235 阅读 · 1 评论 -
Raft 算法详解(一)领导者选举
Raft 算法属于 Multi-Paxos 算法,它是在兰伯特 Multi-Paxos 思想的基础上,做了一些简 化和限制,比如增加了日志必须是连续的,只支持领导者、跟随者和候选人三种状态,在理 解和算法实现上都相对容易许多。除此之外,Raft 算法是现在分布式系统开发首选的共识算法。绝大多数选用 Paxos 算法的 系统(比如 Cubby、Spanner)都是在 Raft 算法发布前开发的,当时没得选;而全新的系统大多选择了 Raft 算法(比如 Etcd、Consul、CockroachDB)。对你原创 2020-05-24 15:55:43 · 4079 阅读 · 2 评论 -
Poxos算法详解(二)
经过上篇文章的学习,你应该知道,Basic Paxos 只能就单个值(Value)达成共识,一旦遇到为一系列的值实现共识的时候,它就不管用了兰伯特并没有把 Multi-Paxos 讲清楚,只是介绍了大概的思想,缺少算法过程 的细节和编程所必须的细节(比如缺少选举领导者的细节)。这也就导致每个人实现的 Multi-Paxos 都不一样。不过从本质上看,大家都是在兰伯特提到的 Multi-Paxos 思想上补充细节,设计自己的 Multi-Paxos 算法,然后实现它(比如 Chubby 的 Multi-Pa原创 2020-05-24 14:09:45 · 1766 阅读 · 1 评论 -
Paxos 算法详解(一)
前言提到分布式算法,就不得不提 Paxos 算法,在过去几十年里,它基本上是分布式共识的代 名词,因为当前最常用的一批共识算法都是基于它改进的。比如,Fast Paxos 算法、 Cheap Paxos 算法、Raft 算法、ZAB 协议等等。兰伯特提出的 Paxos 算法包含 2 个部分:一个是 Basic Paxos 算法,描述的是多节点之间如何就某个值(提案 Value)达成共 识;另一个是 Multi-Paxos 思想,描述的是执行多个 Basic Paxos 实例,就一系列值达成共 识原创 2020-05-24 13:52:59 · 26333 阅读 · 8 评论 -
红黑树
一、简介红黑树二叉数的一种,满足二叉树的所有性质,并具有自己的特征红黑树的特征每个结点要么是红的要么是黑的。根结点是黑的。每个叶结点(叶结点即指树尾端NIL指针或NULL结点)都是黑的。如果一个结点是红的,那么它的两个儿子都是黑的。对于任意结点而言,其到叶结点树尾端NIL指针的每条路径都包含相同数目的黑结点正是红黑树的这5条性质,使一棵n个结点的红黑树始终保持了l...原创 2019-12-21 15:56:21 · 302 阅读 · 0 评论