分布式系统词汇表。
建筑(30), 基础设施(34)我已经花了很少的时间,最近讨论了分布式系统如何失败和防止这些失败的策略,并且缺乏共享词汇对高带宽通信构成了重大障碍。
鉴于一些Myky个人计划在下一点上写下更多,我已经写了我发现最有效的词汇。希望这将在自己的权利中有用,但在最糟糕的情况下,我将使用它来避免重复水板定义前进!
想要原始来源吗?当然!
- 十二年之后:“规则”的改变方式,酿酒师
- 收获,产量和可扩展的耐受系统,狐狸,酿酒师
- 交易概念:美德和局限性, 灰色的
- 基础:酸替代品,Pritchett.
- 保持冷静:分布式一致性很容易,Hellersein,Alvaro
- 最终一致,Vogel.
- 更论文值得读书
帽:一致性,可用性,分区
关于分布式系统的任何讨论都以讨论的讨论帽定理争论您只能有两个属性:
一致性(c)等同于具有数据的单一最新副本;高的可用性(a)该数据(更新);和对网络的宽容分区(p)。
一世t’s useful to note that the original authors themselves have since emphasized that “‘2 of 3’ is missleading”, particularly because (1) production systems make numerous distinct choices between consistency and availability (not one overall choice), and (2) “all three properties are more continuous than binary.”
一致性和可用性的连续性最有用的探索之一收获,产量和可扩展的耐受系统。
收获和产量
狐狸和啤酒员写道收获产量和可扩展的耐受系统它改进了上限的想法,以更好地解决其属性的非二进制本质。
- 屈服是完成请求的概率(例如,您在谈论可用性时通常衡量的可能性),
- 收成是相对于理想情况下应可用的量的响应中的数据的分数。
使用这个词汇表,我们可以以更细致的方式讨论可用性权衡,例如,如果节点不可用,则始终继续返回搜索引擎的结果,但如果节点不可用,则会被描述为“收获降级”。
它还介绍了概念正交机制,主张倡导删除系统之间的所有运行时接口,而是依赖于编译时接口,使得它们独立运行。一个真实的榜样可以在编译时构建您最常见的内容的静态缓存,并定期重建和运送它,但不会尝试实时更新缓存。(实际上是该博客如何运作,每个实例都具有其自身完整的数据快照,它定期提取。)
酸
酸是由吉姆格雷的描述交易概念:美德和局限性在'81,并描述交易的四个基本组件:
- 一种TOMICITY - 发生所有变化或者没有发生
- Consistency - 事务无法将数据库带入无效状态(请注意,这与CAP Sense中的一致性相同)
- 一世solatation - 并发执行不会更改结果
- D.阻碍 - 效果存活失败
这是接近的,后跟MySQL和PostgreSQL等大多数SQL数据库,以及一些但远离所有NoSQL数据库(例如neo4j.遵循酸)。
根据
根据是酸的替代品:
碱是径向相对的酸。其中酸是悲观的,并且在每次操作结束时强制一致性,基础是乐观的,接受数据库一致性将处于通量状态。
基础中的字母对应于:
- B.自如一种Vailable - 通过优先收获产量提供CAP的可用性
- S.OFT状态 - 由于状态发生变化,状态 - 状态正在随着时间的变化而发展,在一个时间点没有保证正确的版本
- E.通风一致性 - 如果更改停止,状态最终将保持一致
许多NoSQL数据库遵循此模型,例如Cassandra,多元化那发电机那riak., 还有很多。
有关更多细节,致强大的分布式系统Brewer演示是另一个良好的资源。
冷静的
我最近听到了一个关于平静的信息,这是Consistenty.一种S.L.ogical.monotonicity,并详细说明保持冷静:分布式一致性很容易。这是核心定理是:
如果只有在单调是单调的情况下,程序只有一个符合的协调分布式实施。
阿德里安科莱尔保持平静的概要很棒的阅读(也是他的摘要)。
可用性配置
可用性配置:
- 主动活跃意味着将正确处理路由到任何节点的请求。
- 主动被动意味着请求将始终路由到单个活动节点,但如果当前活动节点变得劣化,则可以快速选取新的活动节点。
使用“热”,“冷”和“温暖”的其他版本有时会与“热”表示“活跃”和“冷”意义“被动”。但是,有时候相同的术语用于描述数据检索频率,在“冷库”的意义上亚马逊S3冰川对于不经常访问的数据。
为避免混淆,我建议使用“活动”和“被动”描述可用性属性,并使用“热”,“温暖”和“冷”来描述数据检索的频率。
算法
经常参考算法:
- paxos.是原始分布式共识算法,使用修改版本胖乎乎还有许多人。(ZookeeperZab.也类似于paxoS。)
- 筏是一种更简单的共识算法。使用领事
- 游泳是用于组成员资格的分布式八卦协议(例如,用于确定缓存环等成员)
- 两阶段提交是原子分布式提交的协议
一致性水平
来自Werner Vogel的一致性水平最终一致:
- 强一致性- 更新完成后,所有进一步的操作都正确使用新值
- 弱径向- 更新完成后的操作可能无法正确使用新值
- 最终一致性- 如果对对象没有进行新的更新,则在将来的某个时间点将返回正确的值
- 不一致的窗口- 将返回更新和保证正确值的系统之间的句点
- 休闲一致性- 一旦将更新的版本传达给进程,它保证不使用旧版本
- 单调读数一致- 类似于休闲一致性,但从接收过程的角度来看:一旦进程已经看到了一个版本,它将永远不会使用以前的版本
- 单调写一致性- 在进程中写入序列化
- 读写 - 写一致性- 写回返回更新版本后读取
- 会话一致- 在给定会话中写入后始终正确读取
- 读水平那写级别和副本水平是涉及读取,写入和复制的分布式存储系统中的节点数量。这发电机纸在一些细节描述了这种方法,它也由Cassandra和MongoDB(许多其他人)大量用
解决冲突
分布式系统冲突解决机制:
- 最后一位作家赢得了- 最近写的版本是正确的版本
- 阅读修复- 在读取时间固定的不一致,缩小读取
- 写修理- 在写入时固定的不一致,写入减慢
- 异步修复- 不知何故,在读取或写入操作内不同步地运行频段的不一致
- 矢量钟表创建一个逻辑时钟来协调写入,描述发电机纸
其他的东西
- 单点失败(SPOF)一个导致依赖服务失败的单个组件
- 故障域名是一组共享SPOF的组件
- 容错描述了一个在相同级别的多个故障域的系统
- 复制流媒体从一个过程到另一个过程
- 同步复制在副本中同时在主要(例如MySQL的情况下半同步复制。通常非常非常慢
这几乎不是一系列完整的术语,在分布式系统中有非常非常多的条目,我将继续更新并随着时间的推移迭代这篇文章。