第四章 AlibabaCloud集成Ribbon实现负载均衡
2022/1/30 23:06:34
本文主要是介绍第四章 AlibabaCloud集成Ribbon实现负载均衡,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1.什么负载均衡和常见的解决方案
-
什么是负载均衡(Load Balance)
分布式系统中一个非常重要的概念,当访问的服务具有多个实例时,需要根据某种“均衡”的策略决定请求发往哪个节点,这就是所谓的负载均衡,原理是将数据流量分摊到多个服务器执行,减轻每台服务器的压力,从而提高了数据的吞吐量 -
软硬件角度负载均衡的种类
通过硬件来进行解决,常见的硬件有NetScaler、F5、Radware和Array等商用的负载均衡器,但比较昂贵的
通过软件来进行解决,常见的软件有LVS、Nginx等,它们是基于Linux系统并且开源的负载均衡策略 -
从端的角度负载均衡有两种
服务端负载均衡
客户端负载均衡 -
常见的负载均衡策略(看组件的支持情况)
节点轮询:每个请求按顺序分配到不同的后端服务器
weight 权重配置:weight和访问比率成正比,数字越大,分配得到的流量越高
固定分发:根据请求按访问ip的hash结果分配,这样每个用户就可以固定访问一个后端服务器
随机选择、最短响应时间等等
2.AlibabaCloud集成Ribbon实现负载均衡
-
什么是Ribbon
Ribbon是一个客户端负载均衡工具,通过Spring Cloud封装,可以轻松和AlibabaCloud整合 -
订单服务增加@LoadBalanced 注解
@SpringBootApplication @EnableDiscoveryClient public class OrderApplication { public static void main(String [] args){ SpringApplication.run(OrderApplication.class,args); } @Bean @LoadBalanced public RestTemplate getRestTemplate(){ return new RestTemplate(); } }
- Video,VideoOrder实体类增加serverInfo字段记录服务器信息方便测试
- 修改VideoController
@RestController @RequestMapping("api/v1/video") public class VideoController { @Autowired private VideoService videoService; @RequestMapping("find_by_id") public Object findVideoById(int videoId, HttpServletRequest request){ Video video = videoService.findById(videoId); video.setServerInfo(request.getServerName()+":"+request.getServerPort()); return video; } }
- 修改OrderController
@RestController @RequestMapping("api/v1/video_order") public class OrderController { @Autowired private RestTemplate restTemplate; @Autowired private DiscoveryClient discoveryClient; @RequestMapping("/save") public Object save(int videoId){ //Video video = restTemplate.getForObject("http://localhost:9000/api/v1/video/find_by_id?videoId="+videoId, Video.class); //List<ServiceInstance> list = discoveryClient.getInstances("xdclass-video-service"); //ServiceInstance serviceInstance = list.get(0); Video video = restTemplate.getForObject("http://xdclass-video-service/api/v1/video/find_by_id?videoId="+videoId, Video.class); VideoOrder videoOrder = new VideoOrder(); videoOrder.setVideoId(video.getId()); videoOrder.setVideoTitle(video.getTitle()); videoOrder.setCreateTime(new Date()); videoOrder.setServerInfo(video.getServerInfo()); return videoOrder; } }
- IDE设置启动多个video服务
依次修改server端口进行启动
- postman进行测试
这篇关于第四章 AlibabaCloud集成Ribbon实现负载均衡的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享