时间:2021-07-15 | 标签: | 作者:Q8 | 来源:臧琳网络
小提示:您能找到这篇{支持多语言:腾讯云Serverless云函数如何解锁语言}绝对不是偶然,我们能帮您找到潜在客户,解决您的困扰。如果您对本页介绍的支持多语言:腾讯云Serverless云函数如何解锁语言内容感兴趣,有相关需求意向欢迎拨打我们的服务热线,或留言咨询,我们将第一时间联系您! |
< ">< color: rgb(79, 129, 189);">导语 | < color: rgb(127, 127, 127);">云函数SCF是腾讯云为企业和开发者们提供的无服务器执行环境,帮助大家在无需购买和管理服务器的情况下运行代码。但是SCF在使用过程中经常会受到开发语言方面的限制,造成拓展性和成本上的问题。本文就将为大家介绍使用Custom Runtime来解锁SCF语言限制,希望与大家一同交流。文章作者:臧琳,腾讯云Serverless 研发工程师。 一、背景 < ">SCF作为腾讯云FaaS核心产品,支持javascript、python、php、java、go等多语言函数。但是,在用户实际使用过程中,我们发现了一些问题: < ">< color: rgb(79, 129, 189);">1.寻求更多语言支持 < ">我们时常会收到来自内外的各种关于编程语言的咨询,比如SCF是否支持dotnet、rust、deno甚至C等多种语言环境。 2.关于现有语言的功能拓展 < ">比如php想要安装更多的插件,就需要在执行环境中使用phpize来安装(因为部分插件可能和os library等底层库相关),但是云函数因为安全等原因,限制了相关权限。 3.关于Runtime的拓展性 < ">举个例子,现有SCF java的语言环境是java8,如果用户想要在SCF中使用JDK11或者更新的JDK15,有没有办法解决呢? 4.使用成本 < ">目前,用户如果想要在自己的业务代码中嵌入SCF,需要了解SCF各个语言提供公共关系团队的入口函数及编程方法。虽然我们已经尽量将使用方法和接口设计得简单,但对于一些用户来说,仍然要处理编程语言上的接口依赖,以及学习如何正确使用这些接口API。 5.维护成本 < ">简单来说,如果复用现有方案,给SCF提供多语言支持其实是可行的,但是需要给每一种语言编写一套使用SCF的API。这不仅仅需要SCF研发同学懂得各种语言,还需要他们了解各个语言的安全特性,使用特性等,维护成本很高。 < ">那么,有没有一种方法能够让我们只需要维护一套统一的API,就能让用户从各种编程语言中解耦,还能解决上述列举的各项问题呢?答案就在于使用——Custom Runtime。 二、Custom Runtime简介 < ">Custom Runtime(以下简称CR)使用方法较为简单:CR会暴露一套HTTP API提供给用户环境,而用户只需要到特定端口上发送/接收HTTP请求,即可以获得SCF下发的各种event,并返回处理结果。< color: rgb(127, 127, 127);">具体的文档可以参考:Custom Runtime说明[1]。 < ">总体来说,要使用Custom Runtime,用户需要做好以下准备: < ">< color: rgb(79, 129, 189);">1.bootstrap可执行程序 < ">此执行程序可以是任何形式的Linux可执行文件,比如C语言编译出的二进制文件,或者是一个简单的shell脚本。 2.用户的事件处理函数 < ">也就是通过CR约定的HTTP API实现event的获得和处理,以及结果返回。 3.用户语言Runtime(可选) < ">针对解释型语言,或者是需要Runtime来运行的语言,比如js、python、dotnet等,需要用户提供自己的Runtime,并在bootstrap中提供相应的启动Runtime的命令。 < ">腾讯云官网上也提供了利用CR实现shell云函数的示例[2],有兴趣的小伙伴可以看看。 三、Custom Runtime具体模型及用法示例 < ">Custom Runtime函数的内部处理流程如下所示: < ">目前Custom Runtime的实现在SCF侧是一个HTTP Server。用户侧代码作为HTTP Client通过约定的API给SCF发请求来获得事件及相关信息,并发送HTTP请求返回处理结果给SCF服务。 < ">HTTP Server端口号和URL,通过两个环境变量传递到云函数环境中: < ">SCF_RUNTIME_API:SCF_RUNTIME_API_PORT < ">HTTP API定义如下图所示: 1.冷启动阶段(函数部署阶段) < ">冷启动阶段主要是部署用户代码,完成用户初始化,这个阶段SCF会在用户提供的程序包(zip包)中寻找bootstrap可执行程序,然后拉起该程序。bootstrap由用户实现,内部启动用户代码等工作。 < ">用户函数在冷启动阶段需要完成代码初始化工作,并通知SCF,初始化工作完成。即发POST到SCF_RUNTIME_API:SCF_RUNTIME_API_PORT/runtime/init/ready. < ">SCF服务侧接收用户ready的请求,初始化工作结束,通知上层服务。函数进入调用流程(即event此时可以下发到函数侧)。 < ">< color: rgb(79, 129, 189);">2.热启动阶段(调用阶段) < ">函数通过GET SCF_RUNTIME_API:SCF_RUNTIME_API_PORT/runtime/invocation/next获得event及相关ctx信息。 < ">SCF在函数拉取event之后,等待用户函数返回。 < ">函数处理event之后,如正常返回,通过POST SCF_RUNTIME_API:SCF_RUNTIME_API_PORT/runtime/invocation/response传递返回信息给SCF服务。 < ">如函数调用出现异常(此处指业务代码需要返回错误信息),则通过POST SCF_RUNTIME_API:SCF_RUNTIME_API_PORT/runtime/invocation/error返回错误信息。 < ">SCF服务传递返回给上层服务,函数一次调用结束,进入下一次event调用周期。 < ">这里我们用SCF中CustomRuntime的Deno模板示例做说明,如下图所示,程序包里有: < ">bootstrap:入口文件,这里是shell,可以看到红线标注这一行就是启动deno程序; < ">deno二进制:Deno Runtime,启动deno程序必须的launcher; < ">demo.ts:用户函数,里面就实现了上面提到的和SCF服务端交互的逻辑,也是用户业务逻辑的主要处理函数。 < ">bootstrap主要是启动demo.ts,下面我们看看demo.ts里的代码实现: < ">可以看到,主要是完成初始化阶段。下面再来看看调用是怎么完成的: < ">可以看到,是通过GET(fetch)循环拉取event,然后调用processEvent()来进行处理。processEvent()逻辑如下所示: < ">分别处理正常返回和错误返回。最后再来看一下我们是怎么封装这里的postData()函数的: < ">以上就是一个Deno函数使用SCF的Custom Runtime实现云函数的全过程。 四、结语 < ">从上文的论述我们不难看出: 1.SCF与语言无关 < ">因为CR的使用与语言无关,所以解锁了SCF的语言限制,也就是说只要可以实现一个HTTP Client,就可以通过HTTP API的调用和SCF进行交互,从而完成云函数的事件处理及调用。 2.bootstrap是入口 < ">举个例子,如果我用C语言实现一个HTTP Client,按照CR的约定完成与SCF的交互,那么完全可以编译成一个名字叫bootstrap的二进制文件,然后就可以跑C的FaaS函数了。 3.bootstrap可配置 < ">用户可以在bootstrap里面启动多个进程,可以解锁多种玩法,当然,要符合安全,毕竟用户函数运行环境有安全限制。但是,这已经可以解决一些“云函数+agent进程”的需求。 4.使用简单 < ">相对于学习各个语言的函数编写规范,了解云函数对各个语言的支持。使用CR只需要学习HTTP API的使用即可。更多的语言,环境相关的问题都是用户在业务开发中使用到的,不需要额外学习。 < ">Custom Runtime刚刚上线,已经得到了一些外网客户的关注。比如,有人用Cust王石的危机公关om Runtime把Swift放到了SCF里面,并做了相应的支持[3];有人用Custom Runtime在SCF中跑了WASM,并在上面做了Rust语言的支持[4]。 < ">还有很多类似场景,我们也在不断的努力,引入更多的语言,借助语言的生态,带动Serverless的生态发展。最后,欢迎大家体验SCF Custom Runtime,留下宝贵的意见! 参考资料: [1]Custom Runtime说明: https://cloud.tencent.com/document/product/583/47274 [2]官网示例: https://cloud.tencent.com/document/product/583/47610 [3]场景拓展1: https://github.com/stevapple/swift-tencent-scf-runtime [4]场景拓展2: https://www.freecodecamp.org/news/rust-webassembly-serverless-tencent-cloud/ One More Thing |
上一篇:Facebook Audience Network:原生广告使用指南
下一篇:TikTok Ads广告兴趣标签简介
基于对传统行业渠道的理解,对互联网行业的渠道我们可以下这样一个定义:一切...
小米应用商店的后台操作和苹果是比较相似的,因为都能填写100字符关键词,允许...
小米的规则目前是在变更中的,但是根据经验小米的搜索排名评分的高低是个很重...
为了恰饭,有时候是要接入一些广告的,所以FB也专门有一个广告的SDK,这就是A...
在 2018 年于旧金山举行的游戏开发者大会上,Amazon Web Services (AWS) 曾宣布,目前世...
关于Facebook Audience Network如何收款的问题,其实官方已经给了详细的步骤。本文主要...
本文介绍了Audience Network对广告载体的质量检查,以及它重点广告形式需要注意的问...
随着iOS开发,作为开发者或公司需要针对iOS App开发涉及的方方面面作出对应的信息...
Facebook和谷歌对出海企业广告渠道都很熟悉,但事实上,在国外还有一些渠道也很...
卖家从做号的第1分钟开始,就一定要想好变现路径是什么?一定要以变现为目的去...
小提示:您应该对本页介绍的“支持多语言:腾讯云Serverless云函数如何解锁语言”相关内容感兴趣,若您有相关需求欢迎拨打我们的服务热线或留言咨询,我们尽快与您联系沟通支持多语言:腾讯云Serverless云函数如何解锁语言的相关事宜。
关键词:支持多语言:腾讯云Serv