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

发布时间:2017-04-27 15:00:14 编辑:站点网

四、

要支持云函数真正按需取用,需实现用户第一次调用时延迟分配资源,函数调用过程如下图所示:云函数平台在调用分发时,会判断是否有函数实例存在,如若不存在,则实时启动实例,实例启动完成后,才开始执行函数调用。为了达到第一次调用足够快的目标,在调用过程中需分阶段逐层优化:l 分发调用阶段:需减少调用分发层级,比如对于用户主动发起的http同步调用,正常路径可免去存入持久化队列过程;l 镜像及代码下载阶段:需尽量预部署以减少下载时间,比如对新提交函数,并行启动预加载,使得第一次调用发起时无须再去实时下载;l 容器启动过程:需简化容器启动脚本,使得启动过程尽量轻量,对于对延时敏感的业务,提供实例预留机制,用户可选择预留少量实例以减少第一次调用的额外延时;l 执行函数调用:需尽量减少函数参数,返回数据及日志传递导致的内存拷贝次数;l 返回调用:需尽量减少返回层级;通过逐层优化,第一次调用平台耗时可控制在3s左右,后续调用平台耗时控制在10ms左右。随着客户请求量的增加或减少,函数实例随着自动扩缩容,一般算法如下:If当前请求数/当前实例数 >扩容阈值:扩容实例  else当前请求数/当前实例数 <缩容阈值:缩容实例当缩容至最后一个函数实例时,为避免函数实例短时间内重复启动/停止导致客户调用延时增加,需保留一段时间延迟释放。

五、

要支持云函数永不中断,需实现2个容灾目标:l 硬件故障时服务不中断l 平台升级时服务不中断为实现这三个容灾目标,整体架构需实现set化,且在各层均需对应的支持:l 接入层:基于腾讯云CLB实现横向扩展,负载均衡,7层路由能力;l 逻辑层:实现模块无状态化,模块内部无状态数据,可随意启停替换;l 数据层:采用一致性存储仓库存储关键数据;l 节点层:实现快速节点故障检测及替换恢复;比如平台内部Invoker模块实例硬件故障时,如下图所示,由于invoker模块无状态,,故障时可由接入层CLB模块自动剔除,剔除后新请求分发至剩余invoker模块实例,已接收的异步事件可由其它invoker重试完成,同步http调用会直接返回给用户错误请求,由用户重试,在故障invoker实例恢复后,自动添加至CLB中,继续分担负载。当平台需要升级API接口时,采用只增不改策略,提供新版本API接口,保持用户原有服务兼容性,用户采用新接口时,CLB通过7层路由,路由至新版本invoker模块实例,旧版本实例随着负载的降低逐步缩容,新版本实例随着负载升高逐步扩容,以此实现了用户透明的版本平滑升级。要实现云函数需与各类云组件打通,需要云组件提供事件注册及回调机制,云组件提供可注册事件及对应的回调接口,云函数确保云组件通信的用户权限打通传递。当前云函数实现了与腾讯云COS存储组件的打通,马上将实现与腾讯云CMQ、云监控等其它云产品的打通,并将运行范围扩展至CDN边缘节点,实现边缘计算。
更多相关内容:
    无相关信息
[!--temp.cy--]