1.概念
Spring Cloud是实现微服务架构的一系列框架的有机集合。
是在Spring Boot基础上构建的,用于简化分布式系统构建的工具集。是拥有众多子项目的项目集合。利用Spring Boot的开发便利性,巧妙地简化了分布式系统基础设施(服务注册与发现、熔断机制、网关路由、配置中心、消息总线、负载均衡、链路追踪等)的开发。
2.版本
-
版本过程:版本名.版本号。
-
版本名:伦敦地铁字母顺序。
-
版本号:M(milestone):里程碑,
SR(Service Releases):稳定版,
RC(Release Candidate):稳定版的候选版,也就是稳定版的最后一个版本。
3.整体架构
-
服务注册与发现组件:Eureka,Zookeeper,Consul,Nacos等。Eureka基于REST风格的。
-
服务调用组件:Hystrix(熔断降级,在出现依赖服务失效的情况下,通过隔离 系统依赖服务 的方式,防止服务级联失败,同时提供失败回滚机制,使系统能够更快地从异常中恢复),Ribbon(客户端负载均衡,用于提供客户端的软件负载均衡算法,提供了一系列完善的配置项:连接超时、重试等),OpenFeign(优雅的封装Ribbon,是一个声明式RESTful网络请求客户端,它使编写Web服务客户端变得更加方便和快捷)。
-
网关:路由和过滤。Zuul,Gateway。
-
配置中心:提供了配置集中管理,动态刷新配置的功能;配置通过Git或者其他方式来存储。
-
消息组件:Spring Cloud Stream(对分布式消息进行抽象,包括发布订阅、分组消费等功能,实现了微服务之间的异步通信)和Spring Cloud Bus(主要提供服务间的事件通信,如刷新配置)
-
安全控制组件:Spring Cloud Security 基于OAuth2.0开放网络的安全标准,提供了单点登录、资源授权和令牌管理等功能。
-
链路追踪组件:Spring Cloud Sleuth(收集调用链路上的数据),Zipkin(对Sleuth收集的信息,进行存储,统计,展示)。
4.Spring Cloud Context
-
我们知道Spring Boot中应用上下文通过application.yml配置。
-
Bootstrap上下文(Spring Cloud提供,也叫引导程序上下文)
Spring Cloud启动的时候会创建一个bootstrap的上下文,它是应用的父级上下文(请注意这里所说的bootstrap指的是启动最开始时加载的配置项,与bootstrap.yml或者说bootstrap.properties是两码事);它负责从一些外部环境中加载配置项,如配置中心;这部分配置项的优先级是最高的,因此它不会被其它的配置文件中加载的配置项给覆盖。
它是主程序的父级上下文,负责从外部资源中(Git仓库)加载配置属性 和 解密本地外部配置文件中的属性。是所有Spring程序的外部属性来源。通过Bootstrap加载进来的属性的优先级较高,不能被本地配置覆盖。
3.加载顺序
Spring Cloud应用加载的配置项可以来自于以下几个位置:
启动命令中指定的配置项 -> 配置中心中的配置文件 -> 本地的application.properties(yml) -> 本地boostrap.properties(yml) 这几个位置的配置项从上往下优先级递减,即从上面位置加载的配置项会覆盖下面位置加载的配置项。如下面代码中 配置中心加载的配置项优先级要高于bootstrap.yml中加载的配置项
4.application上下文
Bootstrap上下文是application上下文的父级。子级从父级继承配置文件和属性。
bootstrap.yml中的属性 会添加到子级的上下文。它们的优先级低于application.yml和其他添加到子级中作为创建Spring Boot应用的属性源,boostrap.yml中的属性具备非常低的优先级,因此可以作为默认值。
Bootstrap中上下文的属性优先,但是注意这些属性并不包括任何来自于bootstrap.yml中的属性。
5.Spring Cloud Commons
将服务发现,负载均衡,断路器等封装在Commons中,供Cloud客户端使用,不依赖于具体的实现(Eureka,Consul),类似于jdbc提供了一套规范,数据库厂商来实现它。
例如:
org.springframework.cloud.client.discovery.DiscoveryClient
是Spring Cloud中用来进行服务发现的顶级接口,在Netflix Eureka或者Consul中都有相应的具体实现类。
DiscoveryClient目前的实现有Spring Cloud Netflix Eureka、Spring Cloud Consul Discovery和Spring Cloud Zookeeper Discovery。
org.springframework.cloud.client.serviceregistry.ServiceRegistry接口实现了服务注册和服务下线。
6.小结
Spring Cloud目前只是Java世界中微服务实践的最佳落地方案,是一个基于Spring Boot的服务治理工具包。并不能代表微服务或者微服务架构。
微服务是一种架构理念:重点是微服务设计原则,不用Spring cloud也能实现微服务,重在架构理念。