Net分布式系统之六:微服务之API网关

  本人创建了我的技术、工做经验的分享微信号,计划后续公众号同步更新分享,比在此更多具体。欢迎有兴趣的同窗一块儿加入相互学习。基于上篇微服务架构分享,今天分享其中一个重要的基础组件“API网关”。node

1、引言nginx

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

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


  

2、业界相关网关框架api

  业界为了知足这些需求,已有相关的网关框架。浏览器

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

  二、自研发的网关有:apigee、Zuul微信


 

 

3、API网关设计网络

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

    

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

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

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

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

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

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

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

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


 

 

4、API网关部署

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

           

                                                                      图2- API网关部署示意图


 

5、API网关实现技术

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

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

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

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


 

6、结语

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

 

 

做者:刘蔡涛
出处: http://www.cnblogs.com/Andon_liu 
关于做者:专一于微软平台项目架构、管理。熟悉设计模式、领域驱动、架构设计、敏捷开发和项目管理。现主要从事ASP.NET MVC、WCF/Web API、SOA、MSSQL、redis方面的项目开发、架构、管理工做。 若有问题或建议,请一块儿学习讨论! 
本文版权归做者和博客园共有,欢迎转载,但未经做者赞成必须保留此段声明,且在文章页面明显位置给出原文链接。 
若有问题,能够邮件:568773262@qq.com 联系我,谢谢。


微信号: 

相关文章
相关标签/搜索