概述

毫无疑问,Spring Cloud是目前微服务架构领域的翘楚,无数的书籍博客都在讲解这个技术。不过大多数讲解还停留在对Spring Cloud功能使用的层面,其底层的很多原理,很多人可能并不知晓。因此本文将通过大量的手绘图,给大家谈谈Spring Cloud微服务架构的底层原理。

实际上,Spring Cloud是一个全家桶式的技术栈,包含了很多组件。本文先从其最核心的几个组件入手,来剖析一下其底层的工作原理。也就是Eureka、Ribbon、Feign、Hystrix、Zuul这几个组件。

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

最后

码字不易,觉得有帮助的可以帮忙点个赞,让更多有需要的人看到

又是一年求职季,在这里,我为各位准备了一套Java程序员精选高频面试笔试真题,来帮助大家攻下BAT的offer,题目范围从初级的Java基础到高级的分布式架构等等一系列的面试题和答案,用于给大家作为参考,需要的可以戳这里免费领取,以下是部分内容截图
和答案,用于给大家作为参考,需要的可以戳这里免费领取,以下是部分内容截图

腾讯T2大牛亲自教你!看了谷歌大神写的Spring源码笔记,不愧是大佬相关推荐

  1. 升职加薪必看!撸了郭霖大神写的Framework源码笔记,醍醐灌顶!

    前言 2020年,互联网裁员潮下,我度过了人生中最清晰的半年. 今年我本命年,熬过了程序员35的坎,却在36岁被公司破产来了当头一棒,领完了当月份的工资,老板,也是我哥们的老李走进我的办公室,没有迂回 ...

  2. 腾讯T2大牛亲自教你!5214页PDF的进阶架构师学习笔记,终局之战

    我,来自大山. 我,不甘平凡. 笔者80后,出生在江西一个偏远的山村.虽然出生时已经不是那个温饱都是问题的年代,但是也谈不上有个幸福的童年.家里很穷.幼儿园并没有读,因为家里觉得花那个钱没有必要,小学 ...

  3. 腾讯T2大牛亲自教你!没有逻辑思维学java很痛苦

    4步套路,解决动态规划问题 1.确定问题状态 提炼最后一步 的问题转化 2.转移方程,把问题方程化 3.按照实际逻辑设置初始条件和边界情况 4.确定计算顺序并求解 结合实例感受下: 你有三种硬币,分别 ...

  4. 首发,看了这份美团架构师的spring源码笔记后,才发现原来学习的思路都错了

    前言 Spring让我们可以更快,更轻松,更安全地进行Java编程.Spring对速度,简单性和生产率的关注使其成为世界上最受欢迎的Java框架. 像阿里巴巴,亚马逊,微软等在内的所有科技巨头对Spr ...

  5. 腾讯T3大牛亲自教你!2021大厂Android面试经验,经典好文

    本篇将由 环境搭建.实现原理.编程开发.插件开发.编译运行.性能稳定.发展未来 等七个方面,对当前的 React Native 和 Flutter 进行全面的分析对比,希望能给你更有价值的参考. 前言 ...

  6. 腾讯T2大牛亲自讲解!Android开发唯一的出路:进阶学习

    ##前言 近来,互联网公司"内卷"风暴甚嚣尘上,越来越多的人开始讨论这个问题,这个现象在知乎的反应尤其明显,相关问题多次上了热榜,关注者和浏览量都非常的高. 在"内卷&q ...

  7. 腾讯T3大牛亲自教你!这么香的技术还不快点学起来,书籍+视频+学习笔记+技能提升资源库

    为什么想跳槽? 简单说一下当时的状况,我在这家公司做了两年多,这两年多完成了一个大项目,作为开发的核心主力,开发压力很大,特别是项目上线前的几个月是非常辛苦,几乎每晚都要加班到12点以后,周末最多只有 ...

  8. 看完微软大神写的求平均值代码,我意识到自己还是 too young 了

    博雯 发自 凹非寺 量子位 | 公众号 QbitAI取整求个无符号整数的平均值,居然也能整出花儿来? 这不,微软大神Raymond Chen最近的一篇长文直接引爆外网技术平台,引发无数讨论: 无数人点 ...

  9. 看完微软大神写的求平均值代码,我意识到自己还是too young了

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 博雯 发自 凹非寺 量子位 | 公众号 QbitAI 取整求个无符号整数的平均值,居然 ...

最新文章

  1. 风云点评:Flash 与 Silverlight 终极大比拼
  2. 教你自己制作Vista与DOS双系统
  3. Java 程序优化:字符串操作、基本运算方法等优化策略
  4. 有两个不同list,需要对比两个list内容且输出差异的内容
  5. php语言设计图书管理系统,图书馆管理系统PHP版_7tmu7b
  6. python课程_大整理!程序员最爱的13个免费Python课程
  7. JavaScript中的属性操作
  8. 将tomcat添加到系统服务
  9. 明略数据是谁?为何能拿下腾讯在行业AI的高额投资
  10. 鬼谷八荒steam修改器|鬼谷八荒多功能修改器
  11. 小白分分钟学会,简单四步,直接把sql直接转换成接口服务java
  12. js 修改meta标签 属性
  13. 简单excel饼状图怎么做,bi工具怎么做饼状图
  14. 学习网络安全一头雾水,想找些学习资料都不知道哪里入手?
  15. OpenJudge NOI 1.13 07:玛雅历
  16. 怎样在手机上弄电子版文档_如何在手机上把word转成pdf?
  17. 使用v-for循环展示多张图片,并且标记选中的图片
  18. 网络流行语基本能力测试题,为了证明2010年你没白过
  19. 网络安全现状:揭秘白帽黑客的真实收入
  20. Python编程一键下载douban相册图片(方便用于看妹纸)

热门文章

  1. 小学计算机课打气球,小学信息技术课程中学生信息素养的培养
  2. Baidu 与 Google 的较量
  3. System.NullReferenceException: 未将对象引用设置到对象的实例。
  4. 案例:搭建Zabbix监控系统
  5. Tasker配置 QQ消息朗读
  6. DA14580 UART2 的使用
  7. 也发美女——内衣车模
  8. Win7如何禁用开机启动项,以达到减小开机时间,优化加速的目的?
  9. Google面试题之100层仍两个棋子
  10. 申通快递java工资_[代码全屏查看]-java查询申通快递