• 关于Ribbon


    一.Ribbon是什么

    Ribbon是一个客户端负载均衡器,它可以很好地控制HTTP和TCP客户端的行为。

    Ribbon 是netflix 公司开源的基于客户端的负载均衡组件,是Spring Cloud大家庭中非常重要的一个模块;

    主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。这个负载均衡指的是客户端的负载均衡。

    Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。

    简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随即连接等)去连接这些机器。

    二.Ribbon能做什么

    主要实现中间层应用层析的负载均衡。Ribbon提供以下特性:

    (1)负载均衡器,可支持插拔式的负载均衡规则。

    (2)对多种协议提供支持,例如HTTP、TCP、UDP。

    (3)集成了负载均衡功能的客户端。

    三.Ribbon原理

    Spring Cloud将Ribbon的API进行了封装,使用者可以使用封装后的API来实现负载均衡,也可以直接使用Ribbon的原生API。

    Ribbon主要有以下三大子模块:

    (1)ribbon-core:该模块为Ribbon项目的核心,主要包括负载均衡器接口定义、客户端接口定义、内置的负载均衡实现等API。

    (2)ribbon-eureka:为Eureka客户端提供的负载均衡实现类。

    (3)ribbon-httpclient:对Apache的HttpClient进行封装,该模块提供了还有负载均衡功能的REST客户端。

    1、负载均衡器组件

    Ribbon的负载均衡器主要与集群中的各个服务器进行通信,负载均衡器需要提供以下基础功能:

    维护服务器的IP、DNS名称等信息。

    根据特定的逻辑在服务器列表中个循环。

    为了实现负载均衡的基础功能,Ribbon的负载均衡器有以下三大子模块:

    (1)Rule:一个逻辑组件,这些逻辑将会决定从服务器列表中返回哪个服务器实例。

    (2)Ping:该组件主要使用定时器来确保服务器网络可以连接。

    (3)ServerList:服务器列表,可以通过静态的配置确定负载的服务器,也可以动态指定服务器列表。如果动态指定服务器列表,则会有后台的线程来刷新该列表。

    Spring Cloud中定义了LoadBalancerClient为负载均衡器等接口,并且针对Ribbon实现了RibbonLoadBalancerClient,但是它在具体实现客户端负载均衡时,则是通过Ribbon的ILoadBalancer接口实现。

    负载均衡器LoadBalancer的实现原理图:

    2、负载均衡机制

    Ribbon的负载均衡器接口定义了服务器的操作,主要用于服务器的选择。在默认情况下会使用RoundRobinRule的规则逻辑。

    3、自定义负载规则

    如果想自定义负载均衡规则,可以编写一个IRule接口的实现类。在自定义规则类中,实现的choose方法调用了ILoadBalancer的getAllServers方法,返回全部服务器。

    可以根据自己业务规则返回指定的服务器。然后在客户端代码中调用负载均衡器的setRule(new MyRule(lb))设置负载规则为我们自定义的负载规则。

    4、Ribbon与Nginx区别

    Ribbon本地负载均衡,原理:在调用接口的时候,会在eureka注册中心上获取注册信息服务列表,获取到之后,缓存在jvm本地,使用本地实现rpc远程调用技术进行调用。即客户端实现负载均衡。

    Nginx服务器负载均衡,客户端所有请求都会交给nginx,然后再由nginx实现转发请求。即服务端实现负载均衡。

    应用场景

    Ribbon本地负载均衡器适合在微服务rpc远程调用,比如Dubbo、SpringCloud。

    Nginx服务负载均衡器适合针对服务器端,比如Tomcat、Jetty。

  • 相关阅读:
    WCF+Silverlight 制作一个简单RSS的阅读器(一)
    将Ironpython嵌入到你的程序中
    今天修改了网页
    开发小议
    Silverlight 可以支持windows2000了
    昨天晚上开始寻找圣诞的素材了
    需要每天的坚持!
    今天开始学习ADO.NET中的Connection对象(一)SqlConnection对象连接SQL Server
    一个基于Ajax简单的数据验证
    《微软:DirectShow开发指南》第4章 Capturing Audio with DirectShow
  • 原文地址:https://www.cnblogs.com/ZJOE80/p/13023760.html
Copyright © 2020-2023  润新知