1.Spring Cloud是什么?能做什么?

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。

Spring并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

2.SpringCloud 和Dubbo对比

 

根据微服务架构在各方面的要素,看看Spring Cloud和Dubbo都提供了哪些支持。

 

 

3.核心组件

Spring Cloud的核心组件:

◆ 服务发现——Netflix Eureka

◆ 客服端负载均衡——Netflix Ribbon

◆ 断路器——Netflix Hystrix

◆ 服务网关——Netflix Zuul

◆ 分布式配置——Spring Cloud Config

 

1.Eureka(服务注册中心)

 

一个RESTful服务,用来定位运行在AWS地区(Region)中的中间层服务。由两个组件组成:Eureka服务器和Eureka客户端。Eureka服务器用作服务注册服务器。Eureka客户端是一个java客户端,用来简化与服务器的交互、作为轮询负载均衡器,并提供服务的故障切换支持。Netflix在其生产环境中使用的是另外的客户端,它提供基于流量、资源利用率以及出错状态的加权负载均衡。

 

 

2.Ribbon(负载均衡器)

 

Ribbon,主要提供客户侧的软件负载均衡算法。

Ribbon客户端组件提供一系列完善的配置选项,比如连接超时、重试、重试算法等。Ribbon内置可插拔、可定制的负载均衡组件。下面是用到的一些负载均衡策略:

◆ 简单轮询负载均衡

◆ 加权响应时间负载均衡

◆ 区域感知轮询负载均衡

◆ 随机负载均衡

Ribbon中还包括以下等功能:

◆ 易于与服务发现组件(比如Netflix的Eureka)集成

◆ 使用Archaius完成运行时配置

◆ 使用JMX暴露运维指标,使用Servo发布

◆ 多种可插拔的序列化选择

 

 

3.Hystrix(断路器)

 

断路器可以防止一个应用程序多次试图执行一个操作,即很可能失败,允许它继续而不等待故障恢复或者浪费 CPU 周期,而它确定该故障是持久的。断路器模式也使应用程序能够检测故障是否已经解决。如果问题似乎已经得到纠正,应用程序可以尝试调用操作。

断路器增加了稳定性和灵活性,以一个系统,提供稳定性,而系统从故障中恢复,并尽量减少此故障的对性能的影响。它可以帮助快速地拒绝对一个操作,即很可能失败,而不是等待操作超时(或者不返回)的请求,以保持系统的响应时间。如果断路器提高每次改变状态的时间的事件,该信息可以被用来监测由断路器保护系统的部件的健康状况,或以提醒管理员当断路器跳闸,以在打开状态。

 

 

4.Zuul(网关)

 

类似nginx,反向代理的功能,不过netflix自己增加了一些配合其他组件的特性。

 

 

5.Spring Cloud Config(配置中心)

 

这个还是静态的,得配合Spring Cloud Bus实现动态的配置更新。

 

 

4.Spring Cloud架构流程

 

通过这张图,我们来了解一下各组件配置使用运行流程:

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

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

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

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

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

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

 

5.Spring Cloud体系介绍

 

Spring Cloud由众多子项目组成,如Spring Cloud Config、Spring Cloud Netflix、Spring Cloud Consul 等,提供了搭建分布式系统及微服务常用的工具,如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性token、全局锁、选主、分布式会话和集群状态等,满足了构建微服务所需的所有解决方案。

 

具体如下:

1、Spring Cloud Config 配置中心,利用git集中管理程序的配置。

2、Spring Cloud Netflix 集成众多Netflix的开源软件

3、Spring Cloud Bus 消息总线,利用分布式消息将服务和服务实例连接在一起,用于在一个集群中传播状态的变化

4、Spring Cloud for Cloud Foundry 利用Pivotal Cloudfoundry集成你的应用程序

5、Spring Cloud Cloud Foundry Service Broker 为建立管理云托管服务的服务代理提供了一个起点。

6、Spring Cloud Cluster 基于Zookeeper, Redis, Hazelcast, Consul实现的领导选举和平民状态模式的抽象和实现。

7、Spring Cloud Consul 基于Hashicorp Consul实现的服务发现和配置管理。

8、Spring Cloud Security 在Zuul代理中为OAuth2 rest客户端和认证头转发提供负载均衡

9、Spring Cloud Sleuth SpringCloud应用的分布式追踪系统,和Zipkin,HTrace,ELK兼容。

10、Spring Cloud Data Flow 一个云本地程序和操作模型,组成数据微服务在一个结构化的平台上。

11、Spring Cloud Stream 基于Redis, Rabbit, Kafka实现的消息微服务,简单声明模型用以在Spring Cloud应用中收发消息。

12、Spring Cloud Stream App Starters 基于Spring Boot为外部系统提供spring的集成

13、Spring Cloud Task 短生命周期的微服务,为SpringBooot应用简单声明添加功能和非功能特性。

14、Spring Cloud Task App Starters

15、Spring Cloud Zookeeper 服务发现和配置管理基于Apache Zookeeper。

16、Spring Cloud for Amazon Web Services 快速和亚马逊网络服务集成。

17、Spring Cloud Connectors 便于PaaS应用在各种平台上连接到后端像数据库和消息经纪服务。

18、Spring Cloud Starters (项目已经终止并且在Angel.SR2后的版本和其他项目合并)

19、Spring Cloud CLI 插件用Groovy快速的创建Spring Cloud组件应用。

当然这个数量还在一直增加...

 

6.Spring Cloud框架特点

 

1.约定优于配置

2.适用于各种环境

开发、部署在 PC Server或各种云环境(例如阿里云、AWS等)均可。

3.隐藏了组件的复杂性,并提供声明式、无xml的配置方式。

4.开箱即用,快速启动。

5.轻量级的组件

Spring Cloud整合的组件大多比较轻量。例如 Eureka、Zuul,等等,都是各自领域轻量级的实现。

6.组件丰富,功能齐全

Spring Cloud为微服务架构提供了非常完整的支持。例如,配置管理、服务发现、断路器、微服务网关等。

7.选型中立、丰富

例如, Spring Cloud支持使用 Eureka、 Zookeeper或 Consul实现服务发现。

8.灵活

Spring Cloud的组成部分是解耦的,开发人员可按需灵活挑选技术选型。