加入收藏 | 设为首页 | 会员中心 | 我要投稿 温州站长网 (https://www.0577zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 建站资源 > 经验 > 正文

【揭秘】腾讯云首发无服务器云函数的关键技术

发布时间:2017-05-11 23:04:52 所属栏目:经验 来源:腾讯安全
导读:副标题#e# 4月26日消息,腾讯云推出国内首款FaaS(Function as a Service,函数即服务) 产品——无服务器云函数SCF。那么,云函数的真正内涵是什么、架构原理,关键技术和发展趋势是什么?腾讯云基础产品团队下文将对上述问题进行解答。 背景:无服务器云函数
副标题[/!--empirenews.page--]

4月26日消息,腾讯云推出国内首款FaaS(Function as a Service,函数即服务) 产品——无服务器云函数SCF。那么,云函数的真正内涵是什么、架构原理,关键技术和发展趋势是什么?腾讯云基础产品团队下文将对上述问题进行解答。

背景:无服务器云函数的用户价值核心信息:第一,用户只需要上传代码即可以最简捷的方式使用腾讯云高效稳定的基础设施;第二,兼具成本低廉的特点,代码按需运行,空闲时不收费。经测试,按调用次数和运行时间付费,在每个月请求不足百万时,使用无服务器云函数比使用多台云主机搭建集群的成本减少约70%。

无服务器云函数(Serverless Cloud Function)是腾讯云提供的无服务器(serverless)执行环境,帮助用户在没有购买和管理服务器时仍能运行代码。用户只需要使用云平台支持的语言编写核心代码及设置代码运行的条件,代码即可在腾讯云基础设施上弹性、安全地运行,并可完全管理底层计算资源,包括服务器CPU、内存、网络、代码部署、弹性伸缩、负载均衡等服务。使用无服务器云函数将可免除所有运维性操作,企业和开发者可以更加专注于核心业务的开发,实现快速上线和迭代,把握业务发展的节奏。

一、云函数的价值及使用场景

随着云计算服务市场的成熟,用户对云计算接受程度逐渐提高,借助各类基础云组件,将业务上线时间从月级缩短到天级,但对比传统模式,用户仍需基于云组件重构非功能性需求;云函数尝试将业务算法和流程提炼出来交由用户实现,打通各种云服务,并实现通用的负载均衡、自动伸缩、故障容灾、安全监管等通用功能,真正使得用户像搭积木一样打造个性化服务,将业务上线时间从天级缩短到分钟级。

【揭秘】腾讯云首发无服务器云函数的关键技术

相比云主机,云函数更适合于支持微服务架构业务场景。以图片多规格压缩服务为例,该服务在用户上传图片至COS时,自动将原始图片压缩成适配手机、平板、电脑等多种大小的规格。如利用云函数实现该服务,用户只需创建函数,定义函数触发条件为“图片上传”,在线编辑或使用IDE完成代码编写后上传,服务即构建完成。用户上传图片时,自动调用定义的函数完成图片的多规格压缩,云函数平台根据上传并发量自动扩缩容函数实例,并最终按照实际调用消耗计费。

【揭秘】腾讯云首发无服务器云函数的关键技术

从该示例可以看出,云函数为用户带来的主要价值为:

l 加快用户服务上线时间,用户只需实现业务算法及流程,上线时间缩短为分钟级;

l 减少用户的运营负担,用户无须承担服务扩容,故障恢复运维工作;

l 消除用户的资源成本,用户无需承担资源闲置费用,只为实际调用消耗付费;

二、云函数架构原理

云函数平台整体架构原理如图所示。云函数为用户提供SDK/WEBUI两种使用方式,并通过事件注册与回调机制与其它云组件打通,提供标准的API接口;调用分发根据函数所属的区域,用户,名字,版本号,鉴权等信息申请函数实例,并将调用均匀的分发到可用函数实例;函数管理负责创建/修改/删除函数,并提供函数代码管理,版本管理等功能;函数调度根据函数资源需求选择合适的位置创建/销毁函数实例;函数实例部署用户定义的函数,负责函数的执行及监管。

【揭秘】腾讯云首发无服务器云函数的关键技术

从云函数的定位及架构原理看,衡量云函数平台的关键技术指标可概括为:

l 不仅支持业务快速上线,且能实现持续发展;

l 不仅支持业务按需取用,且能释放闲置资源;

l 不仅支持业务永不中断,且能扩展运行范围;

l 不仅支持业务自由运行,且能避免干扰入侵;

下文将展开详述。

三、支持业务快速上线,且能实现持续发展

支持业务分钟级上线,需要尽可能的减少用户研发工作量,云函数用户仅需提供简单的函数配置及代码即可完成上线。以图片压缩为例,用户自行编辑python代码如下,即可实现一个图片压缩服务:

【揭秘】腾讯云首发无服务器云函数的关键技术

其中第1行引入依赖库,第4~9行解析输入参数,第11行调用库完成图片压缩,12~15行判断结果及返回。用户可在线完成代码的编辑并提交,也可像开发本地程序一样使用喜欢的IDE编辑,调试通过后打成zip包通过SDK提交,提交成功服务即上线。

支持业务可持续发展,需提供用户函数平滑升级及版本变更能力,当用户更新函数代码或配置后,新调用请求被分发至新函数实例,原调用请求执行完成后,旧函数实例自动消亡,服务在客户不感知情况下平滑更新。即将支持用户函数多版本管理,将函数别名映射至用户指定版本,在客户不感知情况下实现多版本间平滑切换。

【揭秘】腾讯云首发无服务器云函数的关键技术

函数运行过程中间,用户打印日志,标准输出/错误输出日志分类上传至腾讯云日志服务平台,用户可实时监控函数运行情况。

四、支持业务按需取用,且能释放闲置资源

要支持云函数真正按需取用,需实现用户第一次调用时延迟分配资源,函数调用过程如下图所示:

【揭秘】腾讯云首发无服务器云函数的关键技术

云函数平台在调用分发时,会判断是否有函数实例存在,如若不存在,则实时启动实例,实例启动完成后,才开始执行函数调用。为了达到第一次调用足够快的目标,在调用过程中需分阶段逐层优化:

l 分发调用阶段:需减少调用分发层级,比如对于用户主动发起的http同步调用,正常路径可免去存入持久化队列过程;

l 镜像及代码下载阶段:需尽量预部署以减少下载时间,比如对新提交函数,并行启动预加载,使得第一次调用发起时无须再去实时下载;

l 容器启动过程:需简化容器启动脚本,使得启动过程尽量轻量,对于对延时敏感的业务,提供实例预留机制,用户可选择预留少量实例以减少第一次调用的额外延时;

l 执行函数调用:需尽量减少函数参数,返回数据及日志传递导致的内存拷贝次数;

l 返回调用:需尽量减少返回层级;

通过逐层优化,第一次调用平台耗时可控制在3s左右,后续调用平台耗时控制在10ms左右。

随着客户请求量的增加或减少,函数实例随着自动扩缩容,一般算法如下:

If当前请求数/当前实例数 >扩容阈值:扩容实例

  else当前请求数/当前实例数 <缩容阈值:缩容实例

当缩容至最后一个函数实例时,为避免函数实例短时间内重复启动/停止导致客户调用延时增加,需保留一段时间延迟释放。

五、支持业务永不中断,且能扩展运行范围

要支持云函数永不中断,需实现2个容灾目标:

l 硬件故障时服务不中断

l 平台升级时服务不中断

为实现这三个容灾目标,整体架构需实现set化,且在各层均需对应的支持:

l 接入层:基于腾讯云CLB实现横向扩展,负载均衡,7层路由能力;

l 逻辑层:实现模块无状态化,模块内部无状态数据,可随意启停替换;

l 数据层:采用一致性存储仓库存储关键数据;

l 节点层:实现快速节点故障检测及替换恢复;

(编辑:温州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读