什么是SpringCloud
SpringCloud是一套分布式微服务的解决方案,Spring Cloud 的各个项目基于 Spring Boot,将 Netflix 的多个框架进行封装,并且通过自动配置的方式将这些框架绑定到 Spring 的环境中,从而简化了这些框架的使用。由于Spring Boot 的简便,使得我们在使用 Spring Cloud 时,很容易的将 Netflix 各个框架整合进我们的项目中。
有哪些组件
Eureka
Eureka 提供基于 REST 的服务,在集群中主要用于服务管理。Eureka 提供了基于 Java语言的客户端组件,客户端组件实现了负载均衡的功能,为业务组件的集群部署创造了条件。使用该框架,可以将业务组件注册到 Eureka 容器中,进行集群部署,Eureka 提供的服务调用功能,可以发布容器中的服务并进行调用。 一个简单的 Eureka 集群,需要有一个 Eureka 服务器、若干个服务提供者。
-
服务端: 对于注册到服务器端的服务组件,Eureka 服务器并没有提供后台的存储,这些注册的服务实例被保存在内存的注册中心,它们通过心跳来保持其最新状态,这些操作都可以在内存中完成。客户端存在着相同的机制,同样在内存中保存了注册表信息,这样的机制提升了Eureka 组件的性能,每次服务的请求都不必经过服务器端的注册中心。
-
客户端: 作为 Eureka 客户端存在的服务提供者,主要进行以下工作:第一、向服务器注册服务;第二、发送心跳给服务器;第三、向服务器端获取注册列表。当客户端注册到服务器时,它将会提供一些关于它自己的信息给服务器端,例如自己的主机、端口、健康检测连接等。
-
服务调用者: 对于发布到 Eureka 服务器的服务,使用调用者可对其进行服务查找与调用,服务调用者也是作为客户端存在,但其职责主要是发现与调用服务。在实际情况中,有可能出现本身既是服务提供者,也是服务调用者的情况,例如传统的企业应用三层架构中,服务层会调用数据访问层的接口进行数据操作,它本身也会提供服务给控制层使用。
Ribbon
负载均衡是分布式架构的重点,负载均衡机制将决定着整个服务集群的性能与稳定。 Ribbon 是 Netflix 下的负载均衡项目,它在集群中为各个客户端的通信提供了支持,它主要实现中间层应用程序的负载均衡。
- Ribbon 提供以下特性: 1.负载均衡器,可支持插拔式的负载均衡规则。 2.对多种协议提供支持,例如 HTTP、TCP、UDP。 3.集成了负载均衡功能的客户端。
Spring Cloud 将 Ribbon 的 API 进行了封装,使用者可以使用封装后的 API 来实现负载均衡,也可以直接使用 Ribbon 的原生 API.
-
Ribbon 主要有以下三大子模块: Ribbon-core:该模块为 Ribbon 项目的核心,主要包括负载均衡器接口定义、客户端接口定义,内置的负载均衡实现等 API。 Ribbon-eureka:为 Eureka 客户端提供的负载均衡实现类。 Ribbon-httpclient:对 Apache 的 HttpClient 进行封装,该模块提供了含有负载均衡功能的 REST 客户端。
-
Ribbon 的负载均衡器主要与集群中的各个服务器进行通信,负载均衡器需要提供以下基础功能: 维护服务器的 IP、DNS 名称等信息。 根据特定的逻辑在服务器列表中循环。
-
为了实现负载均衡的基础功能,Ribbon 的负载均衡器有以下三大子模块: Rule: 一个逻辑组件,这些逻辑将会决定,从服务器列表中返回哪个服务器实例。 Ping: 该组件主要使用定时器,来确保服务器网络可以连接。 ServerList: 服务器列表,可以通过静态的配置确定负载的服务器,也可以动态指定服务器列表。如果动态指定服务器列表,则会有后台的线程来刷新该列表。
Feign
Spring Cloud 将 Feign 集成到 netflix 项目中,当与 Eureka、Ribbon 集成时,Feign 就具有负载均衡的功能。Feign 本身在使用上的简便性,加上与 Spring Cloud 的高度整合,使用该框架在 Spring Cloud 中调用集群服务,将会大大降低开发的工作量。
在使用 Feign 时,可以使用注解来修饰接口,被注解修饰的接口具有访问 Web Service 的能力,这些注解中既包括了 Feign 自带的注解,也支持使用第三方的注解。除此之外,Feign还支持插件式的编码器和解码器,使用者可以通过该特性,对请求和响应进行不同的封装与解析。
Hystrix
提供了熔断器功能,能够阻止分布式系统中出现联动故障。
Zuul
Zuul 是由 Netflix 孵化的一个致力于“网关 “解决方案的开源组件。
Config
Spring Cloud 中提供了分布式配置中 Spring Cloud Config ,为外部配置提供了客户端和服务器端的支持。