云设计模式之: 网关卸载模式

1. 缘由

在云应用中,经常有一些功能特性是跨服务的,也就是很多服务都需要同样的功能,比如SSL保护、认证、授权、协议转换、监控等,这样不仅给应用部署带来麻烦,而且冗余度大大增加。因此,将这些通用的功能卸载到网关,外部调用都先经过网关,然后由网关转发到后边的应用服务,这样也可以使得功能特性和非功能特性的代码分离,增加系统的健壮性和可维护性。

2. 解决方案

解决这个问题的方法之一就是使用网关卸载(Gateway Offloading)模式,其结构图如下所示:

上图中,可以看到从外部到API网关的调用是用SSL加密的,而网关到内部服务的调用不需要加密,这样就简化了内部服务的部署,并且可以在网关添加一些后端服务共有的功能,或者非功能特性,比如调用统计。共性的东西部署到网关,因此这些特性的维护就只需要维护好网关就可以了,简化了管理。此外,这样分离的作用还可以促使更好的分工,比如某个团队专门开发和维护网关,另外的业务开发团队专注于后端应用服务的开发,而不需要考虑诸如SSL加密、认证授权等功能,这样可以使得业务开发更单纯更高效。

3. 需要考虑的问题

使用这个模式后,要避免API网关的单点故障问题,因此往往需要部署多个网关实例。同时,需要考虑网关的可扩展性和并发性,不要让网关成为瓶颈。一般来说,其它服务都需要的功能,才会放置到网关,而且需要注意的是,网关不应该承载任何业务功能。

4. 具体示例

使用Nginx来做网关,它接收客户端的HTTPS请求后,将这些请求以HTTP的形式转发到后端的上游服务器。这种情况下,Nginx可以这样配置:

微信扫码,进入【技术人成长】社群逛逛。