Spring Cloud中文网
Spring Cloud 是什么?
Spring Cloud 是一系列框架的有序集合,将市面上开发得比较好的模块集成进去,进行封装,从而减少了各模块的开发成本。
Spring Cloud 优缺点
基于注解,没有配置文件,解耦的
Spring Cloud 和 Dubbo 对比
Dubbo 只是实现了服务治理,而 Spring Cloud 实现了微服务架构的方方面面,服务治理只是其中的一个方面。Spring Cloud 基于 Spring Boot,基于http协议,Dubbo基于RPC协议。
SpringCloud分布式开发
通过spring cloud Eureka实现高可用的服务注册中心以及实现微服务的注册与发现;通过spring cloud ribbon或feign实现服务间负载均衡的接口调用,同时,为了分布式系统更为健壮,以避免服务调用使用spring cloud hystrix来进行包装,实现线程隔离并加入熔断机制,以避免在微服务架构中因个别服务出现异常而引起级联故障蔓延。
五大常用spring cloud子项目
服务发现——Netflix Eureka
客服端负载均衡——Netflix Ribbon
断路器——Netflix Hystrix
服务网关——Netflix Zuul
分布式配置——Spring Cloud Config
服务发现——Netflix Eureka
服务注册中心 :eureka-server
作用:服务注册中心提供服务注册功能
服务提供方:eureka-client
作用:注册服务到服务注册中心
客服端负载均衡——Netflix Ribbon
在Spring Cloud中,有两种服务调用方式,一种是Ribbon+RestTemplate,另一种是Feign。
当Ribbon与Eureka配合使用时,Ribbon可自动从Eureka Server获取服务提供者地址列表,并基于负载均衡算法,请求其中一个服务提供者实例。
断路器——Netflix Hystrix
在分布式架构中,当某个服务单元发生故障之后,通过断路由器的故障监控(类似熔断保险丝),向调用方返回一个错误响应,而不是长时间的等待。这样就不会使得线程因调用故障服务被长时间占用不释放,避免了故障在分布式系统中的蔓延。
Spring Cloud Hystrix针对上述问题实现了断路由器、线程隔离等一系列服务保护功能。它是基于Netflix Hystrix实现,该框架的目标在于通过控制那些访问远程系统、服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。
Hystrix具备服务降级、服务熔断、线程和信号隔离、请求缓存、请求合并以及服务监控等强大功能。
服务网关——Netflix Zuul
我们在服务端实现的微服务接口,往往都会有一定的权限校验机制,比如对用户登录状态的校验等;同时为了防止客户端在发起的请求时被篡改等安全方面的考虑,还会增加一些签名校验的机制存在。在微服务架构中需要对每个模块都去修改,为了简便也需要一套机制能够很好的解决微服务架构中对于微服务接口访问时各前置校验的冗余问题。
为了解决上面的一系列的问题,api网关应运而生
api网关是一个更加智能的应用服务器,它的定义类似于面向对象设计模式中的Facade模式,它的存在就像是整个微服务架构系统的门面一样,所有的外部客户端访问都需要经过它来进行调度和过滤,它除了要实现请求路由,负载均衡,校验过滤等功能。
spring cloud zuul通过与Eureka进行整合,将自身的服务注册到Eureka上,同时从Eureka中获取所有其他微服务的实例信息。这样的设计,zuul默认将会通过服务名作为ContextPath的方式来创建路由映射,部分情况下,这样的默认设置已经可以实现大多数的路由需求。除了一些特殊的(比如兼容一些老的url)还需要做一些特别的配置。但是相比与之前的架构下的运维工作量,通过引入spring cloud zuul实现api网关后,已经能够大大减少了。
其次,对于冗余的签名校验,登录校验在微服务架构中的冗余问题。可以独立成一个单独的服务存在,只是他们被剥离和独立出来之后,并不是给各个微服务调用,而是在api网关服务商进行统一调用来对微服务接口做前置过滤,以实现微服务接口的拦截和校验。spring cloud zuul提供了一套过滤机制,它可以很好的支持过滤的任务。
分布式配置——Spring Cloud Config
- config-server 配置服务端,服务管理配置信息
- config-client 客户端,客户端调用server端暴露接口获取配置信息