\345\210\206\345\270\203\345\274\217\347\263\273\347\273\237\346\236\266\346\236\204\346\226\271\346\241\210\350\256\276\350\256\241\345\210\235\347\250\277.md
... ...
@@ -31,6 +31,8 @@
31 31
}
32 32
```
33 33
34
+[[http://iidp.chinasie.com:9999/iidpminio/sie-snest-gw/p1.png]]
35
+
34 36
#### 1.2 引擎转发逻辑问题
35 37
36 38
引擎的转发逻辑是:如果目标app在本地容器中,则直接处理;如果不在本地容器中,则转发请求。
... ...
@@ -71,6 +73,12 @@
71 73
return new Tuple<>(false, null);
72 74
}
73 75
```
76
+就绪探针和存活探针存在的问题
77
+
78
+[[http://iidp.chinasie.com:9999/iidpminio/sie-snest-gw/p2.png]]
79
+
80
+[[http://iidp.chinasie.com:9999/iidpminio/sie-snest-gw/p3.png]]
81
+
74 82
#### 1.3 转发的路由问题
75 83
76 84
已有的实现是将app和对应的路由关系保存在redis中,且不说redis可能丢失数据的问题,现有实现也没有一种类似路由存活的机制,比如某个业务app下线了,但路由信息还在,依然会将请求转发到这个容器中,造成不可访问。
... ...
@@ -166,10 +174,12 @@ sidecar 回调,如果不成功会一直尝试:
166 174
167 175
### 2. 新的实现方案
168 176
169
-#### 2.1 使用网关进行统一管理
177
+#### 2.1 使用网关进行统一管理和路由分发
170 178
171 179
网关服务可以通过固定的 service 名称(如 `master`)来实现统一管理,确保先启动并完成所有内置应用的表结构初始化、种子数据初始化等只需要一个容器一次性初始化任务。这些任务只需要一个容器执行,无需在所有容器中重复执行。
172 180
181
+[[http://iidp.chinasie.com:9999/iidpminio/sie-snest-gw/p5.jpg]]
182
+
173 183
网关高可用:
174 184
- 网关可以部署多个实例,实现无状态和高可用。
175 185
- 通过选主机制(Leader Election),确保高可用性。
... ...
@@ -300,6 +310,8 @@ public class ServiceRegistry {
300 310
- 在安装和重启时,可以直接从 service yaml 文件中 获取完整的需要安装的app信息,没有各做一半的情况,无需协调和回调,独立可完成全部的安装和重启。
301 311
- 使用pod ip直接通信,实现透明通信,支持 stream 模式,体验类似于单机版。
302 312
313
+[[http://iidp.chinasie.com:9999/iidpminio/sie-snest-gw/p4.png]]
314
+
303 315
304 316
此外,本地缓存可通过 watch 功能主动更新,防止无意义、尝试性的操作。可以参考以下示例代码实现 watch 功能:
305 317
```java