diff --git a/workspace-gateway/src/main/java/com/aliware/tianchi/CallbackListenerImpl.java b/workspace-gateway/src/main/java/com/aliware/tianchi/CallbackListenerImpl.java index f4113b4edbb88f0c3b8fc9341f780d4b21537d16..ba586b002b01a207d60027e7b30070293ee6e829 100644 --- a/workspace-gateway/src/main/java/com/aliware/tianchi/CallbackListenerImpl.java +++ b/workspace-gateway/src/main/java/com/aliware/tianchi/CallbackListenerImpl.java @@ -11,10 +11,25 @@ import org.apache.dubbo.rpc.listener.CallbackListener; * */ public class CallbackListenerImpl implements CallbackListener { + static long memory_large = 3; + static long memory_medium = 2; + static long memory_small = 1; @Override public void receiveServerMsg(String msg) { System.out.println("receive msg from server :" + msg); + String[] rcvmsglist = msg.split(","); + if (rcvmsglist[0].equals("small")) memory_small = Long.parseLong(rcvmsglist[1]); + else if (rcvmsglist[0].equals("medium")) memory_medium = Long.parseLong(rcvmsglist[1]); + else memory_large = Long.parseLong(rcvmsglist[1]); + + long memory_sum = memory_large + memory_medium + memory_small; + + System.out.println(msg + " : " + memory_large + ',' + memory_medium + ',' + memory_small + " | " + memory_sum); + + UserLoadBalance.weight_large = 6.0 * memory_large / memory_sum; + UserLoadBalance.weight_medium = 6.0 * memory_medium / memory_sum; + UserLoadBalance.weight_small = 6.0 * memory_small / memory_sum; } } diff --git a/workspace-gateway/src/main/java/com/aliware/tianchi/UserLoadBalance.java b/workspace-gateway/src/main/java/com/aliware/tianchi/UserLoadBalance.java index a184f07c72549f9fa1afd4a0cecb16a6cf485d82..0cc84ad8f0f66f12fc4428adb7f7d63f944bac11 100644 --- a/workspace-gateway/src/main/java/com/aliware/tianchi/UserLoadBalance.java +++ b/workspace-gateway/src/main/java/com/aliware/tianchi/UserLoadBalance.java @@ -19,11 +19,17 @@ import java.util.concurrent.ThreadLocalRandom; */ public class UserLoadBalance implements LoadBalance { + static double weight_large = 3.0; + static double weight_medium = 2.0; + static double weight_small = 1.0; + @Override public <T> Invoker<T> select(List<Invoker<T>> invokers, URL url, Invocation invocation) throws RpcException { - int[] invoker_list = {0, 1, 1, 2, 2, 2}; - int id = ThreadLocalRandom.current().nextInt(6); - //System.out.println("Send one request to " + invoker_list[id]); - return invokers.get(invoker_list[id]); + double thread = ThreadLocalRandom.current().nextDouble(6.0); + int id = 2; + if (thread < weight_small) id = 0; + else if (thread < weight_small + weight_medium) id = 1; + System.out.println(id + " | " + weight_large + ',' + weight_medium + ',' + weight_small); + return invokers.get(id); } } diff --git a/workspace-provider/src/main/java/com/aliware/tianchi/CallbackServiceImpl.java b/workspace-provider/src/main/java/com/aliware/tianchi/CallbackServiceImpl.java index fc9a2a9485f904e25222f5d820c826c537ebc1c3..4a0aa43953ee8bc28d462b0d1b1c35400b152b9a 100644 --- a/workspace-provider/src/main/java/com/aliware/tianchi/CallbackServiceImpl.java +++ b/workspace-provider/src/main/java/com/aliware/tianchi/CallbackServiceImpl.java @@ -25,7 +25,8 @@ public class CallbackServiceImpl implements CallbackService { if (!listeners.isEmpty()) { for (Map.Entry<String, CallbackListener> entry : listeners.entrySet()) { try { - entry.getValue().receiveServerMsg(System.getProperty("quota") + " " + new Date().toString()); + //entry.getValue().receiveServerMsg(System.getProperty("quota") + " " + new Date().toString()); + entry.getValue().receiveServerMsg(System.getProperty("quota") + "," + Runtime.getRuntime().freeMemory()); } catch (Throwable t1) { listeners.remove(entry.getKey()); } diff --git a/workspace-provider/src/main/java/com/aliware/tianchi/TestRequestLimiter.java b/workspace-provider/src/main/java/com/aliware/tianchi/TestRequestLimiter.java index 0447ef57897d5ce23e18c09ab720f75d49848a31..5d60f743e59ce6fb9f351392d9c13ae6b9237287 100644 --- a/workspace-provider/src/main/java/com/aliware/tianchi/TestRequestLimiter.java +++ b/workspace-provider/src/main/java/com/aliware/tianchi/TestRequestLimiter.java @@ -20,6 +20,7 @@ public class TestRequestLimiter implements RequestLimiter { */ @Override public boolean tryAcquire(Request request, int activeTaskCount) { + if (activeTaskCount > 2000) return false; return true; }