前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >腾讯云无服务器云函数架构精解

腾讯云无服务器云函数架构精解

原创
作者头像
腾讯云serverless团队
修改于 2017-09-07 06:24:38
修改于 2017-09-07 06:24:38
14.7K00
代码可运行
举报
运行总次数:0
代码可运行

分享:陈杰

腾讯云架构平台部技术专家,10年云计算经验,现供职于腾讯架构平台部,负责弹性计算及云函数技术研发,致力于提供领先的基础设施平台以提升资源利用率及优化提升程序员开发运维效率。

继虚拟机,容器技术,无服务器化成为新的行业热点,无服务器云函数可以让用户无需关心服务器的部署运营,只需开发最核心的业务逻辑,即可实现上线运营,具备分布容灾能力,可依据负载自动扩缩容,按照实际调用次数与时长计费。本次主要分享腾讯云无服务器云函数在技术实现上的挑战及架构实现原理。

主要从以下四个方面来分享一下无服务器云函数: 1.云函数的价值及使用场景 2.云函数架构原理 3.云函数关键技术点 4.云函数行业进展趋势

无服务器云函数(Serverless Cloud Function)是腾讯云提供的无服务器(serverless)执行环境,帮助用户在没有购买和管理服务器时仍能运行代码。用户只需要使用云平台支持的语言编写核心代码及设置代码运行的条件,代码即可在腾讯云基础设施上弹性、安全地运行,并可完全管理底层计算资源,包括服务器CPU、内存、网络、代码部署、弹性伸缩负载均衡等服务。

使用无服务器云函数将可免除所有运维性操作,企业和开发者可以更加专注于核心业务的开发,实现快速上线和迭代,把握业务发展的节奏。

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

随着云计算服务市场的成熟,用户对云计算接受程度逐渐提高,借助各类基础云组件,将业务上线时间从月级缩短到天级,但对比传统模式,用户仍需基于云组件重构非功能性需求。

云函数尝试将业务算法和流程提炼出来交由用户实现,打通各种云服务,并实现通用的负载均衡、自动伸缩、故障容灾、安全监管等通用功能,真正使得用户像搭积木一样打造个性化服务,将业务上线时间从天级缩短到分钟级。

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

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

  • 加快用户服务上线时间,用户只需实现业务算法及流程,上线时间缩短为分钟级;
  • 减少用户的运营负担,用户无须承担服务扩容,故障恢复运维工作;
  • 消除用户的资源成本,用户无需承担资源闲置费用,只为实际调用消耗付费

二、云函数架构原理

云函数平台整体架构原理如图所示。

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

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

  • 不仅支持业务快速上线,且能实现持续发展;
  • 不仅支持业务按需取用,且能释放闲置资源 ;
  • 不仅支持业务永不中断,且能扩展运行范围;
  • 不仅支持业务自由运行,且能避免干扰入侵;

下文将展开详述。

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

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

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

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

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

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

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

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

  • 分发调用阶段:需减少调用分发层级,比如对于用户主动发起的http同步调用,正常路径可免去存入持久化队列过程;
  • 镜像及代码下载阶段:需尽量预部署以减少下载时间,比如对新提交函数,并行启动预加载,使得第一次调用发起时无须再去实时下载;
  • 容器启动过程:需简化容器启动脚本,使得启动过程尽量轻量,对于对延时敏感的业务,提供实例预留机制,用户可选择预留少量实例以减少第一次调用的额外延时;
  • 执行函数调用:需尽量减少函数参数,返回数据及日志传递导致的内存拷贝次数;
  • 返回调用:需尽量减少返回层级;

通过逐层优化,第一次调用平台耗时可控制在2s左右,后续调用平台耗时控制在5ms左右。随着客户请求量的增加或减少,函数实例随着自动扩缩容,一般算法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
If 当前请求数/当前实例数 > 扩容阈值:扩容实例
else 当前请求数/当前实例数 < 缩容阈值:缩容实例

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

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

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

  • 硬件故障时服务不中断
  • 平台升级时服务不中断

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

  • 接入层:基于腾讯云CLB实现横向扩展,负载均衡,7层路由能力;
  • 逻辑层:实现模块无状态化,模块内部无状态数据,可随意启停替换;
  • 数据层:采用一致性存储仓库存储关键数据;
  • 节点层:实现快速节点故障检测及替换恢复

比如平台内部Invoker模块实例硬件故障时,如下图所示,由于invoker模块无状态,故障时可由接入层CLB模块自动剔除,剔除后新请求分发至剩余invoker模块实例,已接收的异步事件可由其它invoker重试完成,同步http调用会直接返回给用户错误请求,由用户重试,在故障invoker实例恢复后,自动添加至CLB中,继续分担负载。

当平台需要升级API接口时,采用只增不改策略,提供新版本API接口,保持用户原有服务兼容性,用户采用新接口时,CLB通过7层路由,路由至新版本invoker模块实例,旧版本实例随着负载的降低逐步缩容,新版本实例随着负载升高逐步扩容,以此实现了用户透明的版本平滑升级。

要实现云函数需与各类云组件打通,需要云组件提供事件注册及回调机制,云组件提供可注册事件及对应的回调接口,云函数确保云组件通信的用户权限打通传递。当前云函数实现了与腾讯云COS存储组件的打通,马上将实现与腾讯云CMQ、云监控等其它云产品的打通,并将运行范围扩展至CDN节点及IOT设备网关,实现边缘计算

六、支持业务自由运行,且能避免干扰入侵

云函数需支持用户本地测试通过的代码无缝在云函数平台,需具备足够的兼容性,及用户函数运行时环境,需要具备和用户开发测试环境类似的软件包,安全等配置;同时避免函数间干扰,防止恶意入侵。

为了避免用户函数间干扰,云函数使用了Docker容器来封装函数实例,通过docker的名字隔离、空间隔离、权限限制等机制实现用户间隔离,辅以实时冲突监控调度等措施及时处理干扰。

为了避免用户执行代码影响整个云函数平台,如下图所示,实现了云函数管理平台与用户函数的隔离,用户函数无法感知管理平台的网络地址,运行日志等信息,从而无从影响云函数平台的运行。

为了避免用户恶意代码对网络的探测和入侵,如下图所示,用户函数实例被限制到了受限的公共VPC网络,需通过网关实现与外网服务、其它函数实例、云组件的互访,同时,为了支持用户函数实例与个人CVM虚拟机的集成,云函数平台通过弹性网卡打通了与其私有VPC的网络通信。

七、云函数行业进展趋势

近年Serverles、微服务等理念逐步深入人心,云函数开始被用户了解接受。为了满足用户对于更快速上线、更低成本、更优架构的求索,腾讯云推出了云函数产品。用户不妨从解决实际问题开始试用云函数,比如实现一个简单的服务拨测工具,实现一个定时任务,实现存储于COS的图片、视频、文件的计算等。。随着云函数可联动云组件的拓展,支持语言的丰富,调试工具,流程引擎等逐步完善,云函数会逐步成为整个云平台的粘合剂,将各种云组件融合一起,让云成为你的公共后台,到时可支持更为复杂的状态服务场景,成为用户通用体贴厚实的后盾。

欢迎试用腾讯云无服务器云函数产品,云函数解决安全接入、故障容灾、自动伸缩、成本优化、版本管理等后台通用问题,用户可更省心专注的投入到业务创新。希望通过云函数能更深入的开放腾讯多年在海量服务耕耘修炼的能力,共享给广大用户使用,与大家一起成长。

Q&A

Q:请问代码怎么部署到docker中? A:直接将代码下载至母机,再将代码目录挂载至Docker

Q:云函数是通用的 还是只能在云平台运行? A:云提供了云函数服务,自己也可搭建,目前github上有不少开源云函数平台,比如openlambda,iron.io等,建议直接使用云的服务,因为可以和多个云产品打通,单靠云函数自身难以构建完整服务。

Q:事件传递使用的是队列吗? A:异步事件用了CMQ消息队列持久化存储,同步事件未使用

Q:请问云函数对开发语言有限制否?如果有,目前对Go语言的支持如何? A:目前支持python 2.7/3.6, node.js 4.3/6.10, Java8,如果有通用的用户需求,可以支持其它语言,比如php,go等

Q:有系统函数调用吗?自定义函数的颗粒度有何建议? A:绝大部分的系统调用都可调用,除了一些危险操作,比如关机,重启,网络服务监听等,函数颗粒度可参考微服务的设计原则,将功能尽量拆细

Q:可落地吗? A:已有不少用户案例,后续会做些分享,不妨亲自试试,当前是免费的,会一直提供免费包,有需求直接给我们提

Q:云函数支持kotlin语言吗? A:之前没用户反馈需要这种语言的支持,不过我个人挺看好,会持续保持关注

Q:请问将请求调度函数实例,这个调度算法的实现? A:其实这里就是通用的负载均衡和扩缩容算法,这里比较复杂的是提前预测需要扩容,后续会详细分享。

Q:能介绍下 将请求调度到函数实例的实现吗? A:这里有个invoker模块对每个函数维持有一个请求队列,目前没设置优先级,按照先来先到的顺序依次调度,调度时会从函数所有可用的函数实例中,选择一个下发。函数实例里有个循环接受请求,收到时传递参数调用用户函数。

Q:代码可以下云落地吗? A:代码里一般会涉及其它云产品的调用,所以一般对云平台有一些依赖,可以关注下开源的serverless框架,在公有云云函数上封装了一层,用来解除依赖,实现在各个云平台的平滑迁移。

Q:云函数的代码有哪些限制?比如什么样的函数不可以调用,什么样的库不能import? A:可以基本认为无限制,但会禁止恶意行为,比如关机,重启,端口扫描等;也会禁止端口监听,因为常驻进程不符合云函数按需启用的原则。如果预装库不符合要求,可以自行将依赖库打包至zip里上传。

Q:下层的容器编排是基于什么做的?k8s么? A:基于腾讯云的容器平台,其底层是K8S

https://cloud.tencent.com/product/scf

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
让业务感知不到服务器的存在——基于弹性计算的无服务器化实践
导读:2018年7月6 - 7日,一年一度的技术圈盛会ArchSummit全球架构师峰会在深圳华侨城洲际酒店举办。100余位国内外技术专家将齐聚深圳,分享各类技术架构最佳实践。来自腾讯技术工程事业群架
腾讯技术工程官方号
2018/07/16
15.8K1
周维跃:Serverless 云函数架构精解
5月25日,云+社区技术沙龙-互联网架构成功举办。本期沙龙特邀请腾讯的技术专家分享关于技术架构、落地实践案例、无服务器云函数架构、海量存储系统架构等话题,从技术角度看架构发展,为开发者们带来丰富的实践经验内容,深度揭秘技术架构。下面是周维跃老师关于云函数架构的解析和函数冷启动的优化经验的分享。
腾讯云开发者社区技术沙龙
2019/06/03
10.7K0
周维跃:Serverless 云函数架构精解
由浅入深 SCF 无服务器云函数实践
近年来,互联网服务从一开始的物理服务器托管,虚拟机,容器,发展到现在的云函数,逐步无服务器化。
腾讯云技术
2018/01/15
5.8K1
由浅入深 SCF 无服务器云函数实践
云开发如何帮助业务扛过大流量活动洪峰丨深度好文
在企业里,做活动是一种十分常见的需求,有面向C端用户开展的活动,也有面向公司内部员工的活动。随着互联网技术的不断发展和疫情等方面的原因,线上开展的活动也越来越多,常见的形式有:内容征集、评论弹幕、点赞投票、竞猜答题、抽奖红包、组队分享、PK排行榜等,无论是单项活动还是多种玩法,其中不乏有会产生大量并发请求的活动。
腾讯云开发TCB
2021/03/18
1.1K0
云开发如何帮助业务扛过大流量活动洪峰丨深度好文
腾讯云发布无服务器云函数,较云主机成本低约70%
云资讯小编
2017/04/26
6.8K0
腾讯云发布无服务器云函数,较云主机成本低约70%
最佳案例 | 日 PV 超百亿级的游戏营销服务云原生容器化之路
曹鑫,腾讯业务运维工程师,擅长大规模K8s集群运营和容器化,目前就职于 IEG 增值服务部 营销基础平台中心,现负责腾讯游戏数据营销服务上云和营销基础平台建设。 背景 游戏营销服务通过分析玩家在游戏内的行为数据,精准发起运营活动,实现拉新、拉活跃、拉付费、拉回流等效果,使游戏获得更大的收益。服务有如下特点: 节奏快,比如五五开黑节,九九战斗之夜,周年庆,活动仅持续数日 数量多,平均每天都会有几十个活动上线,而且活动种类繁多 访问量无法精准预估,很难精准的预测一次活动的访问量,玩家参与度经常超预期 访问量
腾讯云原生
2021/12/02
1.3K0
给长通物流业务系统做的基于腾讯云的上云解决方案
长通物流是一家基于供应链管理集运输、仓储、物流配送、产品代理一体化的全方位综合物流服务商。随着社会的发展,行业环境的改变,为满足用户的需求不断创新,现在先研发第三代物流管理系统,预期8月部署上线,新系统的部署采用云服务的方式,满足新业务的安全需求、访问需求等。
中云微迅
2019/10/22
1.8K0
给长通物流业务系统做的基于腾讯云的上云解决方案
腾讯云函数计算冷启动优化实践
随着当下Serverless、FaaS生态的不断发展以及小程序的空前繁荣,越来越多的企业和个人用户把自己的应用,小程序部署到腾讯云无服务器云函数平台上,但随之而来的FaaS场景下高并发、大规模、快速启动等需求也给我们带来了巨大的挑战。为此我们打造了新一代Severless函数计算平台,在安全、可用性、性能上进行了全面升级。
腾讯云serverless团队
2019/07/11
9.1K1
腾讯云函数计算冷启动优化实践
腾讯云上云架构模型推荐
我们先直接看架构图,给同学推荐是使用CDN加速、WAF应用防火墙+DDOS防护、CLB负载均衡(多可用区属性)、多可用区云主机、数据库(多可用区主备+异地灾备)。具体架构如图:
云计算_客服
2022/05/12
8.2K1
腾讯云上云架构模型推荐
腾讯云 Serverless 技术演进
注:本文整理自上周六举办的「Hello Serverless」技术沙龙深圳站演讲内容,讲师是腾讯云 Serverless 产品架构师孔令飞,文末提供了讲师演讲 PDF 的下载,回复「Serverless 深圳」免费可得。 本文将从产品层面来介绍腾讯云是如何落地 Serverless 技术以及 Serverless 的技术演进。 ---- 目录 Serverless 是一项新技术,可能有朋友不是很熟悉。所以我们先介绍下 Serverless 的概念和发展历史,接着介绍腾讯云 Serverless 从 1.0
腾讯云serverless团队
2019/08/26
7.6K2
腾讯云 Serverless 技术演进
腾讯云高可用和容灾解决方案
实现业务连续性的技术手段通常包括高可用性和灾备恢复两种,所以本文讲述的是在腾讯云上实现业务连续性的解决方案。
聊high云
2018/03/13
12K0
腾讯云高可用和容灾解决方案
腾讯云函数访问VPC网络架构优化
上篇《腾讯云函数计算冷启动优化实践》文章,主要讲解了云函数冷启动方面的优化实践。Serverless中的函数除了计算任务外,绝大部分还有网络访问需求,本篇文章,将详细介绍SCF网络架构优化。
腾讯云serverless团队
2019/07/11
14.3K1
腾讯云函数访问VPC网络架构优化
【玩转腾讯云】如何构建云端高可用架构!
作者介绍 万守兵:腾讯云行业架构师,对云上双活架构、迁移方案有比较深的了解,现主要负责腾讯云泛互行业TOP级客户的解决方案架构工作。  高可用挑战  1.  高可用挑战:时间要求 2.   高可用挑战:各种不稳定的原因  常见事故及问题归类如下:  互联网通用架构和分层  典型互联网架构分层设计如下: 系统正交分解如下:  分类      服务治理         目标     技术      架构     监控层外层客户端SLA、攻防/扫描/审计  CDN合理/稳定
云存储
2020/07/31
2.5K0
腾讯云Serverless2.0架构精解
无服务器化后台服务已成为后台服务转型一个炙手可热的方向,相对于传统后台架构有降低运维、资源成本等诸多优点,云函数就是目前应用较为成熟的无服务器架构方案。那么云函数自身后台架构是如何实现的呢?
可可爱爱没有脑袋
2020/01/08
1.6K0
腾讯云Serverless2.0架构精解
最佳实践 | 腾讯云TRTC&云函数助力天狮集团快速上线全流程全球直播服务
业务覆盖全球190多个国家和地区,服务全球用户超过4000万,业务领域横跨生物技术、健康管理、酒店旅游、教育培训、金融投资......运营这样一家跨国集团的全球化业务,需要在全球部署多少 IT 管理中心? 天狮集团作为这样一家跨国公司,给出的答案是:3个。 01. 一个 “小目标”:加速实现全球直播 天狮的全球化业务,主要由位于天津、北京和杭州的 3 个精简的 IT 团队负责,积极通过技术创新提升业务开发效率,源源不断地为天狮在全球输出业务动力。 2021 年,天狮将快速实现海内外直播服务提高为战略
腾讯云音视频
2021/10/18
2.7K0
陈杰:无服务器架构,让云端开发更纯粹
在微服务还方兴未艾的时候,无服务架构就以其弹性伸缩、按需付费以及无维护等特点得到了很多开发者的青睐。腾讯架构平台部技术专家陈杰表示,云函数的核心理念就是给整个服务提供一种公共的架构,针对性解决服务的接入、安全、扩容、容灾、分布等一系列问题。 [image.jpg] 据介绍,云函数价值主要体现在四个方面。一是简化架构,云函数是以函数粒度来组织的服务,是一种天生的微服务架构;而是简化代码开发,用户无须编写网络服务,鉴权,分布,容灾,扩缩容等代码,只需实现最核心的业务逻辑;二是简化运维,对于云函数而言,无须关心
腾讯云serverless团队
2018/01/15
4.7K0
陈杰:无服务器架构,让云端开发更纯粹
如何设计高可用的云业务架构?
容错(fault tolerance)指的是, 单个组件发生故障时,业务还能继续运行。
binwenli
2019/12/13
2.5K1
如何设计高可用的云业务架构?
​下一代无服务器的发展形态:Serverless2.0
6月25日,在上海召开的KubeCon 2019大会上,腾讯云重磅发布了下一代无服务器的发展形态:Serverless2.0。本文将以 Serverless 的概念、发展、形态、应用及优劣对比展开,进一步介绍腾讯云针对 Serverless 2.0 的形态演进以及发展思考。
腾讯云serverless团队
2019/07/02
1.3K0
大规模 Node.js 网关的架构设计与工程实践
本文由 InfoQ 整理自腾讯云 CloudBase 前端负责人王伟嘉在 GMTC 全球大前端技术大会(深圳站)2021 上的演讲《十亿级 Node.js 网关的架构设计与工程实践》。
深度学习与Python
2022/03/23
2280
大规模 Node.js 网关的架构设计与工程实践
腾讯云高可用网络的修炼之道
当他睡眼惺忪、手拿红牛、嘴刁香烟迈着沉重的步伐从某网络核心机房走出来的时候,除了看门大爷简短问候之外,也只有刚刚过去的这个黑夜才真正懂得刚刚发生了什么,在外人眼里,这个夜晚再正常不过,和往常一样,刷刷微博、看看抖音,逛逛购物网站,即便是前一晚上有某些人觉得打开购物网站的页面有点卡慢,他们也可能不会放在心上,然而正是因为这样一个不一样的网络体验,网络工程师们已经是废寝忘食,鏖战了整整一夜,来修复引发这个网络卡慢的bug,在外人眼里一觉醒来,看似波澜不惊,但有时实则是暗流涌动;
abelbai
2020/10/31
12.3K2
腾讯云高可用网络的修炼之道
推荐阅读
相关推荐
让业务感知不到服务器的存在——基于弹性计算的无服务器化实践
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档