微服务架构下的API Gateway

工作中写了很多RESTful API,也用了Axway作为API Gateway,这篇文章希望总结一下API Gateway的知识点。

API gateway

什么是API gateway?API gateway解决哪些问题?

在微服务架构中,每个客户端需要调用一个或者多个API,那么客户端如何知道要调用的后端接口是什么?当引入新的API接口或者现有API接口被更新时,如何把信息同步给客户端?以及API如何处理安全,日志,限速等所有API都需要考虑的问题?

API gateway是位于客户端和API之间的一个单点入口,它作为反向代理将客户端请求路由到后面的一组API。同时,API gateway可以承担cross-cutting交叉功能,如安全与认证,请求速率管理,日志,缓存等。如果没有API gateway,客户端就会直接把请求发给API,此时可能会有下列问题:

1)客户端调用代码复杂,客户端需要和多个API交互,并且处理来自不同API的不同错误。

2)客户端与API之间的耦合度高,客户端需要知道各个API的调用细节,当API的接口发生变化,客户端也需要进行更改。

3)客户端的一次操作可能需要调用多个API接口,此时会产生多次网络调用并增加延迟。

4)每个面向公共网络调用的API都需要实现安全,请求速率管理等功能,都需要经过安全测试。

5)API必须使用对调用端友好对通信协议,如http或者websocket。

API gateway归纳为三种模式

1)路由:API gateway作为反向代理将客户端的请求路由到API,API gateway作为单点入口对客户端和API进行解耦。

2)聚合:当客户端的某个操作需要调用多个API时,API gateway可以把多个API请求聚合为一个请求,即客户端发送一个请求至API gateway,API gateway分发多个请求到各个API,并且将各个API返回到应答聚合成一个应答返回给客户端,从而达到降低请求交互次数的作用。

3)卸载:API gateway可以卸载 API的功能,尤其是一些crossing cutting交叉功能。因此我们可以在API gateway单点实现功能,而不是在各个API上重复实现,尤其是一些专业性要求高的,如安全的实现,而API则可以专注于业务逻辑。

综上,我们对API gateway有了基本对认识,接下来介绍两种API gateway产品:AWS API gateway,Kong API gateway

AWS API gateway

AWS API gateway Overview

AWS API gateway overview

如图所示,AWS API gateway支持客户端包括:移动端应用,网页应用和web服务,支持的后端调用包括:部署在amazon EC2上的服务,使用AWS lambda实现的serverless服务,以及其他部署可以通过公共网络访问的接口。AWS API gateway依托于AWS平台及其丰富的组件,比如基于amazon CloudWatch提供监控相关功能,基于AWS Lambda提供Serverless功能,基于AWS CloudTrail提供审计功能等等。

另外,AWS API gateway还可以提供MOCK集成,即配置静态应答。这样,只需要确定后端服务的接口定义,即使后端服务没有开发完成,也可以通过配置API gateway的Mock应答,使得客户端的开发和测试可以顺利进行,从而解耦了客户端和API的开发测试过程。

AWS API gateway提供的主要功能

1. Security and Authorization

1)AWS API gateway可以保护后端API免受DDoS攻击。

2)通过AWS Cloudtrail记录审计日志并持续监控服务调用情况。

3)通过AWS IAM,AWS COGNITO,AWS SIGNATURE V4等组件提供安全支持,此外也支持通过AWS Lambda实现可定制的授权访问。

4)通过配置trusted relationship,以白名单方式进行访问控制。

5)支持客户端调用代码的自动生成,包括认证授权的相关代码。

2. Monitoring, Metrics and Logging

AWS API gateway通过AWS cloudwatch对API的调用情况,性能指标和错误率进行监控,并提供控制面板如下图所示。我们可以通过AWS控制面板监测API的调用,API调用延迟,API集成延迟,调用时出现的客户端错误及服务端错误。

AWS控制面板

针对AWS cloudwatch提供的日志功能,AWS API gateway支持基于部署阶段和API方法的配置。

基于stage的logging配置


基于method的logging配置

3. Throttling and Caching

AWS API gateway提供缓存及流量管理功能。如下图所示,当请求到达AWS API gateway,API gateway首先检查请求资源是否存在于缓存中,如果存在,则直接返回缓存中的内容。如果不存在,则检查当前的请求速率(RPS:Request Per Second),如果超过了允许的最大速率则返回HTTP status 429(Too Many Request),只有速率检查通过,才真正执行后端调用。


AWS API gateway通过缓存后端返回的应答,可以有效减少后端调用。通过流量管理,可以保护后端API经受峰值流量的考验。

AWS API gateway支持部署阶段级别的缓存和流量管理配置,支持API方法级别的流量管理配置。

stage级别的缓存与流量管理配置
method级别的流量管理配置

4. Payload Modeling and Transformation

在API Gateway 中,客户端发送的请求负载格式可能与后端API接受的请求负载格式不同。同样,API返回的响应负载可能不同于客户端接收的响应负载。AWS API Gateway 提供映射模板将负载从客户端请求映射到API接收的请求,以及从API响应映射到相应的客户端响应。

映射模版是一个用Velocity模版语言表示的脚本。

AWS API gateway的映射模版配置如下图所示:

请求负载映射模版配置


应答负载映射模版配置

5. Native Code Generation

AWS API gateway提供自动代码生成功能来生成客户端调用代码,支持的语言平台如下图所示:

作为总结,AWS API gateway尤其适用于较多使用AWS平台组件的组织。如果团队中使用Amazon ALM,包括CodeCommit, CodeDeploy and CodePipeline,那么和AWS API gateway的集成是非常非常方便的。最后,如果你希望基于AWS Lambda开发微服务,那么AWS API gateway也是首选。

AWS API gateway的其他优势包括:依托于AWS CloudFront的全球边缘网络作为基础设施,为API调用提供尽可能低的网络延迟;基于请求和应答数目计费,没有请求则无费用产生。

Kong API gateway

首先kong API gateway分为社区版和企业版,其中社区版是开源的。之所以选择Kong作为开源API gateway来了解,是因为从Kong社区版的官网上,我们可以看到:

“The World’s Most Popular Open Source Microservice API Gateway.”

下图列举了Kong API gateway提供的主要功能,可以看到和AWS API gateway的区别并不大,就不重复说明了。

Kong API gateway核心功能

Kong的特点在于,通过插件实现API gateway的可扩展性,我们可以通过配置插件来实现上述的功能,另外除了Kong本身提供的插件,我们也可以自定义插件。

负载均衡功能

除了上述功能,Kong还通过Ring-balancer的方式提供负载均衡功能。如下图所示,配置一个可工作的ring-balancer,我们需要配置route,service,upstream和targets。按照自顶而下的顺序:

1)配置route,路由规则为:当请求头部中的host设定为‘address.mydomain.com’时,就路由到‘address service’;

2)配置‘address service’,将请求转发给名为‘address.v1.service’的upstream,且路径为/address;

3)配置名为‘address.v1.service’的upstream;

4)为上述upstream配置两个target,配置属性包括IP地址和权重。比如下图中target1具有权重100,target2具有权重50,则请求来临时,2/3会被分配到target1,1/3会被分配到target2。

Health Check & Circuit Breaker

基于ring-balancer,Kong API gateway还提供了health check和circuit breaker的功能。上面已经说过,一个upstream包括多个target,Kong提供两种方式检查target是否处于运行状态,如果不是,则负载均衡器不会向其发送请求。

Kong API gateway提供两种方式进行health check:主动检查和被动检查。主动检查即周期性地发送请求至各个target,基于target的应答进行判断。被动检查即circuit breaker,Kong通过监测发送给各个target的请求及应答情况进行判断。

一般情况下,circuit breaker是指:当A服务实时调用B服务时,B有可能发生不可用或者高延迟的情况,此时A的线程资源可能会在等待中被占用,最糟糕的情况会造成资源耗尽导致A也服务不可用,从而引发传递性失败。为了解决这个问题,A服务可以通过代理访问B服务,当连续出现的失败次数超过配置的门限时,即触发断路,接下来timeout时间内对B服务的调用都会不经尝试,直接失败。timeout时间过后,cirtuit breaker会允许通过一部分到B服务的请求,如果成功则继续正常调用,如果失败那么又开始新一轮的timeout处理。

BFF模式与API gateway的结合

BFF模式即Backend For Frontend。如何理解呢?假设我们要构造一个宠物商店在线管理系统,且该系统基于微服务架构,而此时我们需要构造一个宠物详情页面,包括web端和mobile端。首先,宠物详情页面的信息需要通过多个API来获取,比如宠物基本信息API,订单API,库存API,定价API等等。其次,网页端和移动端需要的信息不尽相同。

那么这种情况下API的应答需要通过组合,裁剪,转化以适应客户端的需求。因此Backend For Frontend就是通过介绍中间层,来完成上述的组合,裁剪与转化。而这一部分也是可以通过API gateway这一中间层来实现的,相当于前文中提到的API gateway aggregation模式。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,482评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,377评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,762评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,273评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,289评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,046评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,351评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,988评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,476评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,948评论 2 324
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,064评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,712评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,261评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,264评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,486评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,511评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,802评论 2 345

推荐阅读更多精彩内容