一文拆解Faas的真实案例

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~

本文来自腾讯云技术沙龙,本次沙龙主题为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相应知识

此文已由作者授权腾讯云+社区发布,更多原文请点击

搜索关注公众号「云加社区」,第一时间获取技术干货,关注后回复1024 送你一份技术课程大礼包!

海量技术实践经验,尽在云加社区

原文地址:http://blog.51cto.com/13957478/2171545

时间: 2024-11-05 17:33:32

一文拆解Faas的真实案例的相关文章

设计模式--组合模式真实案例

所有的例子均来源与实际开发项目 本节介绍组合模式的使用–商品结果排序评分系统 首先还是重复一下:设计模式是思路,而不是一味套用,如果业务场景和功能需求恰好吻合,那最好不过:如果有偏差,一定要具体情况具体分析,更具实际场景选择合适的模式类型(注意,是类型,并不特定指某种模式,有的时候一个场景多种模式都可以做) 本节所举得例子为商品结果排序评分系统,也就是很多项目中,在比较重要任何事物查询完毕后,会有一个排序过程,比如在淘宝上搜索完商品后那个商品列表的排序过程.而且其复杂度当然远远超过数据中SQL语

ENode 2.0 第一个真实案例剖析-一个简易论坛(Forum)

前言 经过不断的坚持和努力,ENode 2.0的第一个真实案例终于出来了.这个案例是一个简易的论坛,开发这个论坛的初衷是为了验证用ENode框架来开发一个真实项目的可行性.关于ENode是什么,本文就不多介绍了,可以参考这篇文章的介绍.本文重点介绍一下ENode是如何帮助我们开发一个基于DDD+CQRS+Event Sourcing架构的应用程序的.这个论坛使用到了ENode, EQueue两个框架,EQueue是一个分布式的消息队列组件,该组件的主体思想是参考阿里的RocketMQ.当我们使用

工厂方法和观察者模式的一个真实案例

1 import java.util.ArrayList; 2 3 class Manager 4 { 5 private String name; //经理的名字 6 public Manager(String string) { 7 name=string; 8 } 9 public void update(String id) 10 { 11 System.out.println("哈哈"+id+"房子已经被买了,好开心"); 12 } 13 14 15 }

一文教会你数据库性能调优(附某大型医院真实案例)

原文:一文教会你数据库性能调优(附某大型医院真实案例) 前言 微软工程师的一个工程师曾经对性能调优有一个非常形象的比喻:剥洋葱 .我也非常认可,让我们来一层一层拨开外面它神秘的面纱. 六大因素 下面祭出的是我们在给客户分析数据库性能问题最常用的图. 看完这个图,你是不是对性能调优有了个基本的概念了.通常来讲我们会依照下面的顺序来进行分析: 硬件能力 系统规模 数据库内部因素 软件环境 这4个的顺序可以有所调整或者交换,但是对于系统的性能优化一定要从全局出发.切勿一来就深入到某一个SQL语句的优化

【转】真实案例引起的对系统健壮性的思考(张逸,2012-02-07)

大年初四(2012年1月26日)上午,我在重庆移动某营业厅的自助客户端使用招商银行信用卡为我妻子充话费(我妻子的手机已经停机).在插入信用卡并输入密码后,系统提示正在交易.大约几秒后,我的手机收到招行的短信,提示消费100元,但自助客户端仍然显示正在交易.此时的我已经有了不详的预感.果然,在等待大约一分钟,系统提示操作失败,之后系统崩溃,弹出了一个Windows命令窗口.因为我妻子的手机停机了,所以立刻可以确认上一次充值确实是失败的.而我的手机能收到信用卡的消费信息,则可以确认银行确实已经支付了

RestTemplate真实案例

1. 场景描述 现在越来越的系统之间的交互采用http+json的交互方式,以前用的比较多的HttpClient,后来用的RestTemplate,感觉RestTemplate要比httpClent简洁的多,简单介绍下,项目中正在使用的get和post调用方式. 2. 解决方案 2.1 简要说明 RestTemplate是集成在spring-web中的,因为springboot的starter已经默认加载进来,所以可以直接使用不用再配置maven的gav了. 2.2 post调用方式 2.2.1

真实案例:网站遭遇DOS攻击

网站遭遇DOS攻击 一.事件背景 长假对于IT人员来说是个短暂的休整时期,可IT系统却一时也不能停,越是节假日,越可能出大问题,下面要讲述的就是一起遭受DOS攻击的案例. 春节长假刚过完,小李公司的Web服务器就出了故障.下午1点,吃完饭回来,小李习惯性的检查了Web服务器.Web服务器的流量监控系统显示下行的红色曲线,与此同时收到了邮件报警,可以判断服务器出现了状况. 根据上述问题,小李马上开始核查Web服务器的日志,尝试发现一些关于引起中断的线索.正当查询线索过程中,部门经理告诉小李,他已经

真实案例——EMOS邮件集成系统

---恢复内容开始--- 磁盘镜像技术:浪费磁盘空间 校验码机制:比如说有4块盘,留下一块盘作为校验盘,既提升了速度,又提升了冗余. 重新计算的过程是修复的过程. raid0条带 raid1镜像 校验码是系统的瓶颈那怎么办 轮换把盘作为校验码 以防止某个盘老是被读写 这一举措是Raid5与Raid4的区别 RAID简介 是一个控制器上有五个接口,对于计算机来说就相当于一个整体 廉价冗余磁盘阵列(Redunt Arrays of Inexpensive Disks) 通过硬件/软件技术,将较小/低

【数据泵】EXPDP导出表结构(真实案例)

BLOG文档结构图 因工作需要现需要把一个生产库下的元数据(表定义,索引定义,函数定义,包定义,存储过程)导出到测试库上,本来以为很简单的,可是做的过程发现很多的问题,现记录如下,希望有同样需要的朋友不要再走弯路了. 1.1 导读 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① EXPDP和IMPDP如何导出导入元数据,包括表定义,索引定义,函数定义,包定义,存储过程(重点) ② 表的初始化定义参数initial,及如何批量修改该参