ribbon是什么
实现客户端负载均衡的工具,什么是负载均衡呢,简单来说就是将用户的请求平摊到多个服务上,从而达到系统的高可用,其实就是客户端如何去选择最优的服务,现实场景可能有多个服务但是客户端如果每次调用都是同一个服务那这个服务可能会崩溃,负载均衡的目的就是让客户端选择当前最优的服务。

负载均衡的简单分类

  • 集中式LB
    既在服务的消费方和提供者之间使用独立的LB设施,如Nginx:反向代理服务器!,由设备负责把访问的请求通过某种策略转发至服务的提供方!
  • 进程式LB
    将LB逻辑集成到消费方,消费方从注册中心获知有哪些地址可用,然后自己再从这些地址中选出一个合适的服务器!
    Ribbon就属于进程式LB,他只是一个类库,集成于
    消费方进程,消费方通过它来获取到服务提供方的地址

Ribbon集成

在消费方导入依赖,如果对于eureka不太了解的可以看下文章开头的链接

sspringboot 负载均衡 负载均衡ribbon_java


启动类加入eureka注册

sspringboot 负载均衡 负载均衡ribbon_ribbon_02


加入注解@LoadBalanced,在使用 RestTemplate 的时候 如果 RestTemplate 上面有 这个注解,那么 这个 RestTemplate 调用的 远程地址,会走负载均衡器。

sspringboot 负载均衡 负载均衡ribbon_sspringboot 负载均衡_03


修改地址

sspringboot 负载均衡 负载均衡ribbon_ribbon_04


通过注册进来的服务提供者服务名来访问,这个服务提供者服务包含了多个服务如7001 7002 7003等

sspringboot 负载均衡 负载均衡ribbon_服务提供者_05


启动服务消费者 然后访问 访问成功 值得注意的是ribbon 和 eureka整合以后 客户端可以直接调用 不用关心ip地址和端口号

sspringboot 负载均衡 负载均衡ribbon_eureka_06


但是我们要怎么看到真实的效果呢 所以接下来我们来验证一下

首先我们加入额外的两个数据库和不同的服务提供者db2 和db3都是同样的结构除了里面的数据不一样别的都一样

sspringboot 负载均衡 负载均衡ribbon_java_07


在加入不同的服务提供者 文件可以复制过来注意修改yml文件和启动类

sspringboot 负载均衡 负载均衡ribbon_sspringboot 负载均衡_08


启动eureka服务7001 7002 启动服务提供者 8001 8002 然后启动80端口的消费者

由于我电脑性能原因开多了就会挂掉所以这里我就只开两个

sspringboot 负载均衡 负载均衡ribbon_ribbon_09


第一次访问可以看到他去拿取的数据是dbcloud1

sspringboot 负载均衡 负载均衡ribbon_服务提供者_10

第二次拿取的数据就是dbcloud2

sspringboot 负载均衡 负载均衡ribbon_eureka_11


至此验证成功!