轮询:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
package class2.zookeeper.loadbalance;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
* 負載均衡算法,輪詢法
* @author guoy
*
*/
public class TestRoundRobin {
static Map<String,Integer> serverWeigthMap = new HashMap<String,Integer>();
static {
serverWeigthMap.put( "192.168.1.12" , 1 );
serverWeigthMap.put( "192.168.1.13" , 1 );
serverWeigthMap.put( "192.168.1.14" , 2 );
serverWeigthMap.put( "192.168.1.15" , 2 );
serverWeigthMap.put( "192.168.1.16" , 3 );
serverWeigthMap.put( "192.168.1.17" , 3 );
serverWeigthMap.put( "192.168.1.18" , 1 );
serverWeigthMap.put( "192.168.1.19" , 2 );
}
Integer pos = 0 ;
public String roundRobin()
{
//重新建立一個map,避免出現由於服務器上線和下線導致的並發問題
Map<String,Integer> serverMap = new HashMap<String,Integer>();
serverMap.putAll(serverWeigthMap);
//獲取ip列表list
Set<String> keySet = serverMap.keySet();
ArrayList<String> keyList = new ArrayList<String>();
keyList.addAll(keySet);
String server = null ;
synchronized (pos) {
if (pos >=keySet.size()){
pos = 0 ;
}
server = keyList.get(pos);
pos ++;
}
return server;
}
public static void main(String[] args) {
TestRoundRobin robin = new TestRoundRobin();
for ( int i = 0 ; i < 20 ; i++) {
String serverIp = robin.roundRobin();
System.out.println(serverIp);
}
}
}
|
加权轮询:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
package class2.zookeeper.loadbalance;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Set;
/**
* 加權隨機载均衡算法
* @author guoy
*
*/
public class TestWeightRandom {
static Map<String,Integer> serverWeigthMap = new HashMap<String,Integer>();
static {
serverWeigthMap.put( "192.168.1.12" , 1 );
serverWeigthMap.put( "192.168.1.13" , 1 );
serverWeigthMap.put( "192.168.1.14" , 2 );
serverWeigthMap.put( "192.168.1.15" , 2 );
serverWeigthMap.put( "192.168.1.16" , 3 );
serverWeigthMap.put( "192.168.1.17" , 3 );
serverWeigthMap.put( "192.168.1.18" , 1 );
serverWeigthMap.put( "192.168.1.19" , 2 );
}
public static String weightRandom()
{
//重新建立一個map,避免出現由於服務器上線和下線導致的並發問題
Map<String,Integer> serverMap = new HashMap<String,Integer>();
serverMap.putAll(serverWeigthMap);
//獲取ip列表list
Set<String> keySet = serverMap.keySet();
Iterator<String> it = keySet.iterator();
List<String> serverList = new ArrayList<String>();
while (it.hasNext()) {
String server = it.next();
Integer weight = serverMap.get(server);
for ( int i = 0 ; i < weight; i++) {
serverList.add(server);
}
}
Random random = new Random();
int randomPos = random.nextInt(serverList.size());
String server = serverList.get(randomPos);
return server;
}
public static void main(String[] args) {
String serverIp = weightRandom();
System.out.println(serverIp);
}
}
|
随机:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
package class2.zookeeper.loadbalance;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import java.util.Set;
/**
* 隨機负载均衡算法
* @author guoy
*
*/
public class TestRandom {
static Map<String,Integer> serverWeigthMap = new HashMap<String,Integer>();
static {
serverWeigthMap.put( "192.168.1.12" , 1 );
serverWeigthMap.put( "192.168.1.13" , 1 );
serverWeigthMap.put( "192.168.1.14" , 2 );
serverWeigthMap.put( "192.168.1.15" , 2 );
serverWeigthMap.put( "192.168.1.16" , 3 );
serverWeigthMap.put( "192.168.1.17" , 3 );
serverWeigthMap.put( "192.168.1.18" , 1 );
serverWeigthMap.put( "192.168.1.19" , 2 );
}
public static String random()
{
//重新建立一個map,避免出現由於服務器上線和下線導致的並發問題
Map<String,Integer> serverMap = new HashMap<String,Integer>();
serverMap.putAll(serverWeigthMap);
//獲取ip列表list
Set<String> keySet = serverMap.keySet();
ArrayList<String> keyList = new ArrayList<String>();
keyList.addAll(keySet);
Random random = new Random();
int randomPos = random.nextInt(keyList.size());
String server = keyList.get(randomPos);
return server;
}
public static void main(String[] args) {
String serverIp = random();
System.out.println(serverIp);
}
}
|
加权随机:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
package class2.zookeeper.loadbalance;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Set;
/**
* 加權隨機载均衡算法
* @author guoy
*
*/
public class TestWeightRandom {
static Map<String,Integer> serverWeigthMap = new HashMap<String,Integer>();
static {
serverWeigthMap.put( "192.168.1.12" , 1 );
serverWeigthMap.put( "192.168.1.13" , 1 );
serverWeigthMap.put( "192.168.1.14" , 2 );
serverWeigthMap.put( "192.168.1.15" , 2 );
serverWeigthMap.put( "192.168.1.16" , 3 );
serverWeigthMap.put( "192.168.1.17" , 3 );
serverWeigthMap.put( "192.168.1.18" , 1 );
serverWeigthMap.put( "192.168.1.19" , 2 );
}
public static String weightRandom()
{
//重新建立一個map,避免出現由於服務器上線和下線導致的並發問題
Map<String,Integer> serverMap = new HashMap<String,Integer>();
serverMap.putAll(serverWeigthMap);
//獲取ip列表list
Set<String> keySet = serverMap.keySet();
Iterator<String> it = keySet.iterator();
List<String> serverList = new ArrayList<String>();
while (it.hasNext()) {
String server = it.next();
Integer weight = serverMap.get(server);
for ( int i = 0 ; i < weight; i++) {
serverList.add(server);
}
}
Random random = new Random();
int randomPos = random.nextInt(serverList.size());
String server = serverList.get(randomPos);
return server;
}
public static void main(String[] args) {
String serverIp = weightRandom();
System.out.println(serverIp);
}
}
|
ip hash:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
package class2.zookeeper.loadbalance;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
* 负载均衡 ip_hash算法
* @author guoy
*
*/
public class TestIpHash {
static Map< String ,Integer> serverWeigthMap = new HashMap< String ,Integer>();
static{
serverWeigthMap.put("192.168.1.12", 1);
serverWeigthMap.put("192.168.1.13", 1);
serverWeigthMap.put("192.168.1.14", 2);
serverWeigthMap.put("192.168.1.15", 2);
serverWeigthMap.put("192.168.1.16", 3);
serverWeigthMap.put("192.168.1.17", 3);
serverWeigthMap.put("192.168.1.18", 1);
serverWeigthMap.put("192.168.1.19", 2);
}
/**
* 获取请求服务器地址
* @param remoteIp 负载均衡服务器ip
* @return
*/
public static String ipHash(String remoteIp)
{
//重新建立一個map,避免出現由於服務器上線和下線導致的並發問題
Map< String ,Integer> serverMap = new HashMap< String ,Integer>();
serverMap.putAll(serverWeigthMap);
//獲取ip列表list
Set< String > keySet = serverMap.keySet();
ArrayList< String > keyList = new ArrayList< String >();
keyList.addAll(keySet);
int hashCode =remoteIp.hashCode();
int serverListSize = keyList.size();
int serverPos = hashCode % serverListSize;
return keyList.get(serverPos);
}
public static void main(String[] args) {
String serverIp = ipHash("192.168.1.12");
System.out.println(serverIp);
}
}
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://www.cnblogs.com/lr393993507/p/5702854.html