函数计算: 让小程序开发进入 Serverless 时代

点击下载《不一样的 双11 技术:阿里巴巴经济体云原生实践》

本文节选自《不一样的 双11 技术:阿里巴巴经济体云原生实践》一书,点击上方图片即可下载!

作者 | 吴天龙(木吴)阿里云函数计算技术专家

导读:小程序是轻量级的快速迭代的移动应用,对开发者从开发到上线的效率提出了更高的要求。使用函数计算,开发者无需关心后端服务的搭建运维,只需要编写函数就能够为小程序提供稳定可靠并且弹性伸缩的服务。并且随着小程序访问量增加,函数计算能够自动快速地弹性伸缩,即使应对 双11 活动高峰也能够如丝般顺滑。

自 2017 年第一批小程序上线以来,越来越多的移动端应用以小程序的形式呈现。小程序拥有触手可及、用完即走的优点,这大大降低了用户的使用负担,使小程序得到了广泛的传播。在阿里巴巴,小程序也被广泛地应用在淘宝/支付宝/钉钉/高德等平台上,例如今年 双11,大家在淘宝/天猫上参加的活动,大部分都是通过小程序提供的。

一个小程序可以分为客户端和服务端:客户端包括界面的展示和交互逻辑;服务端则包括数据的处理和分析。

为了支撑大量的小程序,平台在服务端面临的挑战有:

  • 大量的小程序是不活跃的,传统的至少一台服务器的方式会造成资源浪费;
  • 在活动高峰期小程序的调用量激增,要求服务端能够快速进行弹性伸缩。

针对小程序场景,阿里云提供了完整的小程序解决方案:小程序云。资源的有效利用和弹性伸缩,是小程序云提供的核心能力之一,而这背后依托的,就是阿里云函数计算服务。函数计算是一个全托管 Serverless 计算服务,让开发者无需管理服务器等基础设施,只需编写和上传代码,就能够构建可靠、弹性、安全的服务。下面就以 双11 小程序场景为例,解析函数计算在弹性伸缩上的核心技术。

小程序架构

让我们先来看一下淘宝小程序的技术架构是什么样的:

  • 用户在手机淘宝点击店铺活动,就进入了小程序。界面及交互由小程序客户端提供;
  • 在用户参与活动过程中,需要向服务端请求或者发送数据时,由客户端发起函数调用;
  • 函数调用先经过淘宝接入网关,进行必要的鉴权认证,然后调用到小程序云;
  • 用户的函数代码执行在小程序云中,用户可以实现自定义的业务逻辑。

利用小程序云提供的丰富的扩展能力,用户可以方便地构建完整的电商应用:

  • 数据存储:存储结构化的数据;
  • 文件存储:存储文本/图片/视频等文件;
  • 电商服务:获取用户信息/创建支付交易;
  • 统计分析:自动统计小程序的使用信息及用户分析,支撑商业决策。

可以看到,函数是整个小程序的业务逻辑的核心,它将云端的基础能力组合串联起来,对客户端提供服务能力。如果函数能力成为瓶颈,将影响整个小程序的运行。

在这样的架构下,要支撑大量的小程序,需要函数能够做到:

  • 一是随时在线以支持小程序即开即用;
  • 二是弹性伸缩以应对小程序访问突增。为了做到以上两点,让我们看一下函数计算的技术架构:

函数计算架构

其中几个核心组件的功能如下:

  • API 服务:函数计算的网关,实现鉴权/流控等功能;
  • 资源调度:为函数调用分配管理计算资源,负责调度效率和性能;
  • 函数执行引擎:执行函数代码的环境,做到安全和隔离。

基于这个架构,函数计算是如何解决上面提到的小程序平台的挑战呢?接下来我们逐一分析。

1. 冷启动

当用户创建函数上传代码时,函数计算只是将代码包保存到 OSS,并没有分配计算资源,因此函数计算可以支撑海量的小程序。

当函数第一次被调用时,函数计算会分配计算资源、下载函数代码、加载并执行代码。这一过程称为冷启动,函数计算通过大量的优化,将系统侧的冷启动时间优化到 200ms 以内。因此即使是冷的小程序,在初次调用时也能够做到快速的即开即用。

2. 弹性伸缩

当小程序持续调用过程中,负载逐渐上升或者突然升高的情况下,函数计算是如何应对的呢?

函数计算的“资源调度”模块,会精确管理每个实例的状态,当请求到来时,它首先检查是否有空闲的实例可以服务,如果没有请求就会进入等待队列,当有空闲的实例释放出来时,请求就能够被及时处理。

同时,调度器还会在后台创建新的实例,当新的实例准备好后,也能够服务请求。在这种策略下,能够做到在负载以 2 倍的速度增长情况下,请求的 P95 延时是稳定的。优化细节可以参考我们的博客文章

上面是某个淘宝小程序的调用量和延时监控数据。

可以看到,在整点活动时,TPS 出现了瞬间的高峰,但是 P95 延时却没有明显的波动。这是因为函数计算在请求高峰来临时,能够快速地弹性伸缩创建新的实例,同时利用已有资源做一定的缓冲,使得整个攀升的过程能够比较平滑。

3. 预留实例

对于一些“秒杀”的场景,要求瞬间提供大量的计算资源。此时靠实时的弹性伸缩是不够的:

  • 一是冷启动的时间即使是 200ms,对于秒杀场景也太慢了;
  • 二是底层的计算资源在扩容时也会有流控。

针对这种场景,函数计算提供了预留实例的功能。使用预留实例,用户可以为一些可预测的活动提前预留好资源,彻底消除冷启动。

和传统的基于服务器的做法不同,用户不需要按峰值来预留资源,而是可以结合预留实例和按量实例的混合模式:请求先被预留实例处理,当预留实例用满时,会自动弹性伸缩出更多的按量实例来处理请求。

由于有一定的资源基础,结合调度优化,按量实例的冷启动所产生的影响就被大大减小了。这就是利用函数计算的弹性伸缩能力,在性能和成本之间达到很好的平衡。

总结

小程序是轻量级的快速迭代的移动应用,对小程序开发者的开发效率有很高的要求。

小程序上线后随着访问量的增加或者活动期间的访问突增,对后端服务的稳定和弹性也是一个很大的考验。函数计算上传代码即可运行,极大地提高了后端服务的开发效率;混合模式的弹性伸缩,轻松应对负载变化。这些特点使得函数计算成为支撑小程序平台的很好的选择。

对函数计算感兴趣的开发者,可以点此免费试用)!

本书亮点

  • 双11 超大规模 K8s 集群实践中,遇到的问题及解决方法详述
  • 云原生化最佳组合:Kubernetes+容器+神龙,实现核心系统 100% 上云的技术细节
  • 双 11 Service Mesh 超大规模落地解决方案

阿里巴巴云原生关注微服务、Serverless、容器、Service Mesh 等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,做最懂云原生开发者的技术圈。”

原文地址:https://blog.51cto.com/13778063/2459611

时间: 2024-10-07 20:48:17

函数计算: 让小程序开发进入 Serverless 时代的相关文章

微信小程序开发—项目实战之计算器开发

我参加CSDN博客之星评选啦,感谢大家前往投票支持! 投票地址:http://blog.csdn.net/vote/list.html?keyword=anda0109#search 就像学习一门开发语言首先会写出"Hello World"一样,学习开发一个应用首先得写出一个"计算器",这也是开发者的入门必经之路.想当年我学习C/C++也是从一个计算器入门而后一往无前的. 小程序的第一个应用,我也选择了开发计算器,入门神器嘛.首先,它的界面相对简单,适合入门:其次,

微信小程序开发的入门教程

广州微信小程序开发公司(www.dthulian.com)品向科技,下面跟大家详细介绍微信小程序开发的入门教程: 开发前准备: 注册小程序帐号 绑定开发者 登录微信公众平台小程序,进入用户身份- 开发者,新增绑定开发者. 已认证的小程序可以绑定不多于20个开发者.未认证的小程序可以绑定不多于10个开发者. 获取AppID下载并安装开发者工具 下载完成后,使用管理员或者绑定的开发者微信号扫码登录. 一个微信小程序 创建项目 我们需要通过开发者工具,来完成小程序创建和代码编辑. 开发者工具安装完成后

云开发初探 —— 更简便的小程序开发模式

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由李成熙heyli发表于云+社区专栏 李成熙,腾讯云高级工程师.2014年度毕业加入腾讯AlloyTeam,先后负责过QQ群.花样直播.腾讯文档等项目.2018年加入腾讯云云开发团队.专注于性能优化.工程化和小程序服务. 小程序诞生以来,业界关注小程序前端的技术演进较多,因此众多小程序前端的框架.工具也应运而生,前端开发效率大大提高,而后台的开发技术则关注不多,痛点不少,具体痛在哪里呢? 小程序后台开发之痛 第一个是脑袋瓜疼,怎么疼

微信小程序开发BUG经验总结

摘要: 常见的微信小程序BUG! 小程序开发越来越热,开发中遇到各种各样的bug,在此总结了一些比较容易掉进去的坑分享给大家. 1. new Date跨平台兼容性问题 在Andriod使用new Date("2018-05-30 00:00:00")木有问题,但是在ios下面识别不出来. 因为IOS下面不能识别这种格式,需要用2018/05/30 00:00:00格式.可以使用正则表达式对做字符串替换,将短横替换为斜杠.var iosDate= date.replace(/-/g, '

微信小程序开发(二)-----云开发

1.概念 微信小程序的云开发是腾讯云与微信团队深度合作推出的一个全新的小程序的解决方案,它提供了云函数.云数据库与云存储这三大基础能力支持,随着云开发的出现,小程序的开发者可以将服务端的部署和运营的环节进行服务端的托管,让腾讯云去管理,而不需要在运维和管理方面投入太多的精力. 2.传统小程序开发与云开发的区别 小程序传统开发模式:(开发效率低.运维成本高) 对于小程序传统的开发模式而言,我们需要一个客户端(也就是前端页面),而前端页面展示的数据大多来自于数据库,因此我们还需要一个服务端,把后端的

微信小程序开发视频教程

课程:拜师学艺,微信小程序从入门到大神必经之路(第一季,共四季) 课程观看地址:http://www.xuetuwuyou.com/course/172/lesson/list 课程出自学途无忧网:http://www.xuetuwuyou.com 讲师:风舞烟 课时列表: 第一部_诞生 - 天降大任:名门贵族,互联网开发新宠--小程序横空出世 第1章 : 忽如一夜春风来--小程序的前世今生 课时1:课程开场 课时2:本章目标及任务 课时3:第一回合_小王子出世-微信小程序_小程序为什么这么火

微信小程序开发心得

微信小程序也已出来有一段时间了,最近写了几款微信小程序项目,今天来说说感受. 首先开发一款微信小程序,最主要的就是针对于公司来运营的,因为,在申请appid(微信小程序ID号)时候,需要填写相关的公司认证信息如,营业执照等 再次就是用一个未曾开通过公众号的QQ号或微信号来注册一个微信小程序号. 最后,下载微信小程序开发工具. 由于这里,我们更多的关注如何去开发一些app,而不是科谱微信小程序,故在此不在过多的解释,详细的说明,可以去官网帮助文档. 首先,我们拿自己的项目在一步一步的说明并开发吧,

[转]灯灯小程序开发手记:仿今日头条(上)

本文转自:http://www.jianshu.com/p/a1e0b8abb12d 写在前面 新的一年,祝大家新年快乐!当然对于程序员来说,新的一年,也要有新的改变.因此灯灯决定凑热闹编写微信小程序啦! 上一篇文章<记一次小程序开发过程>中,灯灯大致写了下自己第一次开发小程序的感受和流程.这一次灯灯会详细记录下自己制作一个小程序的思路.遇到的问题.涉及到的代码等和大家分享.    视频教程地址:http://study.163.com/course/introduction.htm?cour

微信小程序开发入门教程

做任何程序开发要首先找到其官方文档,微信小程序目前还在邀请内测阶段,目前官方放出了部分开发文档,经过笔者一天的查看和尝试,感觉文档并不全面,但是通过这些文档已经能够看出其大概面貌了.闲话不多说,我们先来看看其有哪些官方文档. 微信公众平台开发者文档统一入口为:https://mp.weixin.qq.com/wiki,这里面大部分内容都是以前就有的,微信开发都是基于此份文档. 现在的变化是在这份文档的顶部加了一个“微信公众平台.小程序”的入口,这个入口才就是专门针对微信小程序开发的文档,如下图: