Spring Cloud_Ribbon

作者: Cathy 分类: 编程开发 发布时间: 2023-07-12 04:25

负载均衡

负载均衡:将负载(工作任务、访问请求)进行平衡,分摊到多个操作单元(例如,服务器、组件)上进行执行
负载均衡保证了高性能、高可用(单点故障)、扩展性(水平伸缩)

负载均衡的方式

  • 应用集群:将同一应用部署到多个机器
  • 负载均衡设备:将用户的请求,根据负载均衡算法,分发到集群中的一台处理服务器

负载均衡的作用

  • 解决并发压力,提供应用处理性能
  • 提供故障转移,实现高可用
  • 通过添加或者减少服务器数据,提供网站的扩展性
  • 安全防护(负载均衡设备做一些过滤,黑白名单等)

负载均衡分类

  • 硬件负载均衡:F5
  • 软件负载均衡:Nginx
  • 服务端负载均衡:F5、Nginx
  • 客户端负载均衡:Ribbon

集中式 LB VS 进程内 LB

  • 集中式 LB:服务的消费方和提供方之间使用独立的负载均衡,例如 Nginx,由该设施负责把请求通过某种策略转发至服务的提供方
  • 进程内 LB:将负载均衡逻辑集成到消费方,消费方从服务注册中心获取哪些地址可用,然后自己从这些地址中选择一个合适的服务器
    Ribbon 属于进程内 LB,它只是一个类库,集成于消费方进程,消费方通过它来获取到服务提供方的地址

常见的负载均衡算法 / 均衡策略

  • 轮询:请求按照顺序轮流分配
  • 加权轮询:按照请求顺序和权重分配
  • 随机
  • 加权随机:按照权重随机请求
  • 源地址哈希法
  • 最小连接数法

Ribbon

  • 主要功能是提供客户端的负载均衡算法和服务调用
  • Ribbon 客户端组件提供一些列完善的配置项,比如连接超时,重试等
  • 在配置文件中列出 Load Balanced 后面的机器,Ribbon 会自动基于某种规则(简单轮训,随机连接等)去连接这些机器

Ribbon 核心组件

  • 负载均衡器 Load balancer:管理负载均衡的组件
  • 服务列表 Server List:获取所有服务的地址信息,并存到本地
  • 服务列表过滤 ServerListFilter:将获取到的服务列表按照过滤规则过滤
  • 服务列表更新 ServerListUpdater:从注册中心获取最新的注册表信息
  • 心跳检测 ping:检测哪些服务可用
  • 负载均衡策略 Rule

Ribbon 本地负载均衡客户端 VS Nginx 服务端负载均衡的区别

  • Nginx 是服务器负载均衡,客户端的所有请求都会交给 Nginx,即负载均衡是由服务端实现的
  • Ribbon 本地负载均衡,在调用微服务接口时,会在注册中心上获取信息列表,之后缓存到 JVM 本地,从而在本地实现 RPC 远程服务调用技术

==Ribbon 的负载均衡策略==

  • 线性轮询均衡:轮流依次请求不同的服务器,不需要记录当前所有连接的状态,是无状态调度
  • 可用服务过滤负载均衡:过滤故障和并发连接数量超过阀值的服务,对剩余的服务列表按照轮训策略进行访问
  • 加权响应时间负载均衡:为每个服务按响应时长分配权重,响应时间越长,权重越低,被选中的概率越低
  • 区域感知负载均衡:更倾向于选择发出调用的服务所在的区域内的服务,降低延迟,是 Ribbon 默认的策略
  • 重试负载均衡:通过轮训均衡选择服务器,如果请求失败或响应超时,可以选择重试
  • 高可用均衡:忽略请求失败的服务器,尽量找并发比较低的服务器,这种会给服务器集群带来成倍的压力
  • 随机负载均衡:随机选择服务器,适合并发比较大的场景

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注