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关注全局的服务治理框架。

Spring Cloud的5大核心组件详解的更多相关文章

  1. 【Spring】——声明式事务配置详解

    项目中用到了spring的事务: @Transactional(rollbackFor = Exception.class, transactionManager = "zebraTrans ...

  2. Spring Boot的每个模块包详解

    Spring Boot的每个模块包详解,具体如下: 1.spring-boot-starter 这是Spring Boot的核心启动器,包含了自动配置.日志和YAML. 2.spring-boot-s ...

  3. Spring全家桶——SpringBoot之AOP详解

    Spring全家桶--SpringBoot之AOP详解 面向方面编程(AOP)通过提供另一种思考程序结构的方式来补充面向对象编程(OOP). OOP中模块化的关键单元是类,而在AOP中,模块化单元是方 ...

  4. 2017.2.13 开涛shiro教程-第十二章-与Spring集成(一)配置文件详解

    原博客地址:http://jinnianshilongnian.iteye.com/blog/2018398 根据下载的pdf学习. 第十二章-与Spring集成(一)配置文件详解 1.pom.xml ...

  5. Spring Boot源码中模块详解

    Spring Boot源码中模块详解 一.源码 spring boot2.1版本源码地址:https://github.com/spring-projects/spring-boot/tree/2.1 ...

  6. idea spring+springmvc+mybatis环境配置整合详解

    idea spring+springmvc+mybatis环境配置整合详解 1.配置整合前所需准备的环境: 1.1:jdk1.8 1.2:idea2017.1.5 1.3:Maven 3.5.2 2. ...

  7. 高并发架构系列:Redis为什么是单线程、及高并发快的3大原因详解

    Redis的高并发和快速原因 1.redis是基于内存的,内存的读写速度非常快: 2.redis是单线程的,省去了很多上下文切换线程的时间: 3.redis使用多路复用技术,可以处理并发的连接.非阻塞 ...

  8. ansible安装与核心组件详解

    第1章 安装anisble 1.1 安装epel源 rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarc ...

  9. spring boot 配置文件properties和YAML详解

    spring boot 配置文件properties和YAML详解 properties中配置信息并获取值. 1:在application.properties配置文件中添加: 根据提示创建直接创建. ...

  10. Spring源码之九finishRefresh详解

    Spring源码之九finishRefresh详解 公众号搜索[程序员田同学],专职程序员兼业余写手,生活不止于写代码 Spring IoC 的核心内容要收尾了,本文将对最后一个方法 finishRe ...

随机推荐

  1. 本文是第一篇在GitHub仓库中撰写的.md格式的blog文件

    正文内容: 具体内容,只是未来测试,给出福利: 模板格式: title: 博文标题 description: 博文摘要 #多个标签请使用英文逗号分隔或使用数组语法 tags: 标签1, 标签2 #多个 ...

  2. 关于MNN工程框架编译出来的静态库和动态库的使用

    一.MNN.lib文件路径 如果你看过之前的博客内容,应该可以在编译的的工程当中 C:\Users\Administrator\Desktop\MNN\MNN-master\MNN-CPU-OPENC ...

  3. Pycharm之使用git merge合并分支

    当我们在某个分支上代码开发完成,代码测试没问题后需要把分支上的代码合并到 master 分支上.这样保证 master 分支的代码永远都是最新的,也是最干净的,这样才可以持续的开发自己的项目.本篇讲解 ...

  4. qnap nas 下的 nasconfig_fs.img.tgz 及相关的一点记录

    QNAP NAS 已安装EntWare(先前的Optware已废弃,不适用),可以使用 opkg 命令安装软件包(如想利用arp命令查看局域网的IP地址及对应物理网卡地址,可使用opkg instal ...

  5. Vue.js 插件

    1.前言 vue的插件其实通过操作Vue这个对象,为其扩展新的功能.例如: // 1. 添加全局方法或 property Vue.myGlobalMethod = function () { // 逻 ...

  6. C# 学习笔记 0415

    关于零碎的知识笔记总结,你可能需要知道的 一.Linq相关 Find()和First()与FirstOrDefault Find方法只能在List上使用,而后者能更广泛应用在IEnemerable上. ...

  7. 关于Pro addin中,控制dockpane的状态

    在Pro SDK中,可以通过dackpane的Hide()方法,对面板进行隐藏. DockPane pane = FrameworkApplication.DockPaneManager.Find(& ...

  8. Redis应用—1.在用户数据里的应用

    大纲 1.社区电商的业务闭环 2.Redis缓存架构的典型生产问题 3.用户数据在读多写少场景下的缓存设计 4.热门用户数据的缓存自动延期机制 5.缓存惊群与穿透问题的解决方案 6.缓存和数据库双写不 ...

  9. 基于.NET8+Vue3开发的权限管理&个人博客系统

    前言 今天大姚给大家分享一个基于.NET8+Vue3开发的权限管理&个人博客系统:Easy.Admin. 项目介绍 Easy.Admin是一个基于.NET8+Vue3+TypeScript开发 ...

  10. Linux NAS存储、文件共享

    Linux NAS存储之CIFS CIFS是Windows和Unix系统之间共享文件的一种协议,客户端通常是Windwos等.支持多节点同时挂载以及并发写入 1.服务器端操作(存储端) 1.1.服务器 ...