点击上方“服务端思维”,选择“设为星标”

回复”669“获取独家整理的精选资料集

回复”加群“加入全国服务端高端社群「后端圈」

CAP原则

在分布式系统要满足CAP原则,一个提供数据服务的存储系统无法同时满足:数据一致性、数据可用性、分区耐受性。

C数据一致性:所有应用程序都能访问到相同的数据。
A数据可用性:任何时候,任何应用程序都可以读写访问。
P分区耐受性:系统可以跨网络分区线性伸缩。(通俗来说就是数据的规模可扩展)
在大型网站中通常都是牺牲C,选择AP。为了可能减小数据不一致带来的影响,都会采取各种手段保证数据最终一致。

  • 数据强一致:各个副本的数据在物理存储中总是一致的。

  • 数据用户一致:数据在物理存储的各个副本可能是不一致的,但是通过纠错和校验机制,会确定一个一致的且正确的数据返回给用户。

  • 数据最终一致:物理存储的数据可能不一致,终端用户访问也可能不一致,但是一段时间内数据会达成一致。

一致性算法

  • 使一组服务器在一个值上达成一致,所以活跃的特征在于最终每个服务器都可以决定一个值。

  • 通过值的一致能够实现对同一个数据的请求会让同一个服务器来处理。

  • Paxos和Raft都是通过选取master来实现多节点下值的一致性,从而借助一致性hash算法来分配请求。

一致性Hash算法
一致性Hash算法可以根据不同的属性参数(通常是IP和端口号),生成一串不相同的Hash值,并将Hash值转换成0-2^32-1的整数,
不同范围的值由不同服务器进行处理。(B-C之间的由B处理)。

Raft算法和Paxos算法

Raft算法是在Paxos算法的基础上的进行优化。
Raft在Paxos的基础上主要做了两个方向的优化:
1.将复杂的分布式共识问题拆分成领导选举、日志复制和安全性三个问题
2.压缩状态空间:相对于Paxos施加了更合理的限制,减少了系统状态过多而产生的不确定因素。

领导选举(具体以zookeeper举例)
其基本的特性有:

  • zookeeper在配置集群时节点数不可小于3

  • 节点只有获得半数以上的投票才能当选Leader

  • zookeeper在启动时会通过广播机制来把投票结果告诉其他的节点

  • zookeeper在启动时首先会给自己投票,然后与其他已启动的节点进行通信,通过比较id从而判断是否能获取其他节点的投票

zookeeper在选举过程中的角色:领导者、跟随者、观察者、竞选者

日志复制
在共识算法中,所有服务器节点都会包含一个有限状态自动机,名为复制状态机(replicated state machine)。每个节点都维护着一个复制日志(replicated logs)的队列,复制状态机会按序输入并执行该队列中的请求,执行状态转换并输出结果。可见,如果能保证各个节点中日志的一致性,那么所有节点状态机的状态转换和输出也就都一致。

可见,日志由一个个按序排列的entry组成。每个entry内包含有请求的数据,还有该entry产生时的领导任期值。每个节点上的日志队列用一个数组log[]表示。

领导节点选举出来后,集群就可以开始处理客户端请求了。当客户端发来请求时,领导节点首先将其加入自己的日志队列,再并行地发送AppendEntries RPC消息给所有跟随节点。最终实现节点数据的一致性。

安全性
Raft安全保障机制有5种:

  • 选举安全性:节点要3个以上,避免“脑裂”的方式

  • 领导者只追加:客户端发出的请求都是插入领导者日志队列的尾部,没有修改或删除的操作。

  • 日志匹配:每条AppendEntries都会包含最新entry之前那个entry的下标与任期值,如果跟随节点在对应下标找不到对应任期的日志,就会拒绝接受并告知领导节点。(避免追随者故障,导致数据不一致)

  • 领导者完全性:如果有一条日志在某个任期被提交了,那么它一定会出现在所有任期更大的领导者日志里。(master会优先获取日志的更新)

  • 状态机安全性:如果一个节点已经向其复制状态机应用了一条日志中的请求,那么对于其他节点的同一下标的日志,不能应用不同的请求。(避免master宕机时,重新选举,导致部分节点数据不一致)

Raft算法和Paxos算法在分布式中的使用

Consul vs Eureka vs Zookeeper

注:CAP: 数据一致性、数据可用性、分区耐受性
AP: 牺牲强一致性,部分节点宕机,不会影响正常工作的节点。
CP: 牺牲数据可用性,为了保证数据的一致性,当一台机器出现故障时,所有节点的数据都不能使用。

— 本文结束 —

● 漫谈设计模式在 Spring 框架中的良好实践

● 颠覆微服务认知:深入思考微服务的七个主流观点

● 人人都是 API 设计者

● 一文讲透微服务下如何保证事务的一致性

● 要黑盒测试微服务内部服务间调用,我该如何实现?

关注我,回复 「加群」 加入各种主题讨论群。

对「服务端思维」有期待,请在文末点个在看

喜欢这篇文章,欢迎转发、分享朋友圈

在看点这里

一致 先验分布 后验分布_分布式下的数据一致性问题相关推荐

  1. 一致 先验分布 后验分布_分布式事务常见解决方案与最终一致性

    小编推荐:互联网大背景下,微服务盛行,平时开发中难免会遇到分布式事务问题.大家经常会听到CAP原理,即一致性(Consistency).可用性(Availability).分区容错性(Partitio ...

  2. 一致 先验分布 后验分布_「分布式技术」分布式事务最终一致性解决方案,下篇...

    各位志同道合的朋友们大家好,我是一个一直在一线互联网踩坑十余年的编码爱好者,现在将我们的各种经验以及架构实战分享出来,如果大家喜欢,就关注我,一起将技术学深学透,我会每一篇分享结束都会预告下一专题 上 ...

  3. 一致 先验分布 后验分布_浅谈Loki分布式架构中的一致性哈希

    云原生小白 看到上面蓝色字了么?关注下吧! Loki在分布式部署的模式下,保存Ingester服务的状态主要有3个渠道,分别是etcd.consul和基于gossip协议的memberlist.不管L ...

  4. 一致 先验分布 后验分布_遇到分布式一致性问题,咋整?

    分布式一致性是一个常见的问题,比如在本地表中插入了一条记录,同时又远程调用了一个服务,很有可能插入记录成功了,但远程调用超时了,亦或本地记录插入成功了,此时刚好机器重启了......我们遇到的实际问题 ...

  5. 一致 先验分布 后验分布_先验分布、后验分布、似然估计这几个概念是什么意思,它们之间的关系是什么?...

    作为吃瓜群众,尝试回答下. 用"瓜熟蒂落"这个因果例子,从概率(probability)的角度说一下, 先验概率,就是常识.经验所透露出的"因"的概率,即瓜熟的 ...

  6. 一致 先验分布 后验分布_先验概率、似然函数与后验概率

    先验概率 Prior probability 在贝叶斯统计中,先验概率分布,即关于某个变量 p 的概率分布,是在获得某些信息或者依据前,对 p 的不确定性进行猜测.例如, p 可以是抢火车票开始时,抢 ...

  7. 一致 先验分布 后验分布_先验概率和后验概率最简单理解

    先验概率:根据客观事实和统计频率得出的概率. 后验概率:在事情发生后,在事情发生这个事实下,判断导致这个事情发生的不同原因的概率.后验概率是根据先验概率推断而来的. 假设:根据调查问卷(客观事实)显示 ...

  8. redis 亿级查询速度_亿级流量系统架构之如何保证百亿流量下的数据一致性(上)...

    欢迎关注头条号:石杉的架构笔记 周一至周五早八点半!精品技术文章准时送上!!! 目录 一.前情提示 二.什么是数据一致性? 三.一个数据计算链路的梳理 四.数据计算链路的bug 五.电商库存数据的不一 ...

  9. mysql分布式事务wcf_[转载]WCF系列_分布式事务(下)

    浏览到chnking的WCF的分布式事务处理不错,转载过来分享一下.1. WCF分布式事务例子这里也用转账的例子说事. 用户在系统A和系统B都有账户,账户间的资金可以互转,系统A的资金减少多少,系统B ...

  10. 实战微博互动预测之一_问题分析 以及 分布式下的事件驱动机制(Pub与Sub模式)

    实战微博互动预测之一_问题分析 2017年12月08日 13:21:04 xieyan0811 阅读数:2390 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csd ...

最新文章

  1. Silverlight Blend动画设计系列六:动画技巧(Animation Techniques)之对象与路径转化、波感特效...
  2. php学习day9---数据库的基本知识
  3. python 两个列表相互映射_Python基础 — 10分钟学习函数式Python
  4. as f报错 open with_一篇文章了解python常见内置异常报错
  5. slf4j 和 log4j的关系及合用Maven配置
  6. 对象创建过程之二(类加载器)
  7. 电商常用同义词库_【福利】不可错过的电商设计神器,提高工作效率
  8. linux怎么使多条命令同时执行
  9. JQ中使用FormData+Ajax发送请求及使用express接收处理FormData数据
  10. 简洁UI好玩的文字转换emoji表情微信小程序支持句子词语转换_源码
  11. 西门子s7 计算机通讯,西门子s7-200 plc通讯连不上怎么办?
  12. python访问文件被拒绝_python – uWSGI服务器日志…权限被拒绝读取文件…哪个文件?...
  13. 02虚幻编辑器各部分功能详解
  14. ArcGIS空间数据分析实用工具——方向分布(标准差椭圆)
  15. 论文阅读:Improved Denoising Diffusion Probabilistic Models
  16. 关于组装电脑注意事项
  17. 超简单看懂匈牙利算法
  18. 书生云签10亿元、EB级订单,中国超融合迎来春天
  19. [翻译Pytorch教程]NLP部分:使用TorchText进行文本分类
  20. C++学习 - lambada表达式

热门文章

  1. pandas中merge()函数的用法详解
  2. Unity工程导入到AndroidStudio的一些注意事项
  3. 创建一个SpringBoot项目(IDEA版本,保姆级教程)
  4. ORM的个人简单理解以及持久化和持久层的简单理解、Hibernate的简单理解,mybatis 的好处通俗易懂
  5. python人脸识别程序如何嵌入到app_开源|手把手教你用Python进行人脸识别(附源代码)...
  6. nopi 缩小字体填充_20202南雄高空广告字体安装施工方案设备先进
  7. linux、mysql、nginx、tomcat 环境下压力测试的主要调试参数
  8. 利用云服务器搭建内网映射服务器
  9. 【转】char码值对应列表大全
  10. VMware OSP对比VMware Tools:简化Linux驱动更新