当前位置:   article > 正文

如何在客户端实现服务的负载均衡_如何让客户端只能通过负载访问

如何让客户端只能通过负载访问

思考一个问题:如果为同一个提供者在Eureka中注册多个服务?客户端应该如何选择服务呢?

这时,就需要在客户端实现服务的负载均衡。而在Spring Cloud中推荐使用Ribbon来实现负载均衡。

Ribbon简介

Ribbon是Netflix发布的负载均衡器。它有助于控制HTTP和TCP客户端的行为。为Ribbon配置服务提供者地址列表后, Ribbon就可基于某种负载均衡算法,自动地帮助服务消费者去请求。Ribbon默认为我们提供了很多的负载均衡算法,例如轮询、随机等。当然,我们也可为 Ribbon实现自定义的负载均衡算法。

架构

开始使用Ribbon

3.1. 为microservice order增加ribbon依赖

其实,该依赖是可以省略的,因为spring-cloud-starter-netflix-eureka-client中已经包含了spring-cloud-starter-netflix-ribbon:

3.2. 为RestTemplate设置@LoadBalanced注解

3.3. 改造ItemService的实现

可以发现,实现更加简化了。

这种方式关键在于获取RestTemplat对象时要加上@LosdBalanced注解,否则restTemplate.getFor Object方法会报java.net.UnknownHostException: app-item,而前面一种方式是手动指定了买二手手机号码获取的服务实例,不需要加此注解。

提示: 如果这里使用了@FeignClient完成的Restful的调用同样也适用。

3.4. 重启订单服务进行测试

测试结果:

3.5. 测试负载均衡

测试方法:

第一步,启动2个microservice-item服务(多个也可以):

第二步,导入测试依赖,编写单元测试用例:

第三步,编写测试用例:

设置负载均衡策略

只需要在配置文件中添加配置

serviceId.ribbon.NFLoadBalancerRuleClassName=自定义的负载均衡策略类,

例如在order微服务的yml配置文件中添加:

其中app-item是要访问的服务id。

测试:

第1次:127.0.0.1: 8081

第2次:127.0.0.1: 9081

第3次:127.0.0.1: 9081

第4次:127.0.0.1: 8081

第5次:127.0.0.1: 9081

第6次:127.0.0.1: 8081

第7次:127.0.0.1: 9081

第8次:127.0.0.1: 9081

第9次:127.0.0.1: 8081

第10次:127.0.0.1: 8081

...

其它策略

接口:com.netflix.loadbalancer.IRule,其实现类:

策略描述:

AbstractLoadBalancerRule

负载均衡的抽象类,负责获得负载均衡器并保存在内部,通过负载均衡器维护的信息作为分配的依据,并以此设计一些算法来实现针对特定场景的高效策略。

RoundRobinRule

Ribbon默认的负载均衡机制,该策略实现了按照线性轮询的方式以此选择每个服务实例的功能。轮询index,选择index对应位置的server。

RandomRule

该策略实现了从服务实例清单中随机选择一个服务实例的功能。通过在index上随机,选择index对应位置的server。

RetryRule

该策略实现了一个具备重试机制的实例选择功能。该策略下在一个配置时间段内当选择server不成功,则一直尝试使用subRule的方式选择一个可用的server。

WeightedResponseTimeRule

该策略实现了根据权重weight选择实例的功能,根据响应时间分配一个weight,响应时间越长,weight越小,被选中的可能性越低。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/378071
推荐阅读
相关标签
  

闽ICP备14008679号