引言
随着互联网的快速发展,当前以步入移动互联、物联网时代。用户访问系统入口也变得多种方式,由原来单一的PC客户端,变化到PC客户端、各种浏览器、手机移动端及智能终端等。同时系统之间大部分都不是单独运行,经常会涉及与其他系统对接、共享数据的需求。所以系统需要升级框架满足日新月异需求变化,支持业务发展,并将框架升级为微服务架构, API网关核心组件是为了满足这些需求产生的。
很多互联网平台已基于网关的设计思路,构建自身平台的API网关,国内主要有京东、携程、唯品会等,国外主要有Netflix、Amazon等。
业界为了满足这些需求,已有相关的网关框架。
- 基于nginx平台实现的网关有:
KONG
、API Umbrella
- 自研发的网关有:
apigee
、Zuul
1. API网关设计
API网关 是微服务架构(Microservices Architecture)标准化服务的模式。API网关定位为应用系统服务接口的网关,区别于网络技术的网关,但是原理则是一样。
API网关统一服务入口,可方便实现对平台众多服务接口进行管控,对访问服务的身份认证、防报文重放与防数据篡改、功能调用的业务鉴权、响应数据的脱敏、流量与并发控制,甚至基于API调用的计量或者计费等等。
2. 网关的应用场景
- 黑白名单:实现通过IP地址控制禁止访问网关功能,此功能是应用层面控制实现,再往前也可以通过网络传输方面进行控制访问。
- 日志:实现访问日志的记录,可用于分析访问、处理性能指标,同时将分析结果支持其他模块功能应用。
- 协议适配:实现通信协议校验、适配转换的功能。
- 身份认证:负责网关访问身份认证验证,此模块与“访问认证中心”通信,实际认证业务逻辑交移“访问认证中心”处理。
- 计流限流:实现微服务访问流量计算,基于流量计算分析进行限流,可以定义多种限流规则。
- 路由:路由是API网关很核心的模块功能,此模块实现根据请求,锁定目标微服务并将请求进行转发。此模块需要与“服务发布管理中心”通信。“服务发布管理中心”实现微服务发布注册管理功能,与其通信获得目标微服务信息。
3. API网关部署
API网关是一个公共基础组件,无状态,可支持多套分布式部署。如下图所示:
基于Nginx实现API网关,nginx.config的代码如下:
http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name localhost; location /api-a { proxy_pass http://127.0.0.1:8000/; index index.html index.htm; } location /api-b { proxy_pass http://127.0.0.1:8001/; index index.html index.htm; } } }
除了Nginx的方式,还有Zuul。下一章节中,将讲解 “基于Zuul实现API网关”。