`

服务器不同权值的分流算法

    博客分类:
  • java
 
阅读更多
/**
** C#实现
** http://www.cnblogs.com/shanyou/archive/2012/11/09/2763272.html
**/

package com;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class LoadBalance {
	// / <summary>
	// / 锁对象
	// / </summary>
	private static Object locker = new Object();

	// / <summary>
	// / 服务器权重列表
	// / </summary>
	private static List<Integer> weightList = new ArrayList<Integer>();

	// / <summary>
	// / 当前索引
	// / </summary>
	private static int currentIndex;

	// / <summary>
	// / 当前权重
	// / </summary>
	private static int currentWeight;

	private static int maxWeight;

	// / <summary>
	// / 最大公约数
	// / </summary>
	private static int gcd;

	private LoadBalance() {
		currentIndex = -1;
		currentWeight = 0;

		// 获取服务器权重列表 从配置文件
		weightList = GetWeightList();
		maxWeight = GetMaxWeight(weightList);
		gcd = GetMaxGCD(weightList);
	}

	private static List<Integer> GetWeightList() {
		List<Integer> list = new ArrayList<Integer>();
		list.add(3);
		list.add(1);
		list.add(1);
		list.add(4);
		list.add(1);
		list.add(7);

		return list;
	}

	public static Integer Start() {
		synchronized (locker) {
			Integer iWeight = RoundRobin();
			if (iWeight != null) {
				return iWeight;
			}
			return weightList.get(0);
		}
	}

	// / <summary>
	// / 获取最大公约数
	// / </summary>
	// / <param name="list">要查找的int集合</param>
	// / <returns>返回集合中所有数的最大公约数</returns>
	private static int GetMaxGCD(List<Integer> list) {
		Collections.sort(list, new WeightCompare());

		int iMinWeight = weightList.get(0);

		int gcd = 1;

		for (int i = 1; i < iMinWeight; i++) {
			boolean isFound = true;
			for (int iWeight : list) {
				if (iWeight % i != 0) {
					isFound = false;
					break;
				}
			}
			if (isFound)
				gcd = i;
		}
		return gcd;
	}

	// / <summary>
	// / 获取服务器权重集合中的最大权重
	// / </summary>
	// / <param name="list"></param>
	// / <returns></returns>
	private static int GetMaxWeight(List<Integer> list) {
		int iMaxWeight = 0;
		for (int i : list) {
			if (iMaxWeight < i) {
				iMaxWeight = i;
			}
		}
		return iMaxWeight;
	}

	private static Integer RoundRobin() {
		while (true) {
			currentIndex = (currentIndex + 1) % weightList.size();
			if (0 == currentIndex) {
				currentWeight = currentWeight - gcd;
				if (0 >= currentWeight) {
					currentWeight = maxWeight;
					if (currentWeight == 0) {
						return null;
					}
				}
			}

			if (weightList.get(currentIndex) >= currentWeight) {
				return weightList.get(currentIndex);
			}
		}
	}

}

class WeightCompare implements Comparator<Integer> {

	@Override
	public int compare(Integer x, Integer y) {
		return x - y;
	}
}

分享到:
评论

相关推荐

    论文研究-基于RSSI的移动权值定位算法.pdf

    获取设定场境内不同定位标签的RSSI向量,根据判定规则确定基准点,再运用室内传播模型计算移动权值,估算待测终端的位置信息。通过真实场景实验对比分析,该算法较对比算法具有更好的定位精度以及稳定性。

    卷积神经网络(CNNS)权值优化算法

    卷积神经网络(CNNS)权值优化算法 卷积神经网络(CNNS)是一种广泛应用于图像识别、自然语言处理等领域的神经网络模型。权值优化算法是卷积神经网络训练的核心部分,旨在使网络的输出值尽可能接近真实值。下面我们...

    Matlab遗传算法优化RBF网络权值-遗传算法优化RBF.rar

    Matlab遗传算法优化RBF网络权值-遗传算法优化RBF.rar 遗传算法优化RBF网络权值,可以运行出结果。 本人刚刚学习优化算法这一类知识,希望能有人多交流。希望能有优化算法的创新 我的邮箱 zb078@163.com

    LMS.rar_LMS权值_lms_自适应LMS算法_自适应权值_自适应算法

    标题中的“LMS.rar_LMS权值_lms_自适应LMS算法_自适应权值_自适应算法”指的是一个关于线性预测编码(Linear Minimum Mean Square Error, 简称LMS)算法的资源包,其中包含了LMS算法的核心——自适应权值的计算。...

    自适应负载指标权值的负载均衡算法.pdf

    为解决在Web集群负载均衡算法中预先指定权值来评估服务器节点综合负载不能体现各负载指标动态变化情况的问题,提出一种自适应负载指标权值的负载均衡算法。根据服务器节点各负载指标的实际观测值动态调整各负载指标的...

    最小权值生成树算法实现

    最小权值生成树(Minimum Spanning Tree, MST)算法是图论中的一个重要概念,用于寻找一个加权无向图中的边子集,使得这个子集中的边连接了图中的所有顶点,且这些边的总权重尽可能小。在这个场景中,我们使用的是...

    改进PSO权值算法在流水生产调度中的应用

    为了在生产中快速有效且合理地安排生产流程,达到生产最优化,采用改进粒子群权值算法(DPSO)。研究了DPSO算法地参数设置问题,在传统PSO算法基础上加入具有动态自适应调整功能的权重因子,使算法更快地达到全局最优化,...

    论文研究-遗传算法优化神经网络权值盲均衡算法的研究.pdf

    受达尔文生物进化论思想启发,借鉴生物界自然选择和进化机制,从植物种群着手,以进化过程为研究对象,为实现计算机对植物进化过程模拟,提出了一种基于遗传算法和L-系统的植物进化模型。该模型无论对于计算机虚拟...

    利用RLS对RBF神经网络的权值进行训练

    RLS递归最小二乘算法是对最小二乘算法的改进,利用其训练RBF网络时,先要确定网络的中心和宽度等参数,利用该算法对RBF网络的权值进行学习,程序调试通顺,下载初始化之后直接可用

    km算法最小权值.zip

    km 实现最小权值组合

    Matlab遗传算法优化神经网络权值的程序-遗传算法优化神经网络权值的程序.rar

    在提供的压缩包文件中,“遗传算法优化神经网络权值的程序”很可能是包含实现这些步骤的Matlab代码。代码可能包括定义神经网络结构、设定遗传算法参数、编写适应度函数、实现选择、交叉和变异函数等部分。为了深入...

    论文研究-基于链路流量分配权值的路由算法仿真研究 .pdf

    在这篇名为“论文研究-基于链路流量分配权值的路由算法仿真研究”的研究论文中,作者李旸提出了一种新型的流量工程(TE)路由算法,该算法基于链路的流量分配权值。此研究的目的是为了改进网络路由的选择,使得网络...

    rbf神经网络权值的粒子群优化算法

    **rbf神经网络权值的粒子群优化算法** 在机器学习和神经网络领域,径向基函数(Radial Basis Function, RBF)神经网络是一种广泛应用的模型,它以其高效的非线性映射能力和良好的泛化性能而受到青睐。RBF神经网络...

    一种新的处理能力优先的权值分配调度算法 (2011年)

    针对加权最小连接数算法中服务节点权值不准确而直接影响负载均衡效率和整个集群系统性能的问题,提出一种新的改进算法处理能力优先的权值分配调度算法.给出了改进算法的工作流程和要点,分析并设计了算法的主要技术、...

    基于权值的引力搜索算法在电力系统最优潮流计算中的应用.pdf

    而引入的权值机制使得算法在处理不同维度和复杂度问题时更加灵活和高效。 在电力系统中,每个粒子代表一个可能的解决方案,其质量代表该方案的优劣。在优化过程中,粒子通过不断调整自身位置和速度,在搜索空间中...

Global site tag (gtag.js) - Google Analytics