【微服务笑传】Ribbon:我不是丝带,我是微服务界的“交通警察“!

张开发
2026/4/18 6:00:21 15 分钟阅读

分享文章

【微服务笑传】Ribbon:我不是丝带,我是微服务界的“交通警察“!
很多人第一次听到 Ribbon 这个名字可能会想到 丝带、缎带 之类的东西。但在微服务的世界里Ribbon 可不是什么装饰品它是一位兢兢业业的 交通警察专门负责指挥服务调用的流量让我们的系统跑得又快又稳一、Ribbon 到底是个啥简单来说Ribbon 是 Netflix 开源的一个客户端负载均衡工具它工作在服务消费者端帮我们把请求均匀地分发到多个服务提供者实例上。想象一下你开了一家奶茶店生意火爆雇了 5 个店员做奶茶。如果所有顾客都只找第一个店员点单那这个店员会累死其他 4 个却闲得抠脚。这时候就需要一个 店长 来分配任务让每个店员都有事做整体效率最大化。Ribbon 就是微服务世界里的这个 店长它提供了多种负载均衡策略最常用的就是轮询策略按顺序挨个来你一个我一个公平公正随机策略摇骰子决定全看运气还有权重、响应时间加权等高级策略划重点Ribbon 是客户端负载均衡和 Nginx 这种服务端负载均衡不一样哦客户端自己知道所有服务提供者的地址然后自己决定调用哪个。二、好消息Nacos 已经帮我们集成好了 Ribbon在 Spring Cloud Alibaba 的时代使用 Ribbon 变得异常简单。因为Nacos 已经默认集成了 Ribbon我们不需要单独引入任何启动器依赖是的你没看错只要你在项目中引入了spring-cloud-starter-alibaba-nacos-discovery依赖Ribbon 就自动跟着进来了。这就像你买了个手机充电器已经在包装盒里了不用再单独花钱买。三、3 分钟上手 Ribbon真的就这么简单第一步给 RestTemplate开个挂Ribbon 的核心原理其实很简单就三步拦截器拦截请求获取服务名对应的所有服务实例列表根据负载均衡算法从列表中选出一个实例把 URL 中的服务名替换成实际的 IP 和端口然后发起调用要开启这个神奇的功能只需要在 RestTemplate 的 Bean 上加上一个注解就这一个注解瞬间让你的 RestTemplate 从 普通青年 变成 负载均衡高手第二步用服务名调用服务现在你再也不用硬编码服务的 IP 和端口了直接用服务名来调用就行是不是超级方便Ribbon 会自动帮你把http://ribbon-provider解析成实际的服务地址。第三步换个负载均衡策略就这么任性默认情况下Ribbon 使用的是轮询策略。但如果你想换个策略比如随机策略也非常简单就这么一个 Bean整个系统的负载均衡策略就变了是不是感觉自己掌控了一切四、Ribbon 的 小秘密它是怎么工作的很多人用了 Ribbon 很久却不知道它背后的原理。其实 Ribbon 的核心组件就几个ILoadBalancer负载均衡器的核心接口负责维护服务实例列表IRule负载均衡策略接口决定如何从列表中选择实例IPing心跳检测接口定期检查服务实例是否可用当你发起一个请求时Ribbon 先从 Nacos 拉取最新的服务实例列表然后用 IPing 组件检查哪些实例是健康的最后用 IRule 组件根据策略选出一个实例把请求转发给这个实例整个过程行云流水你甚至感觉不到它的存在但它却在默默守护着你的系统稳定性。五、常见坑点避坑指南忘记加 LoadBalanced 注解这是最常见的错误不加这个注解RestTemplate 无法解析服务名会报 UnknownHostException。服务名写错服务名是大小写敏感的如果你的服务叫 ribbon-provider就不能写成 Ribbon-Provider。多个服务使用相同的负载均衡策略如果你想给不同的服务指定不同的策略需要使用RibbonClient注解而不是全局配置。六、总结Ribbon 作为微服务架构中的基础组件虽然简单但却不可或缺。它让我们的服务调用变得更加灵活、可靠、高效。回顾一下今天的内容Ribbon 是客户端负载均衡工具工作在消费者端Nacos 已经默认集成了 Ribbon无需额外依赖只需一个 LoadBalanced 注解就能让 RestTemplate 拥有负载均衡能力可以通过配置 IRule 来切换不同的负载均衡策略好了今天的 Ribbon 教程就到这里是不是觉得原来负载均衡也没那么难互动环节你在使用 Ribbon 的过程中遇到过什么有趣的问题吗你最喜欢用哪种负载均衡策略欢迎在评论区留言分享如果这篇文章对你有帮助别忘了点赞、收藏、关注三连哦我们下期再见拜拜

更多文章