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服务
    • 服务及其元数据管理
  • 注册中心原理

  • 配置中心原理

img img

Nacos 客户端会长轮训循环请求服务端变更的数据,并且超时时间设置为30s,当配置发生变化时,请求的响应会立即返回,否则会一直等到 29.5s+ 之后再返回响应。