Skip to content

Commit 06baca5

Browse files
authored
Merge pull request Snailclimb#1350 from anaer/patch-11
Update 如何设计一个亿级网关.md
2 parents b982a6e + 5014c53 commit 06baca5

File tree

1 file changed

+7
-7
lines changed

1 file changed

+7
-7
lines changed

docs/system-design/distributed-system/api-gateway/如何设计一个亿级网关.md

+7-7
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ API网关可以看做系统与外界联通的入口,我们可以在网关进
1717

1818
- 统一鉴权
1919

20-
对于鉴权操作不涉及到业务逻辑,那么可以在网关层进行处理,不用下层到业务逻辑
20+
对于鉴权操作不涉及到业务逻辑,那么可以在网关层进行处理,不用下沉到业务逻辑
2121

2222
- 统一监控
2323

@@ -87,7 +87,7 @@ Netty为高并发而生,目前唯品会的网关使用这个策略,在唯品
8787
这种设计在有赞的网关也有应用。
8888

8989
## 2.3 业务隔离
90-
上面在全链路异步的情况下不同业务之间的影响很小,但是如果在提供的自定义FiIlter中进行了某些同步调用,一旦超时频繁那么就会对其他业务产生影响。所以我们需要采用隔离之术,降低业务之间的互相影响。
90+
上面在全链路异步的情况下不同业务之间的影响很小,但是如果在提供的自定义Filter中进行了某些同步调用,一旦超时频繁那么就会对其他业务产生影响。所以我们需要采用隔离之术,降低业务之间的互相影响。
9191

9292
#### 2.3.1 信号量隔离
9393
信号量隔离只是限制了总的并发数,服务还是主线程进行同步调用。这个隔离如果远程调用超时依然会影响主线程,从而会影响其他业务。因此,如果只是想限制某个服务的总并发调用量或者调用的服务不涉及远程调用的话,可以使用轻量级的信号量来实现。有赞的网关由于没有自定义filter所以选取的是信号量隔离。
@@ -108,7 +108,7 @@ Netty为高并发而生,目前唯品会的网关使用这个策略,在唯品
108108
## 2.5 熔断降级
109109
这一块也可以参照开源的实现Sentinel和Hystrix,这里不是重点就不多提了。
110110
## 2.6 泛化调用
111-
泛化调用指的是一些通信协议的转换,比如将HTTP转换成Thrift。在一些开源的网关中比如Zuul是没有实现的,因为各个公司的内部服务通信协议都不同。比如在唯品会中支持HTTP1,HTTP2,以及二进制的协议,然后转化成内部的协议,淘宝的支持HTTPS,HTTP1,HTTP2这些协议都可以转换成,HTTP,HSF,Dubbo等协议。
111+
泛化调用指的是一些通信协议的转换,比如将HTTP转换成Thrift。在一些开源的网关中比如Zuul是没有实现的,因为各个公司的内部服务通信协议都不同。比如在唯品会中支持HTTP1,HTTP2以及二进制的协议,然后转化成内部的协议,淘宝的支持HTTPS,HTTP1,HTTP2这些协议都可以转换成HTTP,HSF,Dubbo等协议。
112112

113113
#### 2.6.1泛化调用
114114
如何去实现泛化调用呢?由于协议很难自动转换,那么其实每个协议对应的接口需要提供一种映射。简单来说就是把两个协议都能转换成共同语言,从而互相转换。
@@ -122,9 +122,9 @@ Netty为高并发而生,目前唯品会的网关使用这个策略,在唯品
122122

123123
代码块
124124

125-
```
125+
```json
126126
{
127-
method: "getBaidu"
127+
"method": "getBaidu"
128128
"param" : {
129129
"id" : 1
130130
}
@@ -133,7 +133,7 @@ Netty为高并发而生,目前唯品会的网关使用这个策略,在唯品
133133

134134
- xml:xml数据比较重,解析比较困难,这里不过多讨论。
135135

136-
- 自定义描述语言:一般来说这个成本比较高需要自己定义语言来进行描述并进行解析,但是其扩展性,自定义个性化性都是最高。例:spring自定义了一套自己的SPEL表达式语言
136+
- 自定义描述语言:一般来说这个成本比较高需要自己定义语言来进行描述并进行解析,但是其扩展性,自定义个性化都是最高。例:spring自定义了一套自己的SPEL表达式语言
137137

138138
对于泛化调用如果要自己设计的话JSON基本可以满足,如果对于个性化的需要特别多的话倒是可以自己定义一套语言。
139139
## 2.7 管理平台
@@ -182,4 +182,4 @@ Netty为高并发而生,目前唯品会的网关使用这个策略,在唯品
182182

183183
**Java工程师必备学习资源:** 一些Java工程师常用学习资源公众号后台回复关键字 **“1”** 即可免费无套路获取。
184184

185-
![我的公众号](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/167598cd2e17b8ec.png)
185+
![我的公众号](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/167598cd2e17b8ec.png)

0 commit comments

Comments
 (0)