Spring Cloud

Spring Cloud 是一套完整的微服务解决方案,基于 Spring Boot 框架,准确的说,它不是一个框架,而是一个大的容器,它将市面上较好的微服务框架集成进来,从而简化了开发者的代码量。

它利用 Spring Boot 的开发便利性简化了分布式系统的开发,比如服务发现、服务网关、服务路由、链路追踪等。Spring Cloud 并不重复造轮子,而是将市面上开发得比较好的模块集成进去,进行封装,从而减少了各模块的开发成本。

一句话总结:Spring Cloud 提供了构建分布式系统所需的“全家桶”。

Spring Cloud核心组件

Spring Cloud Netflix 集成众多Netflix的开源软件:Eureka, Hystrix, Zuul, Archaius,组成了微服务的最重要的核心组件,这里主要介绍5大常用组件。

1.Eureka

Eureka 作为 Spring Cloud 框架的注册中心,与之对应的是 Dubbo 框架的Zookeeper。

上图简要描述了Eureka的基本架构,由3个角色组成:

1)Service Provider:   暴露服务的服务提供方。

2)Service Consumer: 调用远程服务的服务消费方。

3)EureKa Server:   服务注册中心和服务发现中心。

2.Hystrix

熔断器,容错管理工具,旨在通过熔断机制控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。

分布式系统环境下,服务间类似依赖非常常见,一个业务调用通常依赖多个别的服务,如下图:

如果各个服务正常运行,那大家齐乐融融,但是如果其中一个服务Service C崩坏掉会出现什么样的情况呢?如下图:

ServiceB依赖于ServiceC,由于ServiceC访问量比较大,由于ServiceC挂了,很可能ServiceB也会被拖累挂。

同理上游的ServiceA还依赖于ServiceB,同样也会被涉及。

最终一个服务失败,导致整条链路的服务都失败的情形,为造成大面积的服务雪崩效应。

这就给之前我们的大A股熔断是一个道理,所以针对这种情况需要考虑引入Hystrix 熔断机制,避免大面积雪崩等场景。

Hystrix 断路器是一种开关装置,当某个服务单元发生故障之后,通过断路器的故障监控,向调用方返回一个符合预期的、可处理的备选响应(FallBack),而不是长时间的等待或者抛出调用方无法处理的异常,这样就保证了服务调用方不会长时间、不必要占用,从而避免了故障在分布式系统中的蔓延,乃至雪崩。

3.Netflix Zuul

Zuul是Spring Cloud全家桶中的微服务API网关。

所有从设备或网站来的请求都会经过Zuul到达后端的应用程序。作为一个边界性质的应用程序,Zuul提供了动态路由、监控、弹性负载和安全功能。

简单的话,Zuul 就是楼下保安亭的大爷,所有进入大楼的人,都需要大爷检查,得到大爷的许可。我们可以通过一张图理解。

4.Ribbon

Zuul默认和Ribbon结合实现了负载均衡的功能,Ribbon就可基于某种负载均衡算法,自动地帮助服务消费者去请求。

5.Spring Cloud Config

实际工作中,我们可能会有几十上百的微服务节点,每一个节点有需要有配置信息,比如数据库的连接,服务中心的地址等等,当中信息变化的时候,我们可能面临手动一台一台修改的囧境。为了解决上述问题,我们能否借鉴 Git 的思想,有一个标准的配置,当我们配置修改,我们只需要同步刷新一下即可,不用手动搬运呢?答案是有的,我们可以通过 Spring Cloud Config 达到同步更新配置信息。

Spring Cloud架构实现

通过这张图,可以比较清楚的了解到各组件配置使用运行机制:

1、请求统一通过API网关(Zuul)来访问内部服务.

2、网关接收到请求后,从注册中心(Eureka)获取可用服务

3、由Ribbon进行均衡负载后,分发到后端具体实例

4、微服务之间通过Feign进行通信处理业务

5、Hystrix负责处理服务超时熔断

6、Turbine监控服务间的调用和熔断相关指标

微服务、Spring Cloud、Spring Boot三者关系

微服务是一种架构的理念,提出了微服务的设计原则,从理论为具体的技术落地提供了指导思想。

  1. SpringBoot专注于快速方便的开发单个个体微服务。
  2. SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务整合并管理起来,
  3. 为各个服务之间提供,配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、精选决策、分布式会话等集成服务。
  4. SpringBoot可以离开SpringCloud独立开发项目,但是SpringCloud离不开SpringBoot,属于依赖关系。
  5. SpringBoot专注于快速、方便的开发单个微服务个体,SpringCloud关注全局的服务治理框架。

4年了,谢谢陪伴与支持。奉上Mike的最新《架构技术连载合集》,以及免费《大厂Java架构视频资料》,私信666领取对应的学习资料!

一文弄懂Spring Cloud的5大核心组件详解:Eureka+Hystrix+Zuul+Ribbon相关推荐

  1. 第十二章 Spring Cloud Config 统一配置中心详解

    目录 一.配置问题分析及解决方案 1.问题分析 2.解决方案 二.Spring Cloud Config 介绍 1.Spring Cloud Config特性 2.Spring Cloud Confi ...

  2. 4 年 46 个版本,一文读懂 Spring Cloud 发展历史

    作者 | 方剑 责编 | 唐小引 头图 | CSDN 下载自东方 IC 出品 | CSDN(ID:CSDNnews) Spring Cloud 自 2016 年 1 月发布第一个 Angel.SR5 ...

  3. 一文读懂Spring Cloud底层原理

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

  4. 把 Spring Cloud 给拆了!详解每个组件的作用

    点击上方 好好学java ,选择 星标 公众号重磅资讯,干货,第一时间送达 今日推荐:推荐19个github超牛逼项目!个人原创100W +访问量博客:点击前往,查看更多 我们先认识一下SpringC ...

  5. 咖啡汪日志 —— 一文看懂Spring Cloud 网关ZuulFilter的使用和源码(包括FilterFactory 的讲解)

    作为乐死不疲的汪界翘楚 本汪每天不是在戏精 就是在戏精的路上了 作为一只纯种哈士奇 玩,就要玩得尽兴而归! 今天与大家一起溜溜,看看 Spring Cloud 网关 ZuulFilter ,从使用到源 ...

  6. 一文读懂Spring CLoud

    一.前言 只有光头才能变强 认识我的朋友可能都知道我这阵子去实习啦,去的公司说是用SpringCloud(但我觉得使用的力度并不大啊~~)- 所以,这篇主要来讲讲SpringCloud的一些基础的知识 ...

  7. 【Spring源码:循环依赖】一文弄懂Spring循环依赖

    1. 什么是循坏依赖 很简单,其实就是互相依赖对方,比如,有一个A对象依赖了B对象,B对象又依赖了A对象. // A依赖了B public class A{private B b; }// B依赖了A ...

  8. Spring Cloud学习(一) ZuulFilter 过滤器详解

    本文转自:https://blog.csdn.net/liuchuanhong1/article/details/62236793 1.继承ZuulFilter类,为了验证Filter的特性,我们这里 ...

  9. 一文讲懂页面置换算法,带例题详解

    目录 ​什么是页面置换算法? ​缺页中断次数和页面置换次数 ​啥子是缺页? ​啥子是中断? ​啥子是缺页中断? ​缺页中断次数 ​最佳置换算法OPT和先进先出置换算法FIFO ​最佳置换算法OPT ​ ...

  10. 一文弄懂String的所有小秘密

    文章目录 简介 String是不可变的 传值还是传引用 substring() 导致的内存泄露 总结 一文弄懂String的所有小秘密 简介 String是java中非常常用的一个对象类型.可以说ja ...

最新文章

  1. python将图像转换为8位单通道_Python OpenCV读取16位单通道图像并转换为8位灰度图显示...
  2. STM32 进阶教程 6 -  汇编与C混合编程
  3. GetCurrentDirectory和SetCurrentDirectory函数
  4. ThinkPHP3.1快速入门(4)连贯操作
  5. Python 中的Pandas库
  6. 福建计算机及应用专业的大学,33所福建大学公布国家级/省级一流本科专业!
  7. linux脚本编写规则,shell脚本编写守则
  8. (第2篇)一篇文章教你轻松安装hadoop
  9. 笔记:python3编写的仿hubot的聊天机器人Chattie
  10. K8S集群安装KubeSphere失败记录
  11. C#LeetCode刷题之#520-检测大写字母(Detect Capital)
  12. 前端(jQuery)(10)-- jQuery标签切换
  13. [myeclipse] 官方中文网站
  14. bzoj千题计划176:bzoj1199: [HNOI2005]汤姆的游戏
  15. Python实战系列-爬取网页内容
  16. VS2015安装教程详细步骤及配置Opencv4.1.1(亲测)
  17. halcon图片上区域灰度值区间放大,可提高对比度
  18. 笔记本电脑上的以太网消失或者无法识别问题
  19. 站在招聘者角度看面试 | 掘金技术征文
  20. Python爬取简单网页内容

热门文章

  1. 坚持努力,在黑暗中寻找光明——我的2014
  2. 你努力工作会让老板感动吗?
  3. 在你的ipad上使用Vscode撸代码(快速操作向)
  4. android 7.1 字体大小设置,微信安卓版7.0.4字体大小被吐槽,微信官方回应又被吐槽...
  5. 【运维】阿里云宝塔面板域名DNS解析(如何配置用域名访问网站)
  6. T检验、F检验、Z检验、卡方检验
  7. 定时任务task:annotation-driven配置
  8. [MCM] MTSP问题的GA求解 多目标优化 (单起点 与 多起点)
  9. SharePoint Online 触发的Automate工作流的调试
  10. 通过docker搭建Yapi