From ef5de74d7c6c0559e75d71fc51526e9cecff5739 Mon Sep 17 00:00:00 2001
From: qiaomr <1393092021@qq.com>
Date: Fri, 5 Jan 2024 18:11:00 +0800
Subject: [PATCH 1/3] 3.2.0.a
---
boot/pom.xml | 4 ++--
event/pom.xml | 4 ++--
hotswap/pom.xml | 4 ++--
monitor/pom.xml | 4 ++--
net/pom.xml | 4 ++--
orm/pom.xml | 4 ++--
pom.xml | 4 ++--
protocol/pom.xml | 4 ++--
scheduler/pom.xml | 4 ++--
storage/pom.xml | 4 ++--
10 files changed, 20 insertions(+), 20 deletions(-)
diff --git a/boot/pom.xml b/boot/pom.xml
index 86d3ed15..da51c55c 100644
--- a/boot/pom.xml
+++ b/boot/pom.xml
@@ -7,10 +7,10 @@
com.zfoo
boot
jar
- 3.2.0
+ 3.2.0.a
- 3.2.0
+ 3.2.0.a
6.0.11
3.1.3
diff --git a/event/pom.xml b/event/pom.xml
index f1bed0ef..d89bb2b8 100644
--- a/event/pom.xml
+++ b/event/pom.xml
@@ -7,10 +7,10 @@
com.zfoo
event
jar
- 3.2.0
+ 3.2.0.a
- 3.2.0
+ 3.2.0.a
6.0.11
3.1.3
diff --git a/hotswap/pom.xml b/hotswap/pom.xml
index 2d4b70f4..7ad3c870 100644
--- a/hotswap/pom.xml
+++ b/hotswap/pom.xml
@@ -7,10 +7,10 @@
com.zfoo
hotswap
jar
- 3.2.0
+ 3.2.0.a
- 3.2.0
+ 3.2.0.a
6.0.11
3.1.3
diff --git a/monitor/pom.xml b/monitor/pom.xml
index 63efce6d..a431c6a4 100644
--- a/monitor/pom.xml
+++ b/monitor/pom.xml
@@ -7,10 +7,10 @@
com.zfoo
monitor
jar
- 3.2.0
+ 3.2.0.a
- 3.2.0
+ 3.2.0.a
6.0.11
3.1.3
diff --git a/net/pom.xml b/net/pom.xml
index 1ceb8744..766a5b02 100644
--- a/net/pom.xml
+++ b/net/pom.xml
@@ -7,10 +7,10 @@
com.zfoo
net
jar
- 3.2.0
+ 3.2.0.a
- 3.2.0
+ 3.2.0.a
6.0.11
3.1.3
diff --git a/orm/pom.xml b/orm/pom.xml
index 1eb25662..f6dec2cd 100644
--- a/orm/pom.xml
+++ b/orm/pom.xml
@@ -7,10 +7,10 @@
com.zfoo
orm
jar
- 3.2.0
+ 3.2.0.a
- 3.2.0
+ 3.2.0.a
6.0.11
3.1.3
diff --git a/pom.xml b/pom.xml
index eeb34488..499bcd47 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
com.zfoo
zfoo
pom
- 3.2.0
+ 3.2.0.a
zfoo
@@ -126,7 +126,7 @@
- 3.2.0
+ 3.2.0.a
6.0.11
3.1.3
diff --git a/protocol/pom.xml b/protocol/pom.xml
index 81f583fb..93067edd 100644
--- a/protocol/pom.xml
+++ b/protocol/pom.xml
@@ -7,10 +7,10 @@
com.zfoo
protocol
jar
- 3.2.0
+ 3.2.0.a
- 3.2.0
+ 3.2.0.a
6.0.11
3.1.3
diff --git a/scheduler/pom.xml b/scheduler/pom.xml
index e0e03eec..106fb7f8 100644
--- a/scheduler/pom.xml
+++ b/scheduler/pom.xml
@@ -7,10 +7,10 @@
com.zfoo
scheduler
jar
- 3.2.0
+ 3.2.0.a
- 3.2.0
+ 3.2.0.a
6.0.11
3.1.3
diff --git a/storage/pom.xml b/storage/pom.xml
index 5a097172..bad3b8b2 100644
--- a/storage/pom.xml
+++ b/storage/pom.xml
@@ -7,10 +7,10 @@
com.zfoo
storage
jar
- 3.2.0
+ 3.2.0.a
- 3.2.0
+ 3.2.0.a
6.0.11
3.1.3
From 1b0613770545a0cf6879a119248dd2d9413d9940 Mon Sep 17 00:00:00 2001
From: qiaomr <1393092021@qq.com>
Date: Sat, 6 Jan 2024 11:40:38 +0800
Subject: [PATCH 2/3] =?UTF-8?q?memory=20=E8=B4=9F=E8=BD=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../AbstractConsumerLoadBalancer.java | 3 ++
.../ConsistentHashConsumerLoadBalancer.java | 45 +++++++++--------
...stentHashOfMemoryConsumerLoadBalancer.java | 49 +++++++++++++++++++
.../zfoo/net/handler/GatewayRouteHandler.java | 7 ++-
4 files changed, 83 insertions(+), 21 deletions(-)
create mode 100644 net/src/main/java/com/zfoo/net/consumer/balancer/ConsistentHashOfMemoryConsumerLoadBalancer.java
diff --git a/net/src/main/java/com/zfoo/net/consumer/balancer/AbstractConsumerLoadBalancer.java b/net/src/main/java/com/zfoo/net/consumer/balancer/AbstractConsumerLoadBalancer.java
index e30fef16..d1e91232 100644
--- a/net/src/main/java/com/zfoo/net/consumer/balancer/AbstractConsumerLoadBalancer.java
+++ b/net/src/main/java/com/zfoo/net/consumer/balancer/AbstractConsumerLoadBalancer.java
@@ -39,6 +39,9 @@ public abstract class AbstractConsumerLoadBalancer implements IConsumerLoadBalan
case "consistent-hash":
balancer = ConsistentHashConsumerLoadBalancer.getInstance();
break;
+ case "consistent-hash-of-memory":
+ balancer = ConsistentHashOfMemoryConsumerLoadBalancer.getInstance();
+ break;
default:
throw new RuntimeException(StringUtils.format("Load balancer is not recognized[{}]", loadBalancer));
}
diff --git a/net/src/main/java/com/zfoo/net/consumer/balancer/ConsistentHashConsumerLoadBalancer.java b/net/src/main/java/com/zfoo/net/consumer/balancer/ConsistentHashConsumerLoadBalancer.java
index dfc8b1f0..65ee46db 100644
--- a/net/src/main/java/com/zfoo/net/consumer/balancer/ConsistentHashConsumerLoadBalancer.java
+++ b/net/src/main/java/com/zfoo/net/consumer/balancer/ConsistentHashConsumerLoadBalancer.java
@@ -17,6 +17,7 @@ import com.zfoo.net.NetContext;
import com.zfoo.net.session.Session;
import com.zfoo.net.util.ConsistentHash;
import com.zfoo.net.util.FastTreeMapIntLong;
+import com.zfoo.net.util.HashUtils;
import com.zfoo.protocol.ProtocolManager;
import com.zfoo.protocol.collection.CollectionUtils;
import com.zfoo.protocol.exception.RunException;
@@ -42,7 +43,7 @@ public class ConsistentHashConsumerLoadBalancer extends AbstractConsumerLoadBala
private static final AtomicReferenceArray consistentHashMap = new AtomicReferenceArray<>(ProtocolManager.MAX_MODULE_NUM);
private static final int VIRTUAL_NODE_NUMS = 200;
- private ConsistentHashConsumerLoadBalancer() {
+ public ConsistentHashConsumerLoadBalancer() {
}
public static ConsistentHashConsumerLoadBalancer getInstance() {
@@ -62,6 +63,29 @@ public class ConsistentHashConsumerLoadBalancer extends AbstractConsumerLoadBala
return RandomConsumerLoadBalancer.getInstance().loadBalancer(packet, argument);
}
+ updateConsistentHashMap();
+
+ var module = ProtocolManager.moduleByProtocol(packet.getClass());
+ var fastTreeMap = consistentHashMap.get(module.getId());
+ if (fastTreeMap == null) {
+ fastTreeMap = updateModuleToConsistentHash(module);
+ }
+ if (fastTreeMap == null) {
+ throw new RunException("ConsistentHashLoadBalancer [protocol:{}][argument:{}], no service provides the [module:{}]", packet.getClass(), argument, module);
+ }
+ var nearestIndex = fastTreeMap.indexOfNearestCeilingKey(HashUtils.fnvHash(argument));
+ if (nearestIndex < 0) {
+ throw new RunException("no service provides the [module:{}]", module);
+ }
+ var sid = fastTreeMap.getByIndex(nearestIndex);
+ var session = NetContext.getSessionManager().getClientSession(sid);
+ if (session == null) {
+ throw new RunException("unknown no service provides the [module:{}]", module);
+ }
+ return session;
+ }
+
+ private void updateConsistentHashMap() {
// 如果更新时间不匹配,则更新到最新的服务提供者
var currentClientSessionChangeId = NetContext.getSessionManager().getClientSessionChangeId();
if (currentClientSessionChangeId != lastClientSessionChangeId) {
@@ -75,25 +99,6 @@ public class ConsistentHashConsumerLoadBalancer extends AbstractConsumerLoadBala
}
lastClientSessionChangeId = currentClientSessionChangeId;
}
-
- var module = ProtocolManager.moduleByProtocol(packet.getClass());
- var fastTreeMap = consistentHashMap.get(module.getId());
- if (fastTreeMap == null) {
- fastTreeMap = updateModuleToConsistentHash(module);
- }
- if (fastTreeMap == null) {
- throw new RunException("ConsistentHashLoadBalancer [protocol:{}][argument:{}], no service provides the [module:{}]", packet.getClass(), argument, module);
- }
- var nearestIndex = fastTreeMap.indexOfNearestCeilingKey(argument.hashCode());
- if (nearestIndex < 0) {
- throw new RunException("no service provides the [module:{}]", module);
- }
- var sid = fastTreeMap.getByIndex(nearestIndex);
- var session = NetContext.getSessionManager().getClientSession(sid);
- if (session == null) {
- throw new RunException("unknown no service provides the [module:{}]", module);
- }
- return session;
}
diff --git a/net/src/main/java/com/zfoo/net/consumer/balancer/ConsistentHashOfMemoryConsumerLoadBalancer.java b/net/src/main/java/com/zfoo/net/consumer/balancer/ConsistentHashOfMemoryConsumerLoadBalancer.java
new file mode 100644
index 00000000..1167336c
--- /dev/null
+++ b/net/src/main/java/com/zfoo/net/consumer/balancer/ConsistentHashOfMemoryConsumerLoadBalancer.java
@@ -0,0 +1,49 @@
+package com.zfoo.net.consumer.balancer;
+
+import com.zfoo.net.NetContext;
+import com.zfoo.net.session.Session;
+import org.apache.curator.shaded.com.google.common.util.concurrent.AtomicLongMap;
+
+/**
+ * 记忆化一致性hash
+ *
+ * @author qmr
+ * @date 2024/1/6
+ */
+public class ConsistentHashOfMemoryConsumerLoadBalancer extends ConsistentHashConsumerLoadBalancer {
+
+ public static final ConsistentHashOfMemoryConsumerLoadBalancer INSTANCE = new ConsistentHashOfMemoryConsumerLoadBalancer();
+
+ /**
+ * 存储已经负载后的sid
+ */
+ private static final AtomicLongMap uid2sidMap = AtomicLongMap.create();
+
+ private ConsistentHashOfMemoryConsumerLoadBalancer() {
+ }
+
+ public static ConsistentHashOfMemoryConsumerLoadBalancer getInstance() {
+ return INSTANCE;
+ }
+
+ @Override
+ public Session loadBalancer(Object packet, Object argument) {
+
+ if (argument instanceof Long) {
+ long sid = uid2sidMap.get((Long) argument);
+ if (sid > 0L) {
+ Session memorySession = NetContext.getSessionManager().getClientSession(sid);
+ if (null != memorySession){
+ return memorySession;
+ }else {
+ uid2sidMap.remove((Long) argument);
+ }
+ }
+ }
+ Session loadBalancer = super.loadBalancer(packet, argument);
+ if (argument instanceof Long){
+ uid2sidMap.put((Long) argument, loadBalancer.getSid());
+ }
+ return loadBalancer;
+ }
+}
diff --git a/net/src/main/java/com/zfoo/net/handler/GatewayRouteHandler.java b/net/src/main/java/com/zfoo/net/handler/GatewayRouteHandler.java
index 7dc1055d..2bb1ee4a 100644
--- a/net/src/main/java/com/zfoo/net/handler/GatewayRouteHandler.java
+++ b/net/src/main/java/com/zfoo/net/handler/GatewayRouteHandler.java
@@ -16,6 +16,7 @@ package com.zfoo.net.handler;
import com.zfoo.event.manager.EventBus;
import com.zfoo.net.NetContext;
import com.zfoo.net.consumer.balancer.ConsistentHashConsumerLoadBalancer;
+import com.zfoo.net.consumer.balancer.IConsumerLoadBalancer;
import com.zfoo.net.core.gateway.IGatewayLoadBalancer;
import com.zfoo.net.core.gateway.model.GatewaySessionInactiveEvent;
import com.zfoo.net.packet.DecodedPacketInfo;
@@ -26,6 +27,7 @@ import com.zfoo.net.router.attachment.GatewayAttachment;
import com.zfoo.net.router.attachment.SignalAttachment;
import com.zfoo.net.session.Session;
import com.zfoo.net.util.SessionUtils;
+import com.zfoo.protocol.ProtocolManager;
import com.zfoo.protocol.util.JsonUtils;
import com.zfoo.protocol.util.StringUtils;
import com.zfoo.scheduler.util.TimeUtils;
@@ -114,7 +116,10 @@ public class GatewayRouteHandler extends ServerRouteHandler {
*/
private void forwardingPacket(Object packet, Object attachment, Object argument) {
try {
- var consumerSession = ConsistentHashConsumerLoadBalancer.getInstance().loadBalancer(packet, argument);
+ // 网关统一用 moduleid uid 获取 session
+ var loadBalancer = NetContext.getConsumer().loadBalancer(ProtocolManager.moduleByProtocol(packet.getClass()));
+ Session consumerSession = loadBalancer.loadBalancer(packet, argument);
+// var consumerSession = ConsistentHashConsumerLoadBalancer.getInstance().loadBalancer(packet, argument);
NetContext.getRouter().send(consumerSession, packet, attachment);
} catch (Exception e) {
logger.error("An exception occurred at the gateway", e);
From c590ccf87aa96c1f7dd17f803884739dc80c3736 Mon Sep 17 00:00:00 2001
From: qiaomr <1393092021@qq.com>
Date: Sat, 6 Jan 2024 14:29:46 +0800
Subject: [PATCH 3/3] =?UTF-8?q?=E8=8E=B7=E5=8F=96=20memory?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ConsistentHashOfMemoryConsumerLoadBalancer.java | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/net/src/main/java/com/zfoo/net/consumer/balancer/ConsistentHashOfMemoryConsumerLoadBalancer.java b/net/src/main/java/com/zfoo/net/consumer/balancer/ConsistentHashOfMemoryConsumerLoadBalancer.java
index 1167336c..8e8fb365 100644
--- a/net/src/main/java/com/zfoo/net/consumer/balancer/ConsistentHashOfMemoryConsumerLoadBalancer.java
+++ b/net/src/main/java/com/zfoo/net/consumer/balancer/ConsistentHashOfMemoryConsumerLoadBalancer.java
@@ -2,8 +2,12 @@ package com.zfoo.net.consumer.balancer;
import com.zfoo.net.NetContext;
import com.zfoo.net.session.Session;
+import org.apache.curator.shaded.com.google.common.collect.Lists;
import org.apache.curator.shaded.com.google.common.util.concurrent.AtomicLongMap;
+import java.util.List;
+import java.util.Map;
+
/**
* 记忆化一致性hash
*
@@ -46,4 +50,8 @@ public class ConsistentHashOfMemoryConsumerLoadBalancer extends ConsistentHashCo
}
return loadBalancer;
}
+
+ public static Map getUid2sidMap(){
+ return uid2sidMap.asMap();
+ }
}