Java框架-SpringCloud
springcloud五大组件
- 1、Eureka实现服务治理;
- 2、Ribbon主要提供客户侧的软件负载均衡算法;
- 3、Hystrix断路器,保护系统,控制故障范围;
- 4、Zuul,api网关,路由,负载均衡等多种作用;
- 5、Config配置管理
eurake
- eurake提供服务治理的能力,服务提供者启动时会将服务信息注册到eurake;
- eurake是ap的一致性协议,这个和zk不同,更加注重服务的可用性,自我保护机制和集群部署方式都体现了这个ap
- 自我保护机制:eurake在一段时间内接收到心跳续约低于85%的时候,会进入自我保护,判定为网络服区,延迟剔除服务下线。
- eurake集群:多个eurake实例组成集群时,实例之间平等,不存在主从,并且通过复制实现实例之间注册信息的同步
- eurake的心跳续约:通过客户端主动发起心跳进行服务续约
Hytrix
资源隔离:每个下游服务都维护了一个小型的线程池(或者信号量),这样其中一个下游故障时**
不会影响到其他下游**的调用- 线程池隔离:每个服务都为一个个独立的线程池,不同服务的线程相互不干扰。
- 使用一个大的线程池,通过权重为某个方法分配一个固定大小的线程数
- 利用ConcurrentHashMap来存储线程池,key是方法名,值是每个方法对应的一个ThreadPool
- 信号量隔离:可以使用**
信号量(或者计数器)来限制当前依赖调用的并发数**,而不是使用线程池或者队列。 - 对比:
信号量的大小可以动态调节,线程池却不行。- 对于**
不依赖网络**访问的服务,比如只依赖内存缓存,就不适合用线程池隔离技术,而是采用信号量隔离。 - 如果客户端是可信的,且能**
快速返回**,可以使用信号量来代替线程隔离,降低开销。
- 线程池隔离:每个服务都为一个个独立的线程池,不同服务的线程相互不干扰。
服务降级:某个服务出现问题时,可以提供备用的响应数据,避免用户直接面对错误或超时(
每次调用失败都会走fallback,实现降级)熔断机制:限制故障服务的访问(
服务错误太多时,不再往下游走直接服务降级走fallback),熔断一定时间后会通过一个请求,如果成功则不再熔断,否则继续熔断超时控制:防止长时间的等待,避免资源的浪费和系统的阻塞
hystrix|ribbon|feign超时配置
- 组件关系:
- hystrix超时配置:在配置的最外层,可以决定请求的超时时间。只有一个配置项表示整个请求的时间
- ribbon超时配置:包括重试次数、负载服务数量、连接请求超时、读取请求超时
- (1 + MaxAutoRetries) * (1 + MaxAutoRetriesNextServer)* (ConnectTimeout + ReadTimeout)
- feign超时配置:如果没有设置 feign 超时,就会读取 ribbon 的配置,否则使用 feign 自身的设置。两者是二选一的,且 feign 优先。
nacos
功能:
- 服务发现和服务健康监测
- 配置管理动态配置服务
- 动态DNS服务
- 服务及其元数据管理
注册中心原理
配置中心原理
Nacos 客户端会长轮训循环请求服务端变更的数据,并且超时时间设置为30s,当配置发生变化时,请求的响应会立即返回,否则会一直等到 29.5s+ 之后再返回响应。
