前言:
Spring Cloud是什么:
官网说明
SpringCloud,基于SpringBoot提供了一套微服务解决方案,包括服务注册与发现,配置中心,
全链路监控,服务网关,负载均衡,熔断器等组件,除了基于NetFlix的开源组件做高度抽象封
装之外,还有一些选型中立的开源组件。
SpringCloud利用SpringBoot的开发便利性巧妙地简化了分布式系统基础设施的开发,SpringCloud为开发
人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理、事件总
线、全局锁、决策竞选、分布式会话等等,它们都可以用SpringBoot的开发风格做到一键启动和部署。
SpringBoot并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,
通过SpringBoot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和
易维护的分布式系统开发工具包
![](https://img2018.cnblogs.com/blog/1488757/201904/1488757-20190402165352151-702242919.png)
SpringCloud=分布式微服务架构下的一站式解决方案,是各个微服务架构落地技术的集合体,俗称微服务全家桶
SpringCloud和SpringBoot是什么关系
SpringBoot专注于快速方便的开发单个个体微服务。
SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务整合并管理起来,
为各个微服务之间提供,配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等集成服务
SpringBoot可以离开SpringCloud独立使用开发项目,但是SpringCloud离不开SpringBoot,属于依赖的关系.
SpringBoot专注于快速、方便的开发单个微服务个体,SpringCloud关注全局的服务治理框架。
Dubbo是怎么到SpringCloud的?
哪些优缺点让去技术选型
1、 目前成熟的互联网架构(分布式+服务治理Dubbo)
2、我们把SpringCloud VS DUBBO进行一番对比
对比结果:
![](https://img2018.cnblogs.com/blog/1488757/201904/1488757-20190402165545884-1094478313.png)
2.1、微服务应该具备的功能
微服务具有以下的特点:
![](https://img2018.cnblogs.com/blog/1488757/201904/1488757-20190402165715376-1684494620.png)
微服务的功能主要体现在以下儿个方面:
![](https://img2018.cnblogs.com/blog/1488757/201904/1488757-20190402165726487-828222821.png)
2.1.1 服务的注册与发现
![](https://img2018.cnblogs.com/blog/1488757/201904/1488757-20190402165747336-386533641.png)
2.1 .2 服务的负载均衡
服务的负载均衡
![](https://img2018.cnblogs.com/blog/1488757/201904/1488757-20190402165811223-1217187911.png)
将服务注册中心高可用
![](https://img2018.cnblogs.com/blog/1488757/201904/1488757-20190402165828719-1565935018.png)
2.1.3 服务的容错
1个微服务系统有很多个服务,当 服务 F因某些原因导致了服务的不可用
来自于用户的网络请求需要调用服务F
由于服务F 无响应,用户的请求都处于阻塞状态 在高并发的场景下 短时间内会导致服务器的
线程资源消耗殆尽。
依赖于服务F 的其他的服务 ,例如 图中的服务 E、服务G 、服务 J,
会等待服务F 的响应,处于阻塞状态,导致这些服务的线程资源消耗殆尽
会出现:雪崩效应
![](https://img2018.cnblogs.com/blog/1488757/201904/1488757-20190402165858987-768771894.png)
为了解决分布式系统的雪崩效应,分布式系统引进了熔断器机制
熔断器( Circuit Breaker)一词来源于物理学中的电路知识 它的作用是当电路中
出现故障时迅速切断电路,起到保护电路的作用
当一 个服务的处理用户请求 失败次数在一 定时间内于设定的阀值时,熔断器处于关闭状态,服务正常
当服务处理用户请求的失败次数大于设定的阀值时,说明服务出现了故障,打开熔断器,
这时所有的请求会执行快速失败,不执行业务逻辑。
当处于打开状态的熔断器时一 段时间后会处于半打开状态,并执行 一定数量的请求
剩余的请求会执行快速失败,若执行的请求失败了,则继续打开熔断器;若成功了,则将熔断器关闭
![](https://img2018.cnblogs.com/blog/1488757/201904/1488757-20190402165916975-1787255160.png)
作用:
![](https://img2018.cnblogs.com/blog/1488757/201904/1488757-20190402165932945-1898521564.png)
Netflix的 Hystrix 熔断器开源组件功能非常强大,不仅有烙断器的功能,还有熔断器的状态
监测,并提供界面友好的 UI 开发人员或者运维人员通过 UI 界面能够直观地看到熔断器的状
态和各种性能指标。
2.1.4 服务网关
![](https://img2018.cnblogs.com/blog/1488757/201904/1488757-20190402165958141-1518315907.png)
2.1 .5 服务配置的统一管理
大致过程如下:
![](https://img2018.cnblogs.com/blog/1488757/201904/1488757-20190402170036451-452116737.png)
对于集群化的服务 可以通过使用消息总线来刷新多个服务实例。如果服务数量较多,对配置
中心需要考虑集群化部署,从而使配置中心高可用,做分布式集群
2.1.6 服务链路追踪
微服务系统是一个分布式架构的系统,微服务系统按业务划分服务单元, 一个微服务系统
往往有很多个服务单元。由于服务单元数量很多且业务复杂,
服务与服务之间的调用有可能非常复杂,一 旦出现了异常和
错误,就会很难去定位。所以在微服务架构中,必须实现分
布式链路追踪,去跟进 个请求到底有哪些服务参与,参与
的顺序又是怎样的 ,从而使每个请求链路清晰可见,出了问
题很快就能定位。
2.2、SpringCloud
2.2.1 简介
Spring Cloud 是基于 Spring Boot的, Spring Boot 是由 Pivotal 团队提供的全新 Web框架
它主要的特点就是简化了开发和部署的过程
简化了 Spring 复杂的配置和依赖管理,通过起步依赖和内置 Servilet 容器能够使开发者迅速搭一个 Web 工程。
Spring Cloud 在开发部署上继承了 Spring Boot的一些优点,提高其在开发和部署上的效率。
Spring Cloud 的首要目标就是通过提供 系列开发组件和框架,帮助开发者迅速搭建一个分布式的微服务系统
2.2.2 常用组件
1、服务注册和发现组件 Eureka
利用 Eureka 组件可以很轻松地实现服务的注册和发现的功能。
2、熔断组件 Hystrix
Hystrix是一个 熔断组件,它除了有一些些基本的熔断器功能外,还能够实现服务降级、服务限流的功能。
3、负载均衡组件 Ribbon
Ribbon是一个个负载均衡组件,它通常和 Eureka Zuul RestTemplate Feign 配合使用。
4、路由网关 Zuul
路由网关 Zuul 有智能路由和过滤的功能。内部服务的 API 接口通过 Zuul 网关统 一对外暴露,
内部服务的 API 接口不直接暴露,防止了内部服务敏感信息对外暴露。
5、Spring Cloud Config
Spring Cloud Config 组件提供了配置文件统 管理的功能。
Spring Cloud Config Server包括Server端和 Client Server 端读取本地仓库或者远程仓库的配
置文件,所有的 Client向 Server读取配置信息,从而达到配置文件统 管理的目的。
6、Spring Cloud Security
Spring Cloud Security 是对 Spring Security 组件的封装 Spring Cloud Security 向服务单元
提供了用户验证和权限认证。(很少使用)
7、Spring Cloud Sleuth
Spring Cloud Sleuth 是一个分布式链路追踪组件,它封装了 Dapper 、Zipkin、 Kibana 等组
件,通过它可以知道服务之间的相互依赖关系,并实时观察链路的调用情况
8、Spring Cloud Stream
Spring Cloud Stream Spring Cloud 框架的数据流操作包,可以封装 RabbitMq ActiveMq
Kafka Red is 等消息组件, 利用 Spring Cloud Stream 可以实现消息的接收和发送。
![](https://img2018.cnblogs.com/blog/1488757/201904/1488757-20190402170212256-1376477945.png)
2.2.3 项目一览表
![](https://img2018.cnblogs.com/blog/1488757/201904/1488757-20190402170233295-1513806065.png)
2.3、Dubbo简介
Dubbo 是阿里巴巴开源的一个分布式服务框架,致力于提供高性能和 透明化的 RPC 远程
服务调用方 ,以及 SOA 服务冶理方案 。
核心:
![](https://img2018.cnblogs.com/blog/1488757/201904/1488757-20190402170308245-1252373531.png)
架构图:
![](https://img2018.cnblogs.com/blog/1488757/201904/1488757-20190402170317244-1108659214.png)
流程图如下:
![](https://img2018.cnblogs.com/blog/1488757/201904/1488757-20190402170330734-1112058342.png)
特性:
![](https://img2018.cnblogs.com/blog/1488757/201904/1488757-20190402170341732-1342830860.png)
2.4、spring cloud与Dubbo的比较
![](https://img2018.cnblogs.com/blog/1488757/201904/1488757-20190402170356011-1966367382.png)