SpringCloud学习-更新中

源码仓库:github-CNXMBuyu-springclouddemo

Eureka

用法看源码

服务注册中心的一些基本操作如下图:

  • EurekaClient:包含服务提供者和服务调用者
  • EurekaServer:Eureka服务器
    在这里插入图片描述

register - 服务注册

EurekaClient向EurekaServer提供自身的元数据。

renew - 服务续约

EurekaClient在默认情况下,每隔30秒会发送一次心跳来进行服务续约。通过服务续约来告知服务器,该EurekaClient是可用的。

正常情况下,如果EurekaServer在90秒内没有收到EurekaClient的心跳,则会将EurekaClient实例从注册列表中移除。

fetchRegistry - 获取服务注册列表信息

EurekaClient从EurekaServer获取服务注册表信息,并将其缓存在本地。EurekaClient会使用服务注册列表信息查找其他服务的信息,从而进行远程调用。

默认30秒更新一次

cancel - 服务下线

EurekaClient在程序关闭时可以向EurekaServer发送下线请求。

DiscoveryManager.getInstance().shutdownComponent();

构建EurekaServer集群

Ribbon

用法看源码

在测试负载均衡时,需要把配置eureka.instance.preferIpAddress=true加上,不然会调用超时(或者配置hosts文件也可以)。

简介

将负载均衡逻辑以代码的形式封装到服务消费者的客户端上,服务消费者客户端维护了一份服务提供者的信息列表,有了信息列表,通过负载均衡策略将请求分摊给多个服务提供者,从而达到负载均衡的目的。

Ribbon作为服务消费者的负载均衡器,有两种使用方式。一种是和RestTemplate相结合,另一种是和Feign相结合。

LoadBalancerClient介绍

负载均衡器LoadBalancerClient是从EurekaClient获取服务注册列表信息的,并将服务注册列表信息缓存一份。根据负载均衡策略选择一个服务实例的信息,从而进行负载均衡。

可以通过配置ribbon.eureka.enable=false,来禁止调用EurekaClient获取注册列表,通过配置stores.ribbon.listOfServers=a.com,b.com

IRule

  • BestAvailableRule:选择最小请求数
  • ClientConfigEnabledRoundRobinRule:轮询
  • RandomRule:随机选择一个server
  • RoundRobinRule:轮询选择server
  • RetryRule:根据轮询的方式重试
  • WeightedResponseTimeRule:根据响应时间分配一个weight,weight越低,被选择的可能性就越低
  • ZoneAvoidanceRule:根据server的zone区域和可用性来轮询选择
// 改变负载均衡的策略
@Bean
public IRule rule(){
    return new RandomRule();
}

IPing

  • PingUrl:真实地去ping某个url,判断其是否可用
  • PingConstant:固定返回某个服务是否可用,默认返回true,即可用
  • NoOpPing:不去ping,直接返回true,即可用
  • DummyPing:直接返回true,并实现了initWithNiwsConfig方法
  • NIWSDisconveryPing:根据DiscoveryEnabledServer的InstanceInfo的InstancesStatus去判断,如果为InstanceStatus.UP,则可用,否则不可用。

负载均衡原理

  1. 通过EurekaClient获取服务注册列表
  2. 通过IPing,默认每10秒发送一次ping,来更新服务的注册列表信息
  3. 根据负载均衡策略来实现负载均衡

Feign

用法看源码

Hystrix

工作机制

  1. 当某个API服务在一定时间内失败的次数大于设定的阈值,则打开熔断器;打开熔断器的服务会执行快速失败的逻辑(即fallback指定的方法)
  2. 处于打开的熔断器,过一段时间会处于半打开模式状态。(一部分执行正常逻辑,一部分执行失败逻辑)
  3. 自我修复能力。当执行正常逻辑的请求都成功了,则关闭熔断器,否则继续打开熔断器。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章