首页 > 代码库 > API网关

API网关

微服务之API网关

一、引言

 

  随着互联网的快速发展,当前以步入移动互联、物联网时代。用户访问系统入口也变得多种方式,由原来单一的PC客户端,变化到PC客户端、各种浏览器、手机移动端及智能终端等。同时系统之间大部分都不是单独运行,经常会涉及与其他系统对接、共享数据的需求。所以系统需要升级框架满足日新月异需求变化,支持业务发展,并将框架升级为微服务架构。“API网关”核心组件是架构用于满足此些需求。

 

  很多互联网平台已基于网关的设计思路,构建自身平台的API网关,国内主要有京东、携程、唯品会等,国外主要有Netflix、Amazon等。

 


 

  

 

二、业界相关网关框架

 

  业界为了满足这些需求,已有相关的网关框架。

 

  1、基于nginx平台实现的网关有:KONG、API Umbrella

 

  2、自研发的网关有:apigee、Zuul

 


 

 

 

 

 

三、API网关设计

 

  API网关是微服务架构(Microservices Architecture)标准化服务的模式。API网关定位为应用系统服务接口的网关,区别于网络技术的网关,但是原理则是一样。API网关统一服务入口,可方便实现对平台众多服务接口进行管控,对访问服务的身份认证、防报文重放与防数据篡改、功能调用的业务鉴权、响应数据的脱敏、流量与并发控制,甚至基于API调用的计量或者计费等等。组件设计如下:

 

    技术分享

 

                                                                                图1- API网关功能结构示意图

 

  多种客户端程序,例如:移动APP、PC端和智能终端设备等。客户端程序通过互联网或者专网访问API网关,由API网关统一接收请求后,通过一系列模块定位具体处理的微服务机,并将其转发至目标服务处理,网关与微服务之间通信是内部局域网。API网关统一规范平台对外的服务,同时充当了平台的PaaS层。如上图所示,API网关功能结构基于管道模型和支持可插拔式的设计开发,提供统一基于http协议的WebAPI访问接口,内部每个模块各自实现功能,包括:黑白名单、日志、协议适配、身份认证、计流限流及路由。并且依赖“访问认证中心、服务发布管理中心”分别实现API网关访问权限控制和定位目标微服务。各模块功能说明如下:

 

  1、黑白名单:实现通过IP地址控制禁止访问网关功能,此功能是应用层面控制实现,再往前也可以通过网络传输方面进行控制访问。

 

  2、日志:实现访问日志的记录,可用于分析访问、处理性能指标,同时将分析结果支持其他模块功能应用。

 

  3、协议适配:实现通信协议校验、适配转换的功能。

 

  4、身份认证:负责网关访问身份认证验证,此模块与“访问认证中心”通信,实际认证业务逻辑交移“访问认证中心”处理。

 

  5、计流限流:实现微服务访问流量计算,基于流量计算分析进行限流,可以定义多种限流规则。

 

  6、路由:路由是API网关很核心的模块功能,此模块实现根据请求,锁定目标微服务并将请求进行转发。此模块需要与“服务发布管理中心”通信。“服务发布管理中心”实现微服务发布注册管理功能,与其通信获得目标微服务信息。

 


 

 

 

 

 

四、API网关部署

 

  API网关是一个公共基础组件,无状态,可支持多套分布式部署。如下图所示:

 

           技术分享

 

                                                                      图2- API网关部署示意图

 


 

 

 

五、API网关实现技术

 

  1、技术:框架整体基于.NET平台构建,所以API网关也暂定基于.NET4.6平台和ASP.NET WebAPI2.0框架实现。具体软件架构就用上一篇所介绍的。

 

  2、性能:部署于IIS7.0,1000个并发查询请求,平均响应90ms。

 

  可能在IIS7.0和.Net4.6平台,在大并发性能处理上会更不上,后续将考虑基于.net core进行升级开发,并部署于Linux平台。

 

  API网关主要原理是相通,不同平台结合本身平台整体框架设计,可选用不同的技术实现,目前有些基于Spring MVC、node.js、Erlang技术进行研发。

 


 

 

 

六、结语

 

  以上是对API网关概要进行设计,还有其他方面的内容此篇文章未讨论,例如:安全性、高并发、扩展性等特性设计,同时作为平台其中一个组件,也涉及与其他组件一并协同运行。此块内容会后续分享。

API网关