负载均衡算法---Java的简单实现(1)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/YQYnsmile/article/details/78909355

最近,大伙常在谈论什么负载均衡,什么服务器的,而自己对于这一块也是不太理解深入模糊,然后就去看书学习,印证自己的想法。下面是自己的一些总结吧:

  比较常用的负载均衡算法,有下面的这一些:

(1)轮询(其实就是循环)

(2)随机

(3)hash

(4)加权轮询

(5)加权随机

我一直以来觉得很多的东西看概念或者名词是很难理解他们的意思的,我觉得应该从实际出发思考问题,负载均衡所要解决的问题是什么?为什么需要这个,现在有很多这样的框架,但是不明白意图的话,终究是记不住的,用起来也不舒心。负载均衡主要解决的问题就是,提高应用的性能,我们把服务部署到多个服务器上面,我们客户访问的时候怎么去选择服务器进行服务。下面我们一起来学习上面的算法:

(1)轮询:

	private static volatile int pos = 0;//为了保证pos的正确性,也可以使用Integer加上synchronized,或者使用原子类AtomicInteger
	
	public static String getserverIP(){
		String ip = null;
		//第一步我们需要自己创建一些服务器的ip
		List<String> list = new ArrayList<String>();
		list.add("127.0.0.1");
		list.add("127.0.0.2");
		list.add("127.0.0.3");
		list.add("127.0.0.4");
		list.add("127.0.0.5");
		list.add("127.0.0.6");
		list.add("127.0.0.7");
		list.add("127.0.0.8");
		list.add("127.0.0.9");
		//第二步,轮询得到我们想要的IP
		if(pos>list.size()) pos = 0;
		ip = list.get(pos);
		pos++;
		return ip;
		
	}
	public static void main(String[] args) {
			System.out.println(getserverIP());	
	}
(2)随机

	public static String getserverIP(){
		String ip = null;
		//第一步我们需要自己创建一些服务器的ip
		List<String> list = new ArrayList<String>();
		list.add("127.0.0.1");
		list.add("127.0.0.2");
		list.add("127.0.0.3");
		list.add("127.0.0.4");
		list.add("127.0.0.5");
		list.add("127.0.0.6");
		list.add("127.0.0.7");
		list.add("127.0.0.8");
		list.add("127.0.0.9");
		//第二步,随机得到我们想要的IP
		Random random = new Random();
		int pos = random.nextInt(list.size());
		ip = list.get(pos);
		return ip;
		
	}
	public static void main(String[] args) {
			System.out.println(getserverIP());	
	}
(3)hash

public static String getserverIP(){
		String ip = null;
		//第一步我们需要自己创建一些服务器的ip
		List<String> list = new ArrayList<String>();
		list.add("102.33.22.34");
		list.add("102.33.22.38");
		list.add("102.33.22.37");
		list.add("102.33.22.39");
		list.add("102.33.22.23");
		
		//第二步,得到客户端的IP,我们要根据客户端的hascode跟服务器的大小做hash运算
		String clientIP = "127.0.0.1";
		//第三步,随机得到我们想要的IP
		int hascode = clientIP.hashCode();
		int pos = hascode % list.size();//这里为了减少hashcode还可以进行异或等操作
		ip = list.get(pos);
		return ip;
		
	}
	public static void main(String[] args) {
			System.out.println(getserverIP());	
	}
看了这个过程是不是不难理解,后面再介绍,加权的轮询跟随机,其实也是一样的。


猜你喜欢

转载自blog.csdn.net/YQYnsmile/article/details/78909355