Weblogic的HttpClusterServlet如何配置负载均衡算法

蒙牛君 2015-08-03 02:35:18
如题,按照各种教程贴部署了HttpClusterServlet,并且经过测试发现其默认情况下基本上把请求平均分配到各个节点。希望通过例如按权重分配的算法来分配,请问各位大神,这是否能够用HttpClusterServlet做到,该如何操作?求赐教
...全文
2020 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
程序员鼓励师 2015-08-09
  • 打赏
  • 举报
回复
WeightBasedReplicaHandler.java RichReplicaList.java
protected RemoteReference chooseReplica(RemoteReference remotereference, Method method, Object aobj[])
    {
        RichReplicaList richreplicalist = (RichReplicaList)getReplicaList();
        RemoteReference remotereference1 = remotereference;
        synchronized(richreplicalist)
        {
            if(infoArray == null || infoArray.length == 0)
                reinitializeWeightInfo(remotereference.getHostID());
            if(size != 0)
            {
                for(int i = lastIndex; i < size + lastIndex; i++)
                {
                    listIter = ++listIter % size;//用于判断是否重新计算当前调度的权值
                    if(listIter == 0)
                        loopCounter = ++loopCounter % maxIter;//当前调度的权值
                    int j = i % size;
                    if(infoArray[j].getNormalizedWeight() <= loopCounter)
                        continue;
                    remotereference1 = richreplicalist.findReplicaHostedBy(infoArray[j].getID());//大于当前调度的权值
                    if(remotereference1 == null)
                        continue;
                    lastIndex = ++j;
                    break;
                }
            }
        }
        return remotereference1;
    }
    
    
    maxIter:
    
    
     void resetAndNormalizeWeights()
    {
        int i = 0x7fffffff; //32位最大整数
        int j = 0x80000000; //32位最小整数
        boolean flag = true;
        synchronized(this)
        {
            serverInfoArray = ServerInfoManager.theOne().getServerInfos();
            for(int k = 0; k < serverInfoArray.length; k++)
            {
                int i1 = serverInfoArray[k].getLoadWeight();
                flag &= i1 % 10 == 0;
                if(i > i1)
                    i = i1;   //最小权重,尚未格式化
                if(i1 > j)
                    j = i1;  //最大权重,尚未格式化
            }
            int l = 0;
            if(serverInfoArray.length > 0)
                while(serverInfoArray[l].getLoadWeight() % i == 0 && ++l < serverInfoArray.length) ;
            if(l > serverInfoArray.length)
            {
                normalizeWeights(i, serverInfoArray);
                loopIter = j / i;
            } else
            if(flag)
            {
                normalizeWeights(10, serverInfoArray);
                loopIter = j / 10;
            } else
            {
                normalizeWeights(5, serverInfoArray);
                loopIter = j / 5;
            }
        }
    }

1,220

社区成员

发帖
与我相关
我的任务
社区描述
企业软件 中间件技术
社区管理员
  • 中间件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧