刘敏洁:API网关和SCF深度结合应用

刘敏洁:具有多年云计算行业经验,曾任职于华为、UCloud等企业担任产品开发、产品经理。目前负责腾讯云API生态的推广,帮助开发者进行API网关与无服务器函数、容器、微服务等产品的结合使用,提供完整解决方案。

这次我们主要介绍面向于API网关和SCF深度结合应用,API网关与SCF结合可以形成比较完整的Serverless方案。

今天的内容分为四部分:第一,API网关这个产品本身的简单介绍和一些能力。第二,API网关和SCF也就是是我们无服务器函数结合使用的时候提供了哪些能力跟它结合方便大家使用。第三,在比较常用的场景中我们整体的使用架构以及现在客户真正使用的案例。最后是大家关心的费用问题。

我们做API网关这个产品的初衷不单单是一定说跟SCF强绑定的,是在用户使用中,遇到了很多问题。那么最开始我们为什么会做这个产品?在场大家多数都是做开发的应该很清楚了,比如前端的调用方式越来越多了,后端的部署方式越来越多了,可以用自己的物理机,可以买一个云主机,可以搞一个容器,可以像使用现在更新的微服务,无服务器计算。那么在这种复杂的情况下前端和后端的耦合就会造成业务上在扩容,在做一些新的业务增加的时候变得麻烦。那么此时,解耦就变得异常重要。

市面上也有一些API网关这样的开源产品,但是运维的成本,费用问题也会分摊到每个开发同学身上,既然如此我们就在想何不做一个以服务的形式提供API网关能力的产品给客户呢。所以有了今天给大家介绍的API网关这样一款产品。

API网关在一般场景下怎么使用的?有一个很简单的电商例子,多数情况下客户后端有很多的业务模块,有商品、用户这些常用的业务模块。如果在以前,可能是前端的APP,小程序,直接调用这些模块,后端也是以API形式提供给前端调用的。但是前端需要理解每个模块的API。现在我们提供API网关服务,客户在使用API网关后,我们建议客户把他们的每个业务模块跟我们API网关进行对接。由API网关统一输出一个API提供给前端调用。包括前面说的小程序,外部API,都是这样的一种可以在前端调用的方式。

其实用一句话来总结一下,我们API网关这个服务是什么呢?就是API的一个托管服务,可以对多种后端能力进行统一的管理,输出无状态服务的API给到前端调用。用户可以在API网关上创建API,发布API,上线、下线等。包括建成限流,监控这样的一些能力,这些能力在解耦过程中都是非常需要的。

这里总结了几个比较大的能力点:首先,统一鉴权认证,这是非常重要安全防护的能力。API转化和隐藏,像参数,位置,名称都可以做转化和映射,经过映射后真正的调用者不一定拿到这些后端的真实数据。

流控和配额也是常见的能力,通常后端业务资源其实是有限的,所以前端需要将API的QPS和配额做限制。另外还有输出API能力,现在腾讯云提供了API市场,如果用户后台有一些业务,有一些能力,有一些数据,想通过API提供出去给第三方伙伴直接进行售卖,都可以通过这个网关输出到API网关进行直接售卖。

自动化文档和SDK这个能力呢,其实是针对方便调用者进行调用的,如果我们有了业务后再手写文档,这个工作量也很大,所以API网关可以自动帮助客户生成文档,还有SDK供客户调用。

强负载能力,腾讯云API网关依赖于腾讯大的负载平台,可以应对大的突发请求不惧怕大的负载,性能方面是很有保证的。最后,API网关可以对API进行安全防护,对调用API原IP做白名单。

这里其实是比较完整的流转方式。API网关分两种角色:一个是发布API的人,一个是调用API的人,他们可能是同一些人,也可能是分别两拨人。发布者先把API发布到API网关中,参数,认证,鉴权,映射等等都需要进行配置,发布者配置后可以直接在API网关控制台上进行调试,在控制台上看看这个通不通,后台响应正不正常,Ok不Ok。如果调试都成功了进行API的发布。发布后就可以把API提供给调用者了。

那么API网关怎么提供API给调用者呢?我们的服务其实是以域名的形式提供给调用者的。我们会提供默认的二级域名。当然客户有自己的域名,也可以把这个域名绑到我们二级域名上。另外API网关可以生成文档SDK,提供给调用者。调用者直接使用文档、SDK可以方便的调用。调用后,前端请求到API网关后,API网关会根据之前发布的配置做一些认证,鉴权这样一些基础的校验。到后端我们会做参数的映射,最终把这个请求发到后端业务。其实后端可以对接很多云服务,像SCF,像其他云服务统统都是可以对接的。当然今天主角是无服务器函数,所以我们主要讲一下对接到SCF。对接后它会拉起它的服务响应,根据响应看是不是做一些映射,最后把结果丢会调用者。在这个过程中发布者可以看到监控的信息是怎样,也可以查询到调用。如果调用失败,或者有什么错误,是前端的还是后端的,整个日志都是可以查询到的。这是一个比较完整的流程。

我们现在可以看一下API怎么跟SCF结合使用。其实很简单,前面是API网关做一个触发器。用触发器的形式来触发SCF后端的函数。然后SCF做一些计算处理,结束后它可能落到后边的像数据库这些服务,在图中的没有画出来。这种方式现在APP,小程序都是很常用的,包括给第三方合作伙伴,就是它们直接提供API给第三方合作伙伴,不走任何的平台,这种都是非常常用的一种方式。

安全与限流,刚刚在我们整个功能里其实有做了一个简单的说明。这里分几块说:第一,我们提供认证能力。认证的能力像密钥对是现在常用的认证方式,我们在网关上生成密钥对,把这个提供给调用者。这个密钥对常用是服务器端对服务器端。也有像用OAuth这种单点登录,客户有自己认证服务器的,我们也是支持的,可以去用API网关对接认证服务器。认证服务器去对调用做认证鉴权,然后我们在做一些校验。这是对整个认证管理做一个安全性的保障。

其实还有刚才说的源IP黑白名单。这个常见于大家内部用的,比如我是一个大的公司,内部几个部门之间用。另外限流的部分,当后端业务能承载的QPS有限的时候,在API这边做一个限流控制,如果超过这个QPS,就把这个调用丢掉,后端不会过载。

CORS,现在跨域的调用非常多的,比如电商,还有一些WEB页,像CSS、JS静态调用,访问时需要浏览器跨域调用。当请求是跨域请求时,API网关会根据发布者的配置做一些处理,比如配置支持跨域,API网关会把这个CORS头去。直接响应回来后我们再把CORS头放回响应中。这完成的是跨域调用。这样的话其实对SCF开发者会比较方便使用,就不用再操心跨域的问题。

响应集成这种也是常见的使用,用户开发小程序时的场景也是响应集成可能比较常用到。比如在对接前面的接口时,需要把SCF抽取成真正的HTTP格式请求返回给前端。API网关与SCF之间同样为HTTP请求,SCF函数返回的响应在响应透传模式时,会被全部放进API网关的响应body中,返回给调用者。这样的话可以直接对接很多已经有一些规范,已经有一些接口的,像小程序这种,会不适用这种方式。那么就需要API网关把SCF的响应抽取为一个标准HTTP的respond返回个标准接口。

Websocket能力算是在函数计算里的一个难点,因为本身函数不是常驻的,比如说这个函数跑一跑,在没有触发的时候,可能有一个时间段过去后,目前的资源就释放掉了,下次再触发的时候再拉起来,这很难跟前端保持长连接。那我们怎么帮SCF处理长连接问题的呢?API网关会帮每一个前端的调用者生成一个唯一的ID,这个ID就注册到后面客户的业务函数里。当客户业务函数需要推送的时候,他只要带到这个唯一ID给API网关,API网关就会将这个唯一ID的消息丢给前端,这样我们唯一ID和前面的连接保持了长连接,也保证了后端推送的正确性。举个例子,一个聊天室,有三个人聊天,范冰冰,李晨和黄晓明。他们三个都有唯一ID。黄晓明发出来一句话,后面的函数收到这句话,并且要把他说的话推送给范冰冰和李晨,那么通过唯一ID,可以识别到三个人,后端业务将黄晓明ID的聊天语句推送到API网关,告诉API网关要将此信息推送给范冰冰和李晨ID的前端,API网关收到信息后,则将此信息推送到与范冰冰李晨的客户端保持的长连接中,他们就看到了这条信息。这就是处理Websocket长连接的方式。

开放到API市场上,刚才我们也简单说了一下,其实很多能力,我们自己一些能力和数据想直接开放出去给别人,但是并不想做一个页面,计费流程,那么可以放到API市场来进行售卖。其实后端业务放到SCF上是提供服务的一种方式,这样有些用户业务是放在API市场上来进行售卖的。这是把我们技术能力变现的一种方式。

文档与SDK刚才也说了很多,这里再来介绍一下。如果用户配了10个API,API网关会帮用户生成这10个API的文档和SDK。swagger文档有点像代码式的文档另外还有普通文字描述的API文档,这两种我们都能生成。生成后可以直接下载下来提供给别人。SDK中有鉴权相关的代码,调用者使用时把自己的参数填进去,对调用者来说更方便。

高并发,这里我们还是想强调一下,API网关可以扛住非常非常大的并发请求。当用户请求的并发量极大时,并且有大量HTTPS时,大量请求十分消耗CPU。ABI网关的高性能,及时HTTPS请求的异步处理,可以应对高并发场景,保证服务可用。

场景方面,刚才说的是一些具体功能,我们能帮SCF做哪些具体的能力。在整体结构的使用场景这里做一些介绍,这里是小程序公众号,电商这种业务场景现在使用的一些客户的架构,客户的很多业务模块放到SCF上面,然后用API网关作为API服务提供出去。前端无论是小程序还是APP只要有鉴权,有密钥对都可以来进行调用。后端根据自己的业务去跟MySQL等能力来进行对接。

刚刚这种方式,像乐凯撒是一个很典型的例子。他们把他们的菜单系统,还有微信支付都放在SCF上面。前端会对接一些固有的HTTP接口,所以用了我们的响应集成的能力,就是API网关帮他抽取成一个标准的HTTP响应返回给前面的调用者。另外因为有很多图片静态资源,他们也使用了跨域能力,这样后端上线的时候非常快。乐凯撒现在有一个小程序用户可以直接在上面下单买披萨,这个小程序中的很多能力是使用上述架构完成的。他们的ERP也有一些后台的系统,也是直接在SCF上进行后台计算,用API网关直接出接口。其实很多能力可以复用,那么API本身就可以进行复用。这样的开发流程,会让整个上线过程非常的迅速。

现在用的多的还有AI推理和翻译。用户将自身的计算模型,翻译模型等放在SCF上,每次通过API网关触发来触发计算。API网关将请求带来的数据给到后端,并对每个请求做鉴权认证或ACL管理保障使用的安全性。

比较典型的就是搜狗,搜狗在这里其实有一个翻译推理的模型,放在SCF上, SCF跑在GPU上,然后通过API网关做触发。这里用API网关主要是想做前后的解耦。因为搜狗的业务本身解耦是C++写的,所有的请求都是用http的方式传递,请求端和后台解耦合后,很多后端业务不再需要用python重写。

荔枝微课是一个在线教育课程。它的情况是,后端SCF跑了一个模型计算。每次当客户在他的页面上搜某个课程。它的前端会把这个课程,用户感兴趣的课程信息,包括客户的ID,之前的一些信息带到后端带给SCF。SCF模型拿到了客户信息,它本身也会有一些自己的原有的信息,这些信息结合起来,再根据其算法进行计算。最后得出的结论,这个客户喜欢某些课程,再把这个课程推送到前端来,最终展示在WEB页上。在这个中间,其实API网关和SCF解耦的时候,对API网关的模型调用,需要有安全保证的,就是有不同IP的时候有源IP调用,还有密钥对的鉴权对后端进行安全保障。另外如果说这个SCF或者调用有任何问题的话,监控报警也是可以快速让我感知到这个模型的状态。

最后看一下费用,我们费用也是有很大力度减免的,每月有一百万次的免费调用。网络费用跟公网的的价格是一样的,调用次数0.04元/万次。目前没有收费,预计到年底收费。但是整个资源费用是非常便宜的,所以如果有想试用的同学不用很犹豫。

Q:主要想请问涉及到有时候有自己的线上环境和我们的测试环境,我想知道我们现在如果使用你们的API网关还有SCF,我们怎么去部署这样两套环境?怎么样去完成像我们现在使用的这些持续集成,怎么结合到我现有的产品?因为我目前看到的展示都是基于控制台,没有看到说基于CLI的操作,所以想了解一下。

A:其实我们API网关有环境管理和版本管理。版本管理也分了环境,测试环境这些标准环境。后续还会开放这些环境让用户自定义这些环境。CLI部分我理解需要在公台操作,还是命令行操作,本身跟我提不提供环境管理,版本能力应该是两个事情。所以CLI后续会提供。但是本身需要的开发和测试环境我们已经分环境提供。

Q:新的代码更新后要上线到SCF上怎么部署?

A:后面我们会做一个工具,在这个工具上,比如CLI,可以一键上传,并且配一些API网关。目前这个都在开发中。

Q:怎么样买服务器便宜,怎么样买按调用次数的偏移?

A:这个还是需要你本身业务来计算一下。比如说我这个业务就是一个触发型的业务,我如果用一个CPM或者物理机部署的话,如果常驻型的话需要占到多少钱,这个钱其实是固定的,每个月需要多少钱。但是如果我知道这个业务是触发型,假如每天就调用一万次,这个也是能算出来的钱。这个钱一比较就很简单就出来了。但是这个都得基于你本身业务的调用量和你本身业务后端消耗资源的情况来进行计算的。所以我没法儿给你一个直接的值。

如果真的需要一个常驻的业务,一天二十四小时一直在跑的话,其实这个也是要看,这二十四小时在跑的,我对我本身的服务器我的消耗情况,比如说我买完了一台服务器,市面上的服务器可能就那么多,或者说CPM就那么多,即便买了最小的4核服务器都没跑满,如果计算很轻量没法儿跑满的话,用SCF也会很划算。但是需要大量的,可能用本身的传统的方式会比较简单。

Q:在调用的稳定性,延时方面Serverless会有优势吗?

A:其实调用的稳定性是我们服务稳定性的保障,这个不用担心,因为我们有承诺。至于延时,是有很多因素影响的,如果你是公网调用,这基于网络的一些情况。如果说API网关到SCF结合的话,本身API网关和SCF可以走内网和公网。API网关本身的延时是在毫秒级别,这个我们测试过的,还是很小的。如果部署一个服务器或者资源,你到那个网络之间的延时,你自己本身原来延时是多少还是要算一下。我可以告诉你我们的延时本身是多少,在可测的环境下我们的延时是多少。但是到你们具体的网络环境下还是要具体测量的。

本文演讲PPT附件如下。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏非著名程序员

强烈推荐:绝对是最好的一个小程序开源框架

小程序到底有多火,看看目前推出的开源框架以及组件库就知道了。由于小程序开发的火爆,大家都在致力于探索如何更好的,更加高效的开发小程序,以至于很多公司都贡献了小程...

22440
来自专栏知晓程序

微信小程序快速开发,两周内从创意到上线

30230
来自专栏用户2442861的专栏

数据库Sharding的基本思想和切分策略

http://blog.csdn.net/bluishglc/article/details/6161475

10920
来自专栏杨建荣的学习笔记

脚本改进的一点体会(r12笔记第60天)

一直以来我们想要推进内部的自动化系统,但是总是会遇到各种各样具体的问题,有时候我们准备好了,但是总是会有一些因素的干扰,再加上工作时间的安排,有些事情就一...

35690
来自专栏韩伟的专栏

经典软件架构模式(二)

今天继续推送“经典软件架构模式(二)之管道和过滤器模式、MVC模式。 管道和过滤器模式 第三个案例是一个WEB的例子,但并不是简单的CGI加数据库,而是一个在...

33460
来自专栏运维咖啡吧

中小团队快速构建SQL自动审核系统

Inception是一个开源的Mysql自动化工具,具有SQL审核、执行、回滚等实用的功能,由国内大神基于mysql源码开发,可以很明确的,详细的,准确的审核M...

20730
来自专栏kalifaの日々

scitools Understand安装及入门

Understand是一个用来进行静态的软件分析、软件度量、软件可视化的工具。他类似于编译器。编译器的输入是代码,输出是可执行文件,而Understand工具的...

21510
来自专栏腾讯移动品质中心TMQ的专栏

腾讯TMQ在线沙龙|老司机教你玩转Appium自动化测试

Appium自动化测试 活动时间:2016年10月13日 QQ群视频交流 活动介绍:TMQ在线沙龙第十期分享 本次分享的主题是老司机教你玩转Appium自动化测...

36270
来自专栏沈唁志

GitHub代码托管平台提交代码时emoji表情的使用

22540
来自专栏Netkiller

监控的艺术

监控的艺术 目录 1. 背景 2. 概述 3. 怎样监控 3.1. 卫星监测 3.2. 逐级诊断 3.3. 模拟人工 3.4. 数据分析 3.5. 监控与开发 ...

36250

扫码关注云+社区

领取腾讯云代金券