普元云计算-API管理的正确姿式--API Gatewa

编者按:html

 

数字化生态,以创新客户体验为核心,全部咱们身边能感知到的变化都来自于渐近的创新。这些创新须要试错,须要不断的升级,而且创新每每与咱们熟知的功能分离开来分别呈现。微服务对于传统单体架构的优点之一就在于,服务的拆分带来了更新、部署、管理的隔离性,让一些单独的服务能够进行创新和实验。从而支撑了用户体验的不断升级,为实现企业数字化转型的过程,提供了技术架构层面的支撑。算法

 

咱们如今已经能够很方便的经过一些电子商城购买运营的合约机,而无需到营业厅亲自办理相关的业务,这就是API Gateway的一种底层支撑。因为运营商经过API Gateway向第三方的商务平台开放了与套餐、机型销售等服务,并经过流控、鉴权等机制保障相关的安全性,才使得这样方便流畅的购物体验得以实现。安全

 

对于MOBA手游类玩家来讲,“王者荣耀”是一款颇受欢迎的游戏。在一些场景下,咱们会感知到“不停机更新”“体验服更新”这两种不一样方式的更新形态,在底层,就是API Gateway或者相似技术的实现,支撑灰度发布,让一些新特性发布给体验服(好比传说中露娜的二技能变化,仅在体验服更新,实际上并未如传说中同样在S11赛季更新到正式服),或者特定的游戏用户,待功能完善或者稳定运行,再向正式服或者所有用户发布,让游戏玩家的体验能够更加流畅,甚至是无感知的升级。服务器

 

这些只是微服务架构或者API Gateway所支撑的万千业务场景中的沧海一粟。架构

 

但微服务自己也会带来诸多问题,粒度小难以管理就是其中之一,本文即从这个角度,阐述了API Gateway所起到的做用和一些关键的技术要素。负载均衡

 

以微服务为核心的分布式框架贯穿了普元数字化企业技术平台的APaaS层面,本文所介绍的API Gateway是其中的关键组成部分(图中标黄的部分)。框架

 

 

 

引言:运维

 

随着微服务的大红大紫,你们纷纷使用微服务架构来实现新系统或进行老系统的改造。固然,微服务带给咱们太多的好处,同时也带给咱们许多的问题须要解决。采用微服务后,全部的服务都变成了一个个细小的API,那么这些服务API该怎么正确的管理?API认证受权如何实现?如何实现服务的负载均衡,熔断,灰度发布,限流流控?如何合理的治理这些API服务尤为重要。在微服务架构中,API Gateway做为总体架构的重要组件,它抽象了微服务中都须要的公共功能,同时提供了客户端负载均衡,服务自动熔断,灰度发布,统一认证,限流流控,日志统计等丰富的功能,帮助咱们解决不少API管理难题。分布式

 

目录:ide

 

1、什么是API Gateway

2、为何须要API Gateway

3、API Gateway中一些重要的功能

4、API Gateway vs 反向代理

5、API Gateway对API的认证及鉴权

6、采用OAuth2方式认证的两种部署方式

7、总结

 

1、什么是API Gateway

 

 

这张图,很是形象的解释了API Gateway和微服务的关系。作为听众,咱们只想听到美妙动人的音乐旋律,彻底不会在意音乐是怎么演奏的。而指挥家则根据乐谱负责指挥好每个演奏者,使每个演奏者之间配合默契,共同完成这场音乐演出。在微服务的世界里,API Gateway就如同一位指挥家,“指挥”着不一样的“演奏人”(微服务)。

 

 

 

咱们知道在微服务架构中,大型服务都被拆分红了独立的微服务,每一个微服务一般会以RESTFUL API的形式对外提供服务。可是在UI方面,咱们可能须要在一个页面上显示来自不一样微服务的数据,此时就会须要一个统一的入口来进行API的调用。上图中咱们能够看到,API Gateway就在此场景下充当了多个服务的大门,系统的统一入口,从面向对象设计的角度看,它与外观模式相似,API Gateway封装了系统的内部复杂结构,同时它还可能具备其余API管理/调用的通用功能,如认证,限流,流控等功能。

 

 

2、为何须要API Gateway

 

 

 

首先,Chris Richardson在http://microservices.io/中也说起到,在微服务的架构模式下,API Gateway是微服务架构中一个很是通用的模式,利用API Gateway能够解决调用方如何调用独立的微服务这个问题。

 

 

 

从部署结构上说,上图是不采用API Gateway的微服务部署模式,咱们能够清晰看到,这种部署模式下,客户端与负载均衡器直接交互,完成服务的调用。但这是这种模式下,也有它的不足。

 

不支持动态扩展,系统每多一个服务,就须要部署或修改负载均衡器。

没法作到动态的开关服务,若要下线某个服务,须要运维人员将服务地址从负载均衡器中移除。

对于API的限流,安全等控制,须要每一个微服务去本身实现,增长了微服务的复杂性,同时也违反了微服务设计的单一职责原则。

 

 

上图为采用API Gateway模式,咱们经过上图能够看到,API Gateway作为系通通一入口,实现了对各个微服务间的整合,同时又作到了对客户端友好,屏蔽系统了复杂性和差别性。对比以前无API Gateway模式,API Gateway具备几个比较重要的优势:

 

采用API Gateway能够与微服务注册中心链接,实现微服务无感知动态扩容。

API Gateway对于没法访问的服务,能够作到自动熔断,无需人工参与。

API Gateway能够方便的实现蓝绿部署,金丝雀发布或A/B发布。

API Gateway作为系通通一入口,咱们能够将各个微服务公共功能放在API Gateway中实现,以尽量减小各服务的职责。

帮助咱们实现客户端的负载均衡策略。

 

3、API Gateway中一些重要的功能

 

 

下面咱们用图来讲明API Gateway中一些重要的功能:

 

负载均衡

 

 

 

 

在实际的部署应用中,当应用系统面临大量访问,负载太高时,一般咱们会增长服务数量来进行横向扩展,使用集群来提升系统的处理能力。此时多个服务经过某种负载算法分摊了系统的压力,咱们将这种多节点分摊压力的行为称为负载均衡。

 

API Gateway能够帮助咱们轻松的实现负载均衡,利用服务发现知道全部Service的地址和位置,经过在API Gateway中实现负载均衡算法,就能够实现负载均衡效果。

 

服务熔断

 

 

在实际生产中,一些服务颇有可能由于某些缘由发生故障,若是此时不采起一些手段,会致使整个系统“雪崩”。或因系统总体负载的考虑,会对服务访问次数进行限制。服务熔断、服务降级就是解决上述问题的主要方式。API Gateway能够帮助咱们实现这些功能,对于服务的调用次数的限制,当某服务达到上限时,API Gateway会自动中止向上游服务发送请求,并像客户端返回错误提示信息或一个统一的响应,进行服务降级。对于须要临时发生故障的服务,API Gateway自动能够打开对应服务的断路器,进行服务熔断,防止整个系统“雪崩”。

 

灰度发布

 

 

 

 

服务发布上线过程当中,咱们不可能将新版本所有部署在生产环节中,由于新版本并无接受真实用户、真实数据、真实环境的考验,此时咱们须要进行灰度发布,灰度发布能够保证总体系统的稳定,在初始灰度的时候就能够发现、调整问题,同时影响小。API Gateway能够帮助咱们轻松的完成灰度发布,只须要在API Gateway中配置咱们须要的规则,按版本,按IP段等,API Gateway会自动为咱们完成实际的请求分流。

 

 

4、API Gateway vs 反向代理

 

 

反向代理

 

 

在传统部署架构中,反向代理,大可能是用于多个系统模块间的聚合,实现负载均衡,外网向内网的转发。经过修改配置文件的方式来进行增长或删除节点,并重启服务才可生效。一般来讲,反向代理服务器只具有负载均衡、转发基本功能,若要须要其余功能,须要增长扩展或提供脚原本实现。

 

API Gateway

 

 

在API Gateway部署模式中,API Gateway能够看做特殊的反向代理,是对反向代理服务器功能的扩充,同时API Gateway仅局限于服务API层面,对API作进一步的管理,保护。API Gateway不只提供了负载均衡,转发功能,还提供了灰度发布,统一认证,熔断,消息转换,访问日志等丰富的功能。

 

如何选择?

 

假若咱们实际运用中,不须要服务发现,服务动态扩容,服务熔断,统一认证,消息转换等一系列API Gateway功能,咱们彻底可使用反向代理服务器来部署微服务架构,固然若是这样作,如遇到增长或减小服务节点时,须要修改反向代理服务器配置,重启服务才能够生效。而当咱们可能不只仅须要负载均衡,内外网转发,还须要其余功能,又同时想实现一些各服务都须要的通用的功能时,这时候就改考虑API Gateway了。

 

 

5、API Gateway对API的

认证及鉴权

 

 

目前在微服务中,咱们还须要考虑如何保护咱们的API只能被赞成受权的客户调用。那么对于API的保护,目前大多数采用的方式有这么几种,分别为AppKeys,OAuth2 和 OAuth2+JWT,接下来咱们逐个了解下。

 

认证方式

 

2)OAuth2

 

 

大部分场景中,咱们仍是须要有知道谁在调用,调用者是否有对应的角色权限等。OAuth2能够帮助咱们来完成这个工做。在OAuth2的世界中,分为如下几种角色:Resource Owner,Client,Authorization Server,Resource Sever。上图是一个简单的OAuh2流程来讲明各个角色以前的关系。最终,App得到了Rory的我的信息。

 

 

 

 

关于做者:高士皓,普元SOA&云计算部门高级软件工程师,现主要从事普元API Gateway开发设计工做。曾在Tibco、海航科技技术研究院担任高级软件工程师。在海航任职期间,参与海航数字化转型建设,带领团队设计开发海航API Gateway,海航统一登陆平台等项目。

 

关于EAWorld:微服务,DevOps,数据治理,移动架构原创技术分享,长按二维码关注

转载于:https://www.cnblogs.com/insideout/p/9155116.html