概要
什么是Spring Cloud Netflix Ribbon?
实战:整合Ribbon实现负载均衡
Spring Cloud Netflix Ribbon是什么?
Spring Cloud Netflix Ribbon 是一个客户端负载均衡的组件.
什么是负载均衡?
负载均衡就是分发请求流量到不同的服务器,目前的实现有软件(ngnix,apache,HA Proxy)和硬件(F5,NSX,BigIP).
-
负载均衡分为两种:
服务器端负载均衡
如上图所示.服务器端负载均衡是对客户透明的,用户请求到LB服务器,真正的Application服务器是由LB服务器分发控制的.
客户端负载均衡
如图所示,它是客户端软件的一部分,客户端获知到可用的服务器列表按一定的均衡策略,分发请求.
Ribbon的特点
Ribbon就是这样一种客户端负载均衡的实现.
和Eureka完美整合
支持多种协议-HTTP,TCP,UDP
caching/batching
built in failure resiliency
实战:整合Ribbon实现负载均衡
目标:基于之前的例子,在sentence app中添加Ribbon负载均衡,启动两个noun app,使用不同的words数据,以验证Ribbon的效果.具体步骤如下:
sentence服务添加依赖 spring-cloud-starter-ribbon (pom.xml)
替换DiscoveryClient为LoadBalancerClient及其使用的方法(getWord)
public String getWord(String service) {
ServiceInstance instance = loadBalancer.choose(service);
return (new RestTemplate()).getForObject(instance.getUri(),String.class);
}
查看http://localhost:8020/sentence,看其是否能正常启动
-
停掉量词服务,为了Eureka可以区分两个相同host的相同服务,在bootstramp.yml中添加实例号.
# Allow Eureka to recognize two apps of the same type on the same host as separate instances: eureka: instance: instanceId: ${spring.cloud.client.hostname}:${spring.application.name}:${spring.application.instance_id:${random.value}}
5.先启动一个noun服务,再把noun服务中的words换为英文
String words = “picture,movie,building,aninmal”;
6.查看http://localhost:8010,看其造句是否会一次中文一次英文(默认ribbon是轮训算法)
7.停掉其中一个noun服务,看其是否会一次成功一次失败
特别感谢 kennyk65
Spring Cloud 中文用户组 31777218
Spring-Cloud-Config 官方文档-中文译本 (本人有参与,哈哈)
Spring Cloud Netflix 官网文档-中文译本
本文实例github地址