springcloud学习手册-Ribbon(第一节)

导读 | 介绍什么是Ribbon,主要概念和内容

前几天学习了Eureka ,今天咱们再来学习springcloud 的第三部分内容Ribbon

那什么是 Ribbon呢?

、Spring Cloud Ribbon 客户端负载均衡

Ribbon是Netflix发布的云中间层服务开源项目,其主要功能是提供客户端侧负载均衡算法。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。Bibbon 的架构图如下所示:

简单的说,Springcloud Ribbon 是一个基于HTTP和TCP的客户端负载均衡工具。Springcloud 将面向服务的REST 模板请求自动转换成客户端负载均衡的服务调用 。我们可以在配置文件中列出Load Balancer后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器,我们也很容易使用Ribbon实现自定义的负载均衡算法。

客户端负载均衡是对系统的高可用、网络压力的缓解和处理能力扩容的重要手段之一。通常意思上的负载均衡是指服务端负载均衡其中分为硬件负载均衡和软件负载均衡。硬件和软件负载基本原理图如下所示:

客户端负载均衡中所有客户端节点都要维护着自己要访问的服务端清单,这些服务端的清单来自于服务注册中心(Eureka)。

二、实现客户端负载均衡

服务提供者(Service Provider)只需要启动多个服务实例并注册到一个注册中心或是多个相关联的服务注册中心。

服务消费者(Service consumer)直接通过调用被@LoadBalanced 注解修饰过的TestTemplate 来实现面服务的接口调用。

三、Eureka使用Ribbon架构

Ribbon工作时分为两步:

第一步先选择 Eureka Server,获取可用服务列表,从可用的服务列表中它优先选择在同一个Zone且负载较少的Server;

第二步再根据用户指定的策略,在从Server取到的服务注册列表中选择一个地址。其中Ribbon提供了多种策略,例如轮询round robin、随机Random、根据响应时间加权等。

四、负载均衡策略

  • 简单轮询负载均衡(RoundRobin)

以轮询的方式依次将请求调度不同的服务器,即每次调度执行i = (i + 1) mod n,并选出第i台服务器。

  • 随机负载均衡 (Random)

随机选择状态为UP的Server

  • 加权响应时间负载均衡 (WeightedResponseTime)

一 个后台线程定期的从status里面读取评价响应时间,为每个server计算一个weight。Weight的计算也比较简单responsetime 减去每个server自己平均的responsetime是server的权重。当刚开始运行,没有形成statas时,使用roubine策略选择 server。

  • 区域感知轮询负载均衡(ZoneAware)

区域感知负载均衡内置电路跳闸逻辑,可被配置基于区域同源关系(Zone Affinity,也就是更倾向于选择发出调用的服务所在的托管区域内,这样可以降低延迟,节省成本)选择目标服务实例。它监控每个区域中运行实例的行 为,而且能够实时的快速丢弃一整个区域。这样在面对整个区域故障时,帮我们提升了弹性。

五、Ribbon自带负载均衡策略比较

策略名

策略父类

策略描述

实现说明

BestAvailableRule

ClientconfigEnabledRoundRobinRule

选择一个最小的并发请求的server

逐个考察Server,如果Server被tripped了,则忽略,在选择其中ActiveRequestsCount最小的server

AvailabilityFilteringRule

PredicateBasedRule

过滤掉那些因为一直连接失败的被标记为circuit tripped的后端server,并过滤掉那些高并发的的后端server(active connections 超过配置的阈值)

使用一个AvailabilityPredicate来包含过滤server的逻辑,其实就就是检查status里记录的各个server的运行状态

WeightedResponseTimeRule

RoundRobinRule

根据相应时间分配一个weight,相应时间越长,weight越小,被选中的可能性越低。

一 个后台线程定期的从status里面读取评价响应时间,为每个server计算一个weight。Weight的计算也比较简单responsetime 减去每个server自己平均的responsetime是server的权重。当刚开始运行,没有形成statas时,使用roubine策略选择 server。

RetryRule

AbstractLoadBalancerRule

对选定的负载均衡策略机上重试机制。

在一个配置时间段内当选择server不成功,则一直尝试使用subRule的方式选择一个可用的server

RoundRobinRule

AbstractLoadBalancerRule

roundRobin方式轮询选择server

轮询index,选择index对应位置的server

RandomRule

AbstractLoadBalancerRule

随机选择一个server

在index上随机,选择index对应位置的server

ZoneAvoidanceRule

PredicateBasedRule

复合判断server所在区域的性能和server的可用性选择server

使 用ZoneAvoidancePredicate和AvailabilityPredicate来判断是否选择某个server,前一个判断判定一个 zone的运行性能是否可用,剔除不可用的zone(的所有server),AvailabilityPredicate用于过滤掉连接数过多的 Server。

声明:文章属于个人原创,转载请注明文章出处

原文发布于微信公众号 - 全华班(quanhuaban)

原文发表时间:2017-12-12

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大魏分享(微信公众号:david-share)

几种微服务部署方式对比与总结

在项目迭代的过程中,不可避免需要”上线“。上线对应着部署,或者重新部署;部署对应着修改;修改则意味着风险。 目前有很多用于部署的技术,有的简单,有的复杂;有的得...

3536
来自专栏苦逼的码农

TCP流量控制机制

上篇文章讲了TCP拥塞控制机制的原理,没看过的不妨看下:5分钟读懂拥塞控制,这篇文章讲讲TCP流量控制机制。

1512
来自专栏c++ tensorflow

Tensorflow c++实践(使用cmake vs2015 编译tensorflow源码)

写这篇文章的主要目的是为了总结这一个多月对tensorflow应用到c++语言上面走过的路。因为身边的人都少有使用c++实现tensorflow的使用,都是自己...

4.6K9
来自专栏企鹅号快讯

深度学习笔记:Tensorflow的安装——ubuntu下

前言 之前写过一篇在windows下安装Tensorflow的教程。有小伙伴说之前不是说在Ubuntu装过么把那个也发一下,所以,补上一篇。 ? 安装anaco...

19710
来自专栏redis集群

redis集群的高可用性实现

当主从的redis性能和容量满足不了项目的需求时,一般会采用集群方案。而原生的集群方案是一个比较好的选择。本文主要是讨论如何保证集群版高可用。高...

2774
来自专栏匠心独运的博客

分布式定时任务Elastic-Job框架在SpringBoot工程中的应用实践(二)

文章摘要:在生产环境中部署Elastic-Job集群后,那么如何来运维监控线上跑着的定时任务呢? 如果在生产环境的大规模服务器集群上部署了集成Elastic-...

1732
来自专栏Python爬虫与数据挖掘

手把手教你进行R语言的安装及安装过程中相关问题解决方案

这篇文章旨在为R语言的新手铺砖引路,行文相对基础,希望对在R语言安装上有问题的小伙伴提供帮助和指引。

1344
来自专栏马涛涛的专栏

Cookie与Session、LocalStorage与Sessionstorage 对比

SessionStorage 在用户关闭页面(准确的来说是会话(Session)结束)后就失效。其余的和localstorage一样

1032
来自专栏软件开发 -- 分享 互助 成长

抽象工厂模式

一、相关介绍 1、抽象工厂模式提供一个创建一系列相关或者相互依赖对象的接口,而无需指定它们具体的类。 2、UML图 ? 3、所属类别:创建型 二、C++程序 ...

1849
来自专栏云计算教程系列

如何在Ubuntu 14.04上设置R.

R是一种流行的开源编程语言,专门用于统计计算和图形。它被统计学家广泛用于开发统计软件和执行数据分析。R的优势之一是允许用户创作和提交自己的包,因此它具有高度且易...

520

扫码关注云+社区