zoukankan      html  css  js  c++  java
  • 再议负载均衡算法

    负载均衡的用途,路由等:

    硬件方式: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的任务。(?待考)

  • 相关阅读:
    主外键 子查询
    正则表达式
    css3 文本效果
    css3 2d
    sql 基本操作
    插入 视频 音频 地图
    j-query j-query
    document
    js dom 操作
    js
  • 原文地址:https://www.cnblogs.com/rgqancy/p/7550193.html
Copyright © 2011-2022 走看看