代理
最常见的就是http代理。也有tcp代理(更高级的就是vpn),grpc代理等。
代理的能力:为client提供访问特定网络的能力;为服务提供统一的入口,屏蔽后端服务;为服务端实现业务分流。
服务端的代理往往跟网关合一。
http代理
HTTP代理分为正向代理和反向代理两种:
- 正向代理是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。大部分用户使用的都是正向代理,常用的Chrome插件有SwitchyOmega。
- 反向代理正好相反,对于客户端而言它就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理的命名空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端,就像这些内容原本就是它自己的一样。主要是项目方根据自己的需要设置的,它经常由网关提供能力。
有兴趣研究实现的,可以看看http proxy
grpc代理
这个有需求的应该很少,我也是最近项目遇到,需要这样的功能。 proxy根据不同的grpc,将请求发送到后端不同的微服务上。从而让功能分离,模块简单,微服务化,方便升级。
我项目里面都是用golang的,之前找了一个开源的grpc proxy,不过它有个bug,如果是数组,会导致只返回数组的最后一项,其他的丢失了。 所以我拿着它的代码,进行了一些改造,有兴趣的看我改造的grpc proxy