1、ribbon
Load Balance负载均衡是用于解决一台机器(一个进程)无法解决所有请求而产生的一种算法。
好处:
1)当集群里的1台或者多台服务器down的时候,剩余的没有down的服务器可以保证服务的继续使用
2)使用了更多的机器保证了机器的良性使用,不会由于某一高峰时刻导致系统cpu急剧上升
2、负载均衡有好几种实现策略
- 随机
- 轮询
- 一致性哈希
- 哈希
- 加权
ribbon中负载均衡算法:
3、微服务中ribbon负载均衡
1)导入Ribbon的依赖,该依赖是可以省略的,因为spring-cloud-starter-netflix-eureka-client中已经包含了spring-cloud-starter-netflix-ribbon:
2)为RestTemplate设置@LoadBalanced注解
3)测试:启动2个service-product服务实例,然后通过postman进行测试
4、自己实现负载均衡算法
第1步:定义一个类MyLoadRule继承ClientConfigEnabledRoundRobinRule
import com.netflix.loadbalancer.ClientConfigEnabledRoundRobinRule;
import com.netflix.loadbalancer.ILoadBalancer;
import com.netflix.loadbalancer.Server;
public class MyLoadRule extends ClientConfigEnabledRoundRobinRule {
@Override
public Server choose(Object key) {
ILoadBalancer lb = getLoadBalancer();
Server server = lb.getAllServers().get(0);
return server;
}
}
第2步:在application.yml中配置使用该负载均衡算法
#默认的负载均衡算法:PredicateBasedRule 可以通过下面的方式进行修改
# 服务名称.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.均衡的规则
service-product:
ribbon:
#NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
NFLoadBalancerRuleClassName: com.lq.order.load.MyLoadRule
第3步:断点测试