Api网关
API 网关起到的作用
API 网关可以分为两类:一类叫做入口网关,一类叫做出口网关。
入口网关
入口网关部署在负载均衡服务器和应用服务器之间,主要有几方面的作用。
1、它提供客户端一个统一的接入地址,API 网关可以将用户的请求动态路由到不同的业务服务上,并且做一些必要的协议转换工作。这里有一点需要注意,你部署的微服务对外暴露的协议可能不同,有些可能是RPC,有些可能是Http,这些细节都可以在网关中处理。
2、另一方面,在 API 网关中,我们可以植入一些服务治理的策略,比如服务的熔断、降级、流量控制和分流等等。
3、客户端的认证和授权的实现,也可以放在 API 网关中。
4、另外,API 网关还可以做一些与黑白名单相关的事情,比如针对设备 ID、用户 IP、用户 ID 等维度的黑白名单。
5、最后,在 API 网关中也可以做一些日志记录的事情。

出口网关
我们在系统开发中,会依赖很多外部的第三方系统,典型的例子:第三方账户登录、使用第三方工具支付等等。我们可以在应用服务器和第三方系统之间,部署出口网关,在出口网关中,对调用外部的 API 做统一的认证、授权、审计以及访问控制。

网关实现
在实现网关时,需要注意一点:为了提升网关对于请求的并行处理能力,我们一般会使用线程池来并行的执行请求。
但是这样设计也同样会带来一些问题:假如一个服务出现问题导致响应过慢,那么调用该服务的模块也会被阻塞,其他服务也会级联受到影响,导致无法线程池中的线程无法释放,对整个系统造成影响。
因此,我们需要针对不同的服务做线程隔离或者保护。有两种思路:
- 如果你后端的服务拆分得不多,可以针对不同的服务,采用不同的线程池,这样一个服务的故障就不会影响到其他服务;
- 在线程池内部可以针对不同的服务甚至不同的接口做线程的保护。比如说,线程池的最大线程数是 1000,那么可以给每个服务设置一个最多可以使用的配额。