Ribbon负载均衡

简介: 负载均衡是高并发系统中的关键技术,通过将流量分发至多台服务器,提升系统性能与可用性。本文详解其原理、分类(硬件/软件)、算法及Ribbon的客户端实现机制,涵盖自定义策略与饥饿加载优化,并引导思考Nacos、ZooKeeper等不同场景下的负载均衡实现方式。(238字)

1.负载均衡
1.1 什么是负载均衡
传统架构下的网站,随着流量的增加,高并发、海量数据的挑战逐步而来。为了提升系统的性能,架构师们往往开始从垂直扩展、水平扩展两个角度来解决问题:
垂直扩展
网站发展的早期可以通过增加服务器的硬件处理能力:CPU、内存、磁盘等方面提升服务器处理的能力,然而单机的瓶颈总是存在的,一旦触及瓶颈想再提升,付出的成本会极高,显然这不符合分布式系统的设计理念。
水平扩展
通过集群部署的方式,将一台服务器的请求压力,分摊到多台机器上,集群中的应用服务器通常被设计成无状态。但是如何将流量均匀分摊到各机器上,或优先分配到高性能机器上又成了一个问题,由此引申出“负载均衡”的概念。
负载均衡(Load Balance)是如今高并发、高可用系统中不可或缺的关键组件,目标是:尽力将用户流量按照架构设计分发(并非一定均匀)到集群中多台服务器上,从而提高系统整体的响应速度和可用性。
1.2 负载均衡分类
硬件负载均衡(包括但不限于)
F5
A10
软件负载均衡(包括但不限于)
Nginx
HAProxy
LVS
1.3 负载均衡算法
为不影响章节重点,需做进一步了解的可移步:负载均衡算法
2.Ribbon如何实现负载均衡
Ribbon与大多数负载均衡实现机制一样在客户端实现(不同于后续我们讲解的Nacos,Nacos在服务端实现),其主要流程为:
在RestTemplate标注@LoadBalanced注解,此时通过RestTemplate发起的RESTful请求都会被负载均衡
当请求发起时,会被LoadBalancedInterceptor拦截,其主要实现两个功能:
从多个可用Server中选择一个Server,选择算法即上述1.3中之一
重构请求URI:服务名-->具体ip、端口
LoadBalancerClient内部持有LoadBalancer并调用getServer方法得到一个Server,而这个Server是通过Eureka服务注册,ILoadBalancer持有的upServerList、allServerList中获取(底层依赖ServerListUpdater动态更新所有serverList)
完整源码交互流程总结如下,感兴趣的可做进一步研究:
3.Ribbon自定义负载均衡策略
1.代码声明式注册
在启动类追加以下代码即可,此优先级更高,但修改必须重启应用,且全局生效
通过查看IRule实现类,可以做其余负载均衡实现方案的更多测试
2.配置文件声明式配置
此配置优点在于不用重启应用,打包发布,但缺点是无法做到全局配置,必须声明规则对应的服务
4.Ribbon饥饿加载
在上述的测试中不知是否有读者发现:当请求第一次到某个实例时,其响应速度明细要慢一点,这里就是因为Ribbon默认采用饥饿加载,只有访问时才会创建LoadBalanceClient,从而导致第一次时间要长点,日志如下:
修改饥饿加载前启动日志
修改饥饿加载前访问日志
修改饥饿加载机制,通过在配置文件中追加以下配置即可
修改饥饿加载后启动日志
修改饥饿加载后访问日志
至此我们的工程如下,有需自行下载导入:
cloud.zip
(52 KB)
5.总结
上一节就已经实现的负载均衡笔者并未深入探讨,本节通过分析负载均衡算法、Ribbon实现负载均衡的底层原理和实现过程,让大家对负载均衡有了一个大体认识,同时针对Ribbon自定义负载均衡策略,饥饿加载让大家对于Ribbon的了解又多一些。Ribbon实现的负载均衡只是方案之一,我们可以尽量多了解但不要局限于此。
负载均衡作为现如今架构必须考量的一个点,要了解和深入学习的地方还很多,如下一节我们要学习的Nacos是怎么实现的?它为什么反其道而行要在服务端实现?ZK也可作为注册中心它是怎么实现的?网关GateWay也可做负载均衡它又是怎么实现的呢?篇幅问题,更多的答案留给读者朋友们在未来的工作生涯中慢慢思考。
思考问题
Ribbon是什么?解决了什么问题?
Ribbon实现的是客户端,还是服务端负载均衡?
Ribbon如何实现负载均衡?
还有哪些技术点可以实现负载均衡?
负载均衡算法?如何实现?还有哪些技术有体现?

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
10月前
 Eureka服务注册与发现
Eureka服务注册与发现
 Eureka服务注册与发现
|
8月前
|
弹性计算 人工智能 运维
2026年阿里云服务器收费价格表(轻量/ECS/GPU,年付/月付/流量)
本文将详细介绍2026年阿里云服务器的收费价格表,涵盖轻量应用服务器、ECS云服务器和GPU服务器三大品类,以及年付、月付和按流量计费等多种模式。
1174 9
|
7月前
|
人工智能 自然语言处理 安全
企业自动化新模式:AI智能体+RPA
随着AI技术的发展,很多企业都感受到了提效的迫切性,从最开始的观望和了解状态,到今年纷纷把RPA和智能体的相关项目都列入了KPI。从表面看,这两类工具都可以帮我们干活,提升工作效率,都可以被称为“数字员工”,但在实际使用中,差异其实很大。如果对这两个概念理解不到位,很容易盲目跟风,选错方向,导致项目效果不理想。 一、RPA是什么?优劣势有哪些?RPA本质上是流程自动化工具,它可以模拟人工 ITPUB博客每天千篇余篇博文新资讯,40多万活跃博主,为IT技术人提供全面的IT资讯和交流互动的IT博客平台-中国专业的IT技术ITPUB博客。
|
7月前
|
缓存 监控 Java
Java 四大引用体系:从GC回收规则到框架底层实现的完整真相
Java四大引用(强、软、弱、虚)是JDK1.2引入的核心内存管理机制,精准控制对象回收时机。强引用防回收,软引用保缓存(OOM前清理),弱引用防泄漏(GC即回收),虚引用唯一可靠跟踪回收——配合ReferenceQueue实现堆外内存释放等关键兜底。90%开发者仅知皮毛,实为解决OOM、内存泄漏及理解ThreadLocal/NIO底层的基石。(239字)
579 4
|
7月前
|
弹性计算 人工智能 安全
想魔改 OpenClaw 给团队用?计算巢「克隆服务」帮你搞定
本文教你如何用阿里云计算巢的“克隆服务”功能,快速将二次开发的OpenClaw定制版打包为云上服务:克隆模板→制作自定义镜像→关联部署物→配置参数→测试发布,实现团队成员一键部署,省去手动配置烦恼。(239字)
529 0
|
人工智能 Kubernetes Cloud Native
2025 杭州 KCD & OID 合作社区与 Keynote 演讲报名开启‌
自 2025 KCD 杭州 & OID 开放议题征集以来,我们已收到大量来自社区专家、工程师和开发者投递的丰富多样的精彩议题。感谢大家的热情参与!目前 CFP 截止还剩不到 10 天,我们诚挚期待更多围绕云原生技术、Kubernetes 生态、OpenInfra 生态及 AI 前沿相关的内容分享——无论是技术解读、实战经验还是最佳实践,都欢迎投稿!
687 79
|
10月前
|
安全 物联网
RFID高校电动车管理步入智能化
随着高校内电动车数量的增加,RFID 技术的应用让高校电动车管理逐渐步入智能化。RFID技术在电动自行车出入管理中的应用具有多方面的优势,为学校电动车管理提供更多功能和服务,RFID高校电动车管理步入智能化。
|
10月前
|
JSON Java fastjson
Spring Boot返回Json数据及数据封装
Spring Boot默认使用Jackson处理JSON,通过@RestController可直接返回JSON数据。本文详解Jackson与FastJson的配置与对比,并封装统一的JSON返回结构,提升前后端交互规范性与开发效率。
|
10月前
|
Java Spring
Spring Boot开发环境搭建和项目启动
图片展示了一幅色彩斑斓的抽象艺术画作,流动的线条与绚丽的色块交织,营造出梦幻般的视觉效果,仿佛宇宙星河或意识流的具象化表达,引人遐想。
|
安全 Shell API
FileCodeBox:像拿快递一样轻松分享文件
FileCodeBox 是一个基于 FastAPI + Vue3 开发的轻量级文件分享工具。它允许用户通过简单的方式分享文本和文件,接收者只需要一个提取码就可以取得文件,就像从快递柜取出快递一样简单。
785 17
FileCodeBox:像拿快递一样轻松分享文件