一文拆解Faas的真实案例

68次阅读

共计 6162 个字符,预计需要花费 16 分钟才能阅读完成。

欢迎大家前往腾讯云 + 社区,获取更多腾讯海量技术实践干货哦~
本文来自腾讯云技术沙龙,本次沙龙主题为 Serverless 架构开发与 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 附件请点击原文下载。

问答 Serverless:如何删除一个函数?相关阅读多个场景中的 AI 落地实践低于 0.01% 的极致 Crash 率是怎么做到的?【每日课程推荐】机器学习实战!快速入门在线广告业务及 CTR 相应知识

正文完
 0