Service Provider: 暴露服务的提供方。
Service Consumer:调用远程服务的服务消费方。
EureKa Server: 服务注册中心和服务发现中心。
Spring Cloud运行基础组件:
服务治理: Spring Cloud Eureka
Eureka是微服务架构中的注册中心,专门负责服务的注册与发现
客户端负载均衡: Spring Cloud Ribbon
Ribbon作用是负载均衡,会帮你在每次请求时选择一台机器,均匀的把请求分发到各个机器上。默认使用的最经典的Round Robin轮询算法。
服务容错保护: Spring Cloud Hystrix
Hystrix是隔离、熔断以及降级的一个框架。通过Hystrix的线程池来发起请求,不同的服务走不同的线程池,实现了不同服务调用的隔离,避免了服务雪崩的问题
声明式服务调用: Spring Cloud Feign
Feign的一个关键机制就是使用了动态代理:
首先,如果你对某个接口定义了@FeignClient注解,Feign就会针对这个接口创建一个动态代理
接着你要是调用那个接口,本质就是会调用 Feign创建的动态代理,这是核心中的核心
Feign的动态代理会根据你在接口上的@RequestMapping等注解,来动态构造出你要请求的服务的地址
最后针对这个地址,发起请求、解析响应
API 网关服务:Spring Cloud Zuul
如果前端、移动端要调用后端系统,统一从Zuul网关进入,网关会根据请求中的一些特征,将请求转发给后端的各个服务。
好处是可以做统一的降级、限流、认证授权、安全,
大致流程如下:
所有请求都统一通过 API 网关(Zuul)来访问内部服务。
网关接收到请求后,从注册中心(Eureka)获取可用服务。
由 Ribbon 进行均衡负载后,分发到后端的具体实例。
微服务之间通过 Feign 进行通信处理业务。
Hystrix负责处理服务超时熔断
SpringCloud相较于Dubbo来说更为全面,拥有服务治理,配置服务,网关路由,异常处理等,比Dubbo更全面,尤其是在结合SpringBoot框架时只需添加依赖,使用方便,简化配置文件。在集群中各功能组件协调工作时使用SpringCloud架构项目能承受更高并发量,具有更强大的容错高可用性。
三、服务降级:(服务治理时配置服务降级,或代码级别设置)
服务降级就是当服务响应超时或连接请求超时,不用继续等下去,而采用降级措施,意思就是返回一个planB,返回一个我们自己定义好的提示。
而为什么要使用服务降级,这是防止分布式服务发生雪崩效应,什么是雪崩?就是蝴蝶效应,当一个请求发生超时,一直等待着服务响应,那么在高并发情况下,很多请求都是因为这样一直等着响应,直到服务资源耗尽产生宕机,而宕机之后会导致分布式其他服务调用该宕机的服务也会出现资源耗尽宕机,这样下去将导致整个分布式服务都瘫痪,这就是雪崩。如果你要问为什么不做集群?集群当然做,但是一台服务宕机之后,其他流量分发到其他集群机器上,压力也会随之加大,时间久了整个集群也会垮了,这只是个时间问题。为了防止产生了雪崩效应那么就该对服务配置降级,一旦请求超过规定时间立即返回自定义好的提示,无需继续等待。
几种服务降级方式:
服务接口拒绝服务:无用户特定信息,页面能访问,但是添加删除提示服务器繁忙。页面内容也可在CDN内获取。
页面拒绝服务:页面提示由于服务繁忙此服务暂停。跳转到nginx的一个静态页面。
延迟持久化:页面访问照常,但是涉及记录变更,会提示稍晚能看到结果,将数据记录到异步队列或log,服务恢复后执行。
随机拒绝服务:服务接口随机拒绝服务,让用户重试,目前较少有人采用。因为用户体验不佳。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------