一 spring Cloud 是什么?
Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁定,领导选举,分布式会话,集群状态)。分布式系统的协调导致锅炉板模式,使用Spring Cloud开发人员可以快速站起来实现这些模式的服务和应用程序。它们适用于任何分布式环境,包括开发人员自己的笔记本电脑,裸机数据中心和Cloud Foundry等托管平台。
二 spring Cloud 包含哪些组件?
Spring Cloud专注于为典型用例提供良好的开箱即用体验,并为其他用户提供可扩展性机制。
- Spring Cloud Netflix:核心组件,可以对多个Netflix OSS开源套件进行整合,包括以下几个组件:
- Eureka:服务治理组件,包含服务注册与发现
- Hystrix:容错管理组件,实现了熔断器
- Ribbon:客户端负载均衡的服务调用组件
- Feign:基于Ribbon和Hystrix的声明式服务调用组件
- Zuul:网关组件,提供智能路由、访问过滤等功能
- Archaius:外部化配置组件
- Spring Cloud Config:配置管理工具,实现应用配置的外部化存储,支持客户端配置信息刷新、加密/解密配置内容等。
- Spring Cloud Bus:事件、消息总线,用于传播集群中的状态变化或事件,以及触发后续的处理
- Spring Cloud Security:基于spring security的安全工具包,为我们的应用程序添加安全控制
- Spring Cloud Consul : 封装了Consul操作,Consul是一个服务发现与配置工具(与Eureka作用类似),与Docker容器可以无缝集成
三 示例Spring Cloud采用非常声明的方法,通常只需更改类路径和/或注释即可获得许多功能。
@SpringBootApplication
@EnableDiscoveryClient
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
四 如何理解。
分布式:将一个大系统拆分为多个子系统。
集群:即多个服务器服务一个系统,通常一个备用。
两种方式都是为了负载均衡,将压力经可能由更多的服务器承担,在资源有限的情况下维持系统的稳定和运转。
但是和spring Cloud 有什么关系?
这和一个项目的发展有关系,当一个项目由单一功能,变为多个功能,同时还在不停扩展更新,微服务这个概念诞生了。
微服务:在包含多个子系统的大型系统中,每一个子系统都能够被独立部署,子系统之间关系为松耦合,是为了更好地专注 于自己的服务功能,所以微服务是一个大型系统的架构风格。
spring Cloud 则是为了更好的管理整个系统,从打包,到子系统之间的通信,崩溃等服务而诞生的,严格意义上说它是快速 构建微服务的工具集合。
如何理解:
假设大型系统是分布式的,那么各个服务之间如何进行统一管理呢?于是服务的注册和发现中心(Eureka)出现, 在注册所有服务之后,服务之间就能够相互感知。
仅仅感知是不够的,还需要服务之间的交互和交流,这就是服务消费者便出现(Hystrix+ribbon),那么能够交流还要考虑更多,若是某个服务挂了,出现无法交流的情况,ribbon的服务消费者feign(并且内置有断路器)出现了,当某一个服务挂了,无法访问,不至于所有服务都访问停止,避免出现大规模宕机。断路器(Hystrix)作用是当远程服务访问不到,可以改成访问本地的某一方法,类似跳转404。
好了,现在我们已经有了一个服务了,接下来就是要把所有的服务接口统一起来暴露出去给客户用了,这时候就有了路由网关(zuul),作用就是负载均衡统一服务端口和反向代理。
既然端口能够统一,那么更多的权限的统一,认证的统一,过滤的统一,由于这些配置麻烦,更新迭代快于是分布式配置中心(Spring Cloud Config)就出现了,它实现了将所有服务的配置文件都抽取到一个统一的地方,这还不够想要配置热更新,还需要告诉服务,于是消息总线(Spring Cloud Bus)出现了,通过总线向所有服务发送更新配置的消息,在发送结束的这个过程,通过服务追踪组件(zipkin ,SpringCloud Sleuth集成了zipkin)能够获得服务与服务之间的关系。