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 条评论
登录 后参与评论

相关文章

来自专栏琯琯博客

awesome-mysql-cn资源

MySQL 资源列表,内容包括:分析工具、备份、性能测试、配置、部署、GUI 等。 分析工具 性能,结构和数据分析工具 Anemometer - 一个 SQL ...

3238
来自专栏CSDN技术头条

腾讯大规模Hadoop集群实践

TDW(Tencent distributed Data Warehouse,腾讯分布式数据仓库)基于开源软件Hadoop和Hive进行构建,打破了传统数据仓库...

3667
来自专栏EAWorld

全网首发:逐一解读云原生应用开发“12-Factors”

作者自序: 12原则的提出已有五年之久,可惜业界一直缺乏一篇对其进行简明解读的指导性文章,所以我决定写这样一篇文章。在微服务模式的大背景下,力求对12原则的来龙...

3068
来自专栏张善友的专栏

Twemproxy——针对MemCached与Redis的代理

Twemproxy是一个代理服务器,可以通过它减少Memcached或Redis服务器所打开的连接数。 Twemproxy有何用途呢?它可以: 通过代理的方式减...

1749
来自专栏散尽浮华

OpenStack构架知识梳理

OpenStack既是一个社区,也是一个项目和一个开源软件,提供开放源码软件,建立公共和私有云,它提供了一个部署云的操作平台或工具集,其宗旨在于:帮助组织运行为...

2229
来自专栏CSDN技术头条

Google的大规模集群管理系统Borg(上篇)

摘要:Google的Borg系统是一个运行着成千上万项作业的集群管理器,它同时管理着很多个应用集群,每个集群都有成千上万台机器,这些集群之上运行着Google的...

2198
来自专栏云计算

Kubernetes服务网格(第10部分):服务网格API

作为上个月发布的Linkerd 1.0的一部分,我们发现一些人已经开始注意Linkerd的服务网格API。随着1.0版本的发布,我们认为需要花些时间来解释这个A...

2156
来自专栏程序猿

【云计算知识普及】负载均衡

负载均衡-Load Balance 负载均衡 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力...

2816
来自专栏Spark学习技巧

干货:Flink+Kafka 0.11端到端精确一次处理语义实现

实时处理里消息的仅一次处理是大家关注的重点吧,前面浪尖分享过一篇对比spark streaming 和 flink的文章 <Spark Streaming VS...

1053
来自专栏IT大咖说

VMware云管平台运维管理

摘要 跨 SDDC 和多云环境从应用到基础架构的智能 IT 运维管理。与 vRealize Log Insight 和 vRealize Business fo...

3735

扫码关注云+社区