fd09f895670f47d26c27cece3dacca218bf2f033
\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 |