LOAD BALANCING

 IpPool.java:

import java.util.Map;

import java.util.concurrent.ConcurrentHashMap;


public class IpPool {

    public static Map<String, Integer> ipMap = new ConcurrentHashMap<>();


    static {

        ipMap.put("192.168.1.1", 10);

        ipMap.put("192.168.1.2", 10);

        ipMap.put("192.168.1.3", 10);

        ipMap.put("192.168.1.4", 10);

        ipMap.put("192.168.1.5", 10);

        ipMap.put("192.168.1.6", 10);

        ipMap.put("192.168.1.7", 10);

        ipMap.put("192.168.1.8", 10);

        ipMap.put("192.168.1.9", 10);

        ipMap.put("192.168.1.10", 10);

    }

}

LoadBalance.java:Interface
public interface LoadBalance {
    String getServer(String clientIp);
}

RoundRobin.java:

import java.util.ArrayList;
import java.util.List;
import java.util.Set;

public class RoundRobin implements LoadBalance {
    private static Integer position = 0;

    @Override
    public String getServer(String clientIp) {
        Set<String> servers = IpPool.ipMap.keySet();
        List<String> serverList = new ArrayList<>();
        serverList.addAll(servers);
        String target = null;

        synchronized (position) {
            if (position > serverList.size() - 1) {
                position = 0;
            }
            target = serverList.get(position);
            position++;
        }
        return target;
    }
}

LoadBalanceMain.java:
public class LoadBalanceMain {
    public static void main(String[] args) {
        run();
    }

    public static void run() {
        loadBalance();
    }

    public static void loadBalance() {
        doGetServer(new RoundRobin());
        
    }


    public static void doGetServer(LoadBalance loadBalance) {
        doGetServer(loadBalance, 100);
    }

    private static void doGetServer(LoadBalance loadBalance, int queryTimes) {
        for (int i = 0; i < queryTimes; i++) {
            String serverId = loadBalance.getServer(String.valueOf(i));
            System.out.println(String.format("[%s] index:%s,%s", loadBalance.getClass().getSimpleName(), i, serverId));
        }
    }
}

Output:






Comments