Spring Cloud
Spring Cloud 是微服务架构的一系列框架的集合,使用它可以很方便的进行分布式应用的开发,非常迅速的搭建出一个分布式系统,可以这么说,Spring Cloud就是一个大的集合,这个集合里包含了微服务架构中的其他的组件架构。
Spring Cloud流行的原因
- 强大的Spring生态,Spring生态可以说涵盖了java开发的整个过程,当微服务架构出现后,Spring Cloud作为Spring生态的一个微服务架构就有了先天的优势。
- 可插拔特性,Spring Cloud微服务架构采用Http协议来进行服务间的通信调用,Http协议通信无状态的特点使得采用Spring Cloud开发的项目具有可插拔的特点,即我们可随时随地上线下线服务,这对于客户端来说是透明的,客户端通过http请求不会与对应的服务建立长连接,当我们需要调用远程服务时,负载均衡将会将我们的请求打到可用的服务上,这正是可插拔(随便的插(服务上线)与拔(服务下线))。
- 异构系统,Spring Cloud微服务架构开发的系统可以支持系统的异构,因为其采用Http的通信机制,不管是什么样的系统,只要它支持http的通信方式,那么各系统间就可以实现通信。
架构的组成
服务注册与发现组件
- 常用的服务注册与发现组件有Eureka,Zookeeper,Consul,Nacos等。Eureka基于REST风格的。
- 服务注册与发现组件相当于一个服务的中心,各服务提供者将它所提供的服务信息(ip+端口等)传到服务中心,各服务消费者实时的获取服务中心的服务列表,当需要使用服务时通过服务列表进行服务的远程调用。
- 服务提供者同时也可是服务调用者,它们都与注册中心保持通信。
服务调用组件
- Hystrix,熔断降级隔离,在出现依赖服务失效的情况下,通过隔离系统锁依赖的服务的方式,防止服务级联失败,同时提供失败回滚机制,使系统能够更快地从异常中恢复。
- Ribbon是一个客户端负载均衡技术,用于提供客户端的软件负载均衡算法,提供了一系列完善的配置项:连接超时、重试等。
- OpenFeign是一个声明式RESTful网络请求客户端,它优雅的封装了Ribbon,它使编写Web服务的客户端变得更加方便和快捷。
注:
客户端负载均衡:客户端保存着一个服务调用列表,在选择调用时,通过轮询、随机、优先级等负载均衡算法选取一个调用地址发起请求
服务端负载均衡:负载均衡服务器上保存有服务列表,当请求到达时,采用对应的负载均衡算法进行服务的调用
网关
服务网关是服务调用的唯一入口,可以在这个组件中实现用户鉴权、动态路由、灰度发布、A/B测试、负载限流等功能,常用Zuul,Gateway来做服务网关。
配置中心
提供了配置集中管理,动态刷新配置的功能;配置通过Git或者其他方式来存储。
消息组件
Spring Cloud Stream(对分布式消息进行抽象,包括发布订阅、分组消费等功能,实现了微服务之间的异步通信)和Spring Cloud Bus(主要提供服务间的事件通信,如刷新配置)
安全控制组件
Spring Cloud Security 基于OAuth2.0开放网络的安全标准,提供了单点登录、资源授权和令牌管理等功能。
链路追踪组件
Spring Cloud Sleuth(收集调用链路上的数据),Zipkin(对Sleuth收集的信息,进行存储,统计,展示)。