1. 程式人生 > >負載均衡演算法---Java的簡單實現(1)

負載均衡演算法---Java的簡單實現(1)

最近,大夥常在談論什麼負載均衡,什麼伺服器的,而自己對於這一塊也是不太理解深入模糊,然後就去看書學習,印證自己的想法。下面是自己的一些總結吧:

  比較常用的負載均衡演算法,有下面的這一些:

(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());	
	}
看了這個過程是不是不難理解,後面再介紹,加權的輪詢跟隨機,其實也是一樣的。