专栏首页只喝牛奶的杀手Ribbon负载均衡策略

Ribbon负载均衡策略

载均衡算法数量较多,而且可以根据一些业务特性进行定制开发,抛开细节上的差异,根据算法期望达到的目的,大体上可以分为下面几类。

任务平分类:负载均衡系统将收到的任务平均分配给服务器进行处理,这里的“平均”可以是绝对数量的平均,也可以是比例或者权重上的平均。

负载均衡类:负载均衡系统根据服务器的负载来进行分配,这里的负载并不一定是通常意义上我们说的“CPU 负载”,而是系统当前的压力,可以用 CPU 负载来衡量,也可以用连接数、I/O 使用率、网卡吞吐量等来衡量系统的压力。

性能最优类:负载均衡系统根据服务器的响应时间来进行任务分配,优先将新任务分配给响应最快的服务器。

Hash 类:负载均衡系统根据任务中的某些关键信息进行 Hash 运算,将相同 Hash 值的请求分配到同一台服务器上。常见的有源地址 Hash、目标地址 Hash、session id hash、用户 ID Hash 等。

Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。

Ribbon的负载均衡策略如下图,提供了7种策略,我们可以根据自己的业务场景指定;当然也可以通过继承AbstractLoadBalancerRule自定义rule。

Ribbon的默认负载均衡策略是ZoneAvoidanceRule,也就是同一个zone下面的service去轮询。

官网给出的的默认beans:

Spring Cloud Netflix provides the following beans by default for ribbon (BeanType beanName: ClassName):

  • IClientConfig ribbonClientConfig: DefaultClientConfigImpl
  • IRule ribbonRule: ZoneAvoidanceRule
  • IPing ribbonPing: NoOpPing
  • ServerList<Server> ribbonServerList: ConfigurationBasedServerList
  • ServerListFilter<Server> ribbonServerListFilter: ZonePreferenceServerListFilter
  • ILoadBalancer ribbonLoadBalancer: ZoneAwareLoadBalancer

当然我们可以通过ZonePreferenceServerListFilter,去指定对应的zone。

    @Bean
    public ZonePreferenceServerListFilter serverListFilter() {
        ZonePreferenceServerListFilter filter = new ZonePreferenceServerListFilter();
        filter.setZone("XXX");
        return filter;
    }

集成Ribbon之后,整个负载均衡的调用过程:

负载均衡算法归根揭底是一个任务分配算法,至于那个任务分配算法合适,需要根据实际场景来判断。

本文分享自微信公众号 - 只喝牛奶的杀手(killerhub),作者:只喝牛奶的杀手

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 计算资源合并模式

    云应用程序通常实现各种操作。 在某些解决方案中,合理的做法是最初遵循问题分离的设计原则,将这些操作划分成分别进行托管和部署的单独计算单元(例如,作为单独的应用服...

    只喝牛奶的杀手
  • 幂等性

    不知道幂等性我也就忍了,但总知道防止表单重复提交吧?让我们看一下业务场景,如下图:

    只喝牛奶的杀手
  • 开发应该知道的Linux系统分析-IO篇

    小文件读写的性能瓶颈是磁盘的寻址(随机读写性能更差),评估的标准是tps。大文件读写的性能瓶颈是带宽,评估的标准是持续的读写速度。Linux可以利用空闲内存作文...

    只喝牛奶的杀手
  • 高性能负载均衡软件HAProxy

    image.png HAProxy是一个负载均衡软件,开源、高性能,可应用于TCP(第四层)和HTTP(第七层) 借助HAProxy可以快速、可靠地提供基于TC...

    dys
  • 抬头三尺有Echo:领先苹果,亚马逊把智能音箱装进你家天花板

    一大早,你和生命中最后一个房东挥挥手再见,带着全部的家当和Toby——一只5岁的哈士奇——搬到了你亲自攒首付买下的房子里。

    量子位
  • VB.NET 返回文件属性信息

    Public Sub xlfileinfo(Optional ByVal 全路径 As String = "")

    巴西_prince
  • 如何用ABAP代码读取CDS view association的数据

    我有如下一个CDS view, 这个view的数据来自CRMD_ORDERADM_H, 定义了一个名称为_statushelp的association, 指向了...

    Jerry Wang
  • 数据挖掘从入门到放弃(五)seaborn 的数据可视化

    “ 数据可视化可以让我们很直观的发现数据中隐藏的规律,察觉到变量之间的互动关系,帮助我们更好地解释现象和发现数据价值,做到一图胜千文的说明效果。http://s...

    WindyQin
  • 基于CentOS安装FTP服务器

    操作系统环境: CentOS Linux release 7.4.1708 (Core) 使用yum安装ftp服务: yum install -y vsftpd...

    用户1679793
  • Android深入四大组件(四)广播的注册、发送和接收过程

    前言 我们接着来学习Android四大组件中的BroadcastReceiver,广播主要就是分为注册、接收和发送过程。建议阅读此文前请先阅读Android深入...

    用户1269200

扫码关注云+社区

领取腾讯云代金券