01前言
在微服务中,由于以业务划分会有很多个子模块。在面对外部系统的API调用时如果每个请求都直接到达对应的子模块接口,那么这样的请求会有很多个,尤其在业务庞杂的大型电商或支付系统中,对外和对内会形成无数个调用链路错综复杂。有时还要面对例如:鉴权、安全保护、限流控制等。因此,有一个统一用来管理和控制外部访问的API接口就会显得常重要。所有的外部请求都首先到达这个API接口,再经由这个接口API经过路由转发到达具体的某个业务系统。从而达到代理请求、统一管理控制的目的,这个API接口就叫API网关。
02网关简介
2.1 什么是网关
网关的角色是作为一个API架构,用来保护、增强和控制对于API服务的访问。它是一个处于应用程序或服务(提供REST API接口服务)之前的系统,用来管理授权、访问控制和流量限制等。这样REST API接口服务就被网关保护起来,对所有的调用者透明。因此,隐藏在API网关后面的业务系统就可以专注于创建和管理服务,无需关心这些策略性的请求。
2.2 API网关的四大职能
- 请求接入:
作为所有API接口服务请求的接入点,管理所有的接入请求。 - 业务聚合:
作为所有后端业务服务的聚合点,所有的业务服务都可以在这里被调用。 - 中介策略:
实现安全、验证、路由、过滤、流控、缓存等策略,进行一些必要的中介处理。 - 统一管理:提供配置管理工具,对所有API服务的调用生命周期和相应的中介策略进行统一管理。
2.3 API网关的关注点
API网关并不是一个典型的业务系统,而是一个为了让业务系统更专注于业务本身,给API服务提供更多附加能力的一个中间层。主要考虑许下几个目标:
- 开发维护简单,节约人力成本和维护成本。
即应选择成熟的简单可维护的技术体系。 - 高性能,节约设备成本,提高系统吞吐能力。
需要对API网关的特点进行一些特定的涉及和权衡。 - 保持大规模的inbound请求接入能力(长短链接),比如基于Netty实现。
- 最大限度地复用outbound的HTTP连接能力,比如基于httpClietn4的异步实现。
- 方便灵活地实现安全、验证、过滤、聚合、限流、监控等各种策略。
03四大网关对比
3.1 四大主流网关介绍
目前流行的用得较多的几个网关:Zuul 2、SpringCLoud Gateway、Kong、OpenResty。他们都基于各自不同的语言实现,也都有着各自不同的优缺点。
04总结
基于不同的业务场景,选择不同的API网关组件,应对不同的系统流量和并发数。不同的业务场景,在技术选型上也是及其重要的一环。例如:Kong的性能虽然非常不错,适合做流量网关,但是对于复杂的业务系统不建议用Kong,因为会给系统的性能带来缺陷。再如SpringCloud GateWay/Zuul2对于Java技术栈来说比较方便,但是对于lua开发语言不方便。