From 5014c53a1bf672834f03606417d236c2dacb20c5 Mon Sep 17 00:00:00 2001 From: anaer Date: Fri, 27 Aug 2021 13:05:58 +0800 Subject: [PATCH] =?UTF-8?q?Update=20=E5=A6=82=E4=BD=95=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E4=B8=80=E4=B8=AA=E4=BA=BF=E7=BA=A7=E7=BD=91=E5=85=B3.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api-gateway/如何设计一个亿级网关.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/system-design/distributed-system/api-gateway/如何设计一个亿级网关.md b/docs/system-design/distributed-system/api-gateway/如何设计一个亿级网关.md index 01c8400e..9e66f24b 100644 --- a/docs/system-design/distributed-system/api-gateway/如何设计一个亿级网关.md +++ b/docs/system-design/distributed-system/api-gateway/如何设计一个亿级网关.md @@ -17,7 +17,7 @@ API网关可以看做系统与外界联通的入口,我们可以在网关进 - 统一鉴权 -对于鉴权操作不涉及到业务逻辑,那么可以在网关层进行处理,不用下层到业务逻辑。 +对于鉴权操作不涉及到业务逻辑,那么可以在网关层进行处理,不用下沉到业务逻辑。 - 统一监控 @@ -87,7 +87,7 @@ Netty为高并发而生,目前唯品会的网关使用这个策略,在唯品 这种设计在有赞的网关也有应用。 ## 2.3 业务隔离 -上面在全链路异步的情况下不同业务之间的影响很小,但是如果在提供的自定义FiIlter中进行了某些同步调用,一旦超时频繁那么就会对其他业务产生影响。所以我们需要采用隔离之术,降低业务之间的互相影响。 +上面在全链路异步的情况下不同业务之间的影响很小,但是如果在提供的自定义Filter中进行了某些同步调用,一旦超时频繁那么就会对其他业务产生影响。所以我们需要采用隔离之术,降低业务之间的互相影响。 #### 2.3.1 信号量隔离 信号量隔离只是限制了总的并发数,服务还是主线程进行同步调用。这个隔离如果远程调用超时依然会影响主线程,从而会影响其他业务。因此,如果只是想限制某个服务的总并发调用量或者调用的服务不涉及远程调用的话,可以使用轻量级的信号量来实现。有赞的网关由于没有自定义filter所以选取的是信号量隔离。 @@ -108,7 +108,7 @@ Netty为高并发而生,目前唯品会的网关使用这个策略,在唯品 ## 2.5 熔断降级 这一块也可以参照开源的实现Sentinel和Hystrix,这里不是重点就不多提了。 ## 2.6 泛化调用 -泛化调用指的是一些通信协议的转换,比如将HTTP转换成Thrift。在一些开源的网关中比如Zuul是没有实现的,因为各个公司的内部服务通信协议都不同。比如在唯品会中支持HTTP1,HTTP2,以及二进制的协议,然后转化成内部的协议,淘宝的支持HTTPS,HTTP1,HTTP2这些协议都可以转换成,HTTP,HSF,Dubbo等协议。 +泛化调用指的是一些通信协议的转换,比如将HTTP转换成Thrift。在一些开源的网关中比如Zuul是没有实现的,因为各个公司的内部服务通信协议都不同。比如在唯品会中支持HTTP1,HTTP2以及二进制的协议,然后转化成内部的协议,淘宝的支持HTTPS,HTTP1,HTTP2这些协议都可以转换成HTTP,HSF,Dubbo等协议。 #### 2.6.1泛化调用 如何去实现泛化调用呢?由于协议很难自动转换,那么其实每个协议对应的接口需要提供一种映射。简单来说就是把两个协议都能转换成共同语言,从而互相转换。 @@ -122,9 +122,9 @@ Netty为高并发而生,目前唯品会的网关使用这个策略,在唯品 代码块 -``` +```json { - “method”: "getBaidu" + "method": "getBaidu" "param" : { "id" : 1 } @@ -133,7 +133,7 @@ Netty为高并发而生,目前唯品会的网关使用这个策略,在唯品 - xml:xml数据比较重,解析比较困难,这里不过多讨论。 -- 自定义描述语言:一般来说这个成本比较高需要自己定义语言来进行描述并进行解析,但是其扩展性,自定义个性化性都是最高。例:spring自定义了一套自己的SPEL表达式语言 +- 自定义描述语言:一般来说这个成本比较高需要自己定义语言来进行描述并进行解析,但是其扩展性,自定义个性化都是最高。例:spring自定义了一套自己的SPEL表达式语言 对于泛化调用如果要自己设计的话JSON基本可以满足,如果对于个性化的需要特别多的话倒是可以自己定义一套语言。 ## 2.7 管理平台 @@ -182,4 +182,4 @@ Netty为高并发而生,目前唯品会的网关使用这个策略,在唯品 **Java工程师必备学习资源:** 一些Java工程师常用学习资源公众号后台回复关键字 **“1”** 即可免费无套路获取。 -![我的公众号](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/167598cd2e17b8ec.png) \ No newline at end of file +![我的公众号](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/167598cd2e17b8ec.png)