客户端负载均衡(Ribbon)

客户端负载实现

1、知道自己的请求目的地(虚拟主机名,默认是spring.application.name)
2、获取所有服务端地址列表(也就是注册表)。
3、选出一个地址,找到虚拟主机名对应的ip、port(将虚拟主机名 对应到 ip和port上)。
4、发起实际请求(最朴素的请求)。

Ribbion原理

  1. 拦截请求。
  2. 获取url。
  3. 通过url中 serviceName 获取 List。
  4. 通过负载均衡算法选取一个ServiceInstance。(负载算法可插拔自定义,并且可以通过配置文件或代码自定义
  5. 替换请求,将原来url中的 serviceName换成ip+port。

核心ILoadBalance

里面包括了所有的 服务提供者集群 的:ip和端口。每个服务都有一个ILoadBalancer,ILoadBalancer里面有该服务列表

1、ILoadBalancer 承接 eureka 和 ribbon。获取服务地址列表,选择一个。
2、每个服务都有ILoadBalancer。
3、选择服务用 IRule(负载均衡策略)。

处理无用的服务:
两种方法:
​ 1.更新机制,更新最新的服务。
2.ping机制,试试服务好不好。

负载均衡策略

默认:ZoneAvoidanceRule(区域权衡策略)
BestAvailableRule(最低并发策略)
RoundRobinRule(轮询策略)
。。。

配置饥饿加载

ribbon:
eager-load:
enabled: true
clients:
- SERVICE-NAM

总结

  1. 几种负载均衡。(硬,软(服务端,客户端(Ribbon)))
  2. Ribbon可以单独使用。需要提供服务地址列表。
  3. 原理。拦截请求,然后替换地址(servicename到ip+port)。
  4. 源码。ILoadBalancer,Map<服务名,ILoadBalancer>
  5. @LoadBalanced,拦截器。(LoadBalancerInterceptor中intercept)
  6. 自定义配置:java配置,yml配置。
  7. 自定义负载均衡策略

自定义负载配置

1,java

//所有client走入该配置
@RibbonClients(defaultConfiguration = RibbonConfiguration.class)
//RibbonConfiguration中可使用ribbon提供负载,或自定义负载
//单个client走入该配置
@RibbonClient(name = "service-name",configuration = RibbonConfiguration.class)

2,yml

//不添加service-name为所有
service-name:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
//自定义策略
service-sms:
  ribbon:
    # 自定义负载策略
    NFLoadBalancerRuleClassName: com.mybalance.RaymondRule
发布了25 篇原创文章 · 获赞 0 · 访问量 572

猜你喜欢

转载自blog.csdn.net/RaymondCoder/article/details/105214524
今日推荐