再议负载均衡算法
负载均衡的用途,路由等:
硬件方式:F5的负载均衡设备(张善友的以此起头,C#编写,ASP.NET Session State Partitioning using State Server Load Balancing)ASP.NET记录会话状态,采用负载均衡算法来分区存储状态数据。
软件方式:IP层,章文嵩的LVS
HTTP层:ngnix
HTTP层:dobbo(cluster)(java)https://segmentfault.com/a/1190000009594166 (?待学)
以前遇到的一个场景也适用:有很多大个的ELT文件,需要拷贝到HPC Cluster的各台机器上,各台机器的可用磁盘空间不一样,可以以此为权重,用负载均衡算法分配,效果较好。当初用了随机分配,检查哪个硬盘可用空间更大,就往哪个上拷贝的方式,这样的缺点,就是每次拷贝文件之前,都增加一次检查磁盘可用空间的操作,浪费了时间,增加了磁盘管理器的负担。
一个业务场景:专利代理部门,新人(或实习生)与资深代理人的权重不一样,要按权重分工。参考如下算法(实现是否正确未验证):
class Server{ private String ip; private String port; public int weight; } class LoadBalancer{ private static List<Server> list=new List<Server>(); private static int totalWeight=0; static{//加载配置文件,将解析的服务器列表添加到list中.同时计算出总权重值 //list.add(server); //totalWeight+=server.weight; } private static LoadBalancer loadBalancer=new LoadBalancer(); private LoadBalancer(){} public static LoadBalancer getLoadBalancer(){ return loadBalancer; } public Server getServer(){ int sum=0; int rand=(int)(1+Math.random()*totalWeight); for(Server serv : list){////由概率区间值决定服务器的分配 sum+=serv.weight; if(rand<=sum){ return serv; }else{ continue; } } return null;//不会出现这种情况。 } }
参照上述方法改造上述场景的话,Server这个概念抽象形容人不太合适,不如用Worker更好。Worker不用IP和Port,这两个组合抽象成一个ID即可。
另外,Selenium Grid,应该也是采用的负载均衡算法分配的WebDriver的任务。(?待考)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2016-09-19 地图人气大数据平台
2016-09-19 Java的Spring内实现的mini版内存"计数器"功能
2016-09-19 关于Tomcat性能监控的第三方工具Probe的简介
2011-09-19 我是怎么想着干混事的