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: 牺牲数据可用性,为了保证数据的一致性,当一台机器出现故障时,所有节点的数据都不能使用。

最后

如果觉得本文对你有帮助的话,不妨给我点个赞,关注一下吧!

资料免费领取方式:点击这里

tps://gitee.com/vip204888/java-p7)**

[外链图片转存中…(img-oyLzmMyL-1625742233774)]

Java开发知识体系!我用2个月的时间破茧成蝶相关推荐

  1. 中高级Java开发应该要了解!我用2个月的时间破茧成蝶,醍醐灌顶!

    前言 今年互联网形式依旧严峻,再次爆发几次大规模裁员潮.我决定把这篇文章分享出来帮助那些对前途感到迷茫的朋友.根据粉丝投稿的真实经历改编 在现在这个浮躁而又拜金的社会,我相信很多人做技术并非出于热爱, ...

  2. 万达保安“苦修Java”,7个月破茧成蝶,如今薪资翻了4倍

    前言 高考毕业后,自己因为高考失利,与理想大学失之交臂,当了两年兵回来就在万达做起了一名保安,不到1年就坐上了管理层的位置.但我当年一直想着读计算机专业,以后做一名程序员,现在的状态也不是想要的. 人 ...

  3. Java开发知识体系!javadruid数据库连接池

    主要内容 本文是从大型互联网系统的应用角度探讨分布式缓存的.本文站在原理.框架.架构.案例等多个视角对分布式缓存进行了探讨. 互联网系统随着容量需求的陡增,许多看似简单的存储类场景都面临着巨大的容量问 ...

  4. 30 张Java 的思维导图,全面梳理构建 Java 的知识体系

    小编这几天在网上收集了 30 张大佬制作的 Java 知识点总结的思维导图,整理成了这篇文章分享给大家,帮助大家梳理构建 Java 的知识体系. 这份思维导图包含从Java的简介.主要特性.发展历史到 ...

  5. Java基础知识体系_计算机与java

    Java基础知识体系 (一).计算机与java (二).变量与类型 (三).运算符 (四).流程控制 (五).数组 (一).计算机与java 1,计算机:硬件+软件 硬件:客观存在的各种计算机相关设备 ...

  6. Java开发知识之Java面相对象

    Java开发知识之Java面相对象上 一丶什么是面相对象 了解什么什么是面相对象.那么首先要了解什么是面相过程. 面相过程的意思就是. 什么事情都亲力亲为. 比如上一讲的排序算法. 我们自己写的. 这 ...

  7. Java开发知识之Java中的集合上List接口以及子类讲解.

    Java开发知识之Java中的集合类 一丶什么是集合类 如果你学习说数据结构,那么学习集合就很简单. 因为集合就是存储数据的结构. 例如 有链表结构 (list ) 还有 map结构.等等. 集合类就 ...

  8. Java开发知识之Java的异常处理

    Java开发知识之Java的异常处理 一丶异常概述 在讲解异常之前,我们要搞清楚.什么是异常. 通俗理解就是我们编写的程序出问题了.进行处理的一种手段. 比如我们的QQ.有的时候就崩溃了.比如出现xx ...

  9. Java开发知识之Java的包装类

    Java开发知识之Java的包装类 一丶什么是包装类 包装类的意思就是对基本数据类型封装成一个类.这些类都是Number的子类.区别就是封装数据类型不同.包含的方法基本相同. 具体可以查询JAVA A ...

最新文章

  1. 石川es6课程---7、数组
  2. Linux rpm软件管理(安装/卸载/查询)
  3. Day18 (一)类的加载器
  4. oracle数据库主键自增序列_oracle数据库ID自增长--序列
  5. HTML DOM content 属性
  6. [Python] 函数来判断一个对象是否是一个已知的类型:isinstance(object, classinfo)
  7. RPC框架设计概要-性能
  8. mysql sql语句面试经典50题_经典sql面试及答案(50)
  9. Android开发案例 点击按钮出现 简易的消息提示框
  10. 计算机操作系统pv操作讲解,计算机操作系统PV操作例题
  11. 激光雷达原理及发展现状
  12. 利用接口和继承实现  求三角形 圆形面积 和以圆形为底的圆锥形的体积
  13. 模板消息php40008,企业微信发送模板消息 40008 Warning: wrong json format. ?
  14. css 屏幕背景图片 img.html
  15. JS,统计图表大全--十一、甘特图
  16. TensorFlow2.0-GPU加速
  17. 图片的轮播(轮播图)
  18. java计算机毕业设计学校食堂订餐管理源码+数据库+系统+lw文档+部署
  19. 提升个人效率减少焦虑——GTD法则
  20. 天龙八部TLBB从0到1搭建教程-中

热门文章

  1. Codeforces Round #318 (Div. 2) B Bear and Three Musketeers (暴力)
  2. MongoDB系列二
  3. [Algorithm] 字符串匹配算法——KMP算法
  4. C++中的指针与引用(转)
  5. 计算机网络 实验教案,《计算机网络》实验教案.pdf
  6. linux shell 宏定义_linux内核修炼之系统调用
  7. Java如何避免重量级锁,Java 中锁是如何一步步膨胀的(偏向锁、轻量级锁、重量级锁)...
  8. html生成自定义表格,自定义js的表格插件
  9. python文字游戏源代码求年纪_Python实现猜年龄游戏代码实例
  10. C++开发秋招笔试题