点击下载《不一样的 双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 等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,做最懂云原生开发者的技术圈。”

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

  1. 函数计算搭建小程序Web应用后端服务

    简介:使用Severless架构搭建移动App.小程序和Web应用后端服务,弹性伸缩使用云资源. 直达最佳实践:[函数计算搭建小程序Web应用后端服务] 最佳实践频道:[点击查看更多上云最佳实践] 这 ...

  2. 微信小程序开发 - 不完善

    网址 https://mp.weixin.qq.com/ 小程序与普通网页开发的区别 (1)运行环境不同 网页运行在浏览器环境中 小程序运行在微信环境中 (2)API不同 由于运行环境的不同,所以小程 ...

  3. 一文搞懂EMAS Serverless小程序开发|电子书免费下载

    >> 快来免费下载|电子书<五天玩转EMAS Serverless> << 点击免费下载 <五天玩转EMAS Serverless> EMAS Serv ...

  4. 小程序开发中云函数的应用

    在做小程序开发的时候,当你创建小程序时会看到一个使用云开发的选项,说白了就是提供我们一个云服务器,在里面可以实现一些服务端的复杂操作,下面小千就来教大家如何去使用云函数进行小程序的开发. 创建目录与云 ...

  5. 借助云开发,利用订阅消息,云函数路由实现小程序好友一对一聊天,添加好友等仿微信功能

    微信小程序借助云开发,利用订阅消息,云函数路由实现小程序好友一对一聊天,添加好友等仿微信功能 这篇文章已经进行了更新,请点此进行查看 仿微信好友聊天 主要功能有 后续可能补充功能 详细介绍 注意 保存 ...

  6. uniapp 微信云开发静态网站和云函数跳转小程序

    uniapp 微信云开发静态网站和云函数跳转小程序 云开发静态网站的创建 云函数及copy-webpack-plugin 安装copy-webpack-plugin可能遇到的问题 静态网站和云函数的搭 ...

  7. 【JavaScript编写计算工资小程序】【表格细边框设置】【网页设计与网站开发HTML、CSS、JavaScript实例教程】【第十章】JavaScript基础——【传智播客】实验作业题【实验5】

    以下为本人大一选修课<网页设计与网站开发>的实验作业题,均为本人原创,分享给大家.如有不足之处欢迎指出. 1.题目: 实验5.新建页面test5.html,利用JavaScript编写如下 ...

  8. 个人所得税计算器 微信小程序开发 计算差值方法

    个人所得税计算器   微信小程序开发  计算差值方法 1.自己做的demo,查看差值:扫一扫 扫一扫 2.效果: 3.官网API: https://developers.weixin.qq.com/m ...

  9. 微信小程序开发---使用云托管,云开发,配置云函数

    先来介绍一下云托管和云开发,关于我自己的理解,不对的请大家指正:云托管是微信开发的一个小程序的管理平台,可以实时监控小程序的一些数据访问情况,它的便捷性就在于我们不用在去安装配置服务器,域名等,它直接 ...

最新文章

  1. Java一行一行的读文件和简单的写文件
  2. Eclipse使用————生成Get/Set、toString快捷键(不使用鼠标)
  3. 中科院信工所经验_保研经验分享:实力+经验+运气=保研成功
  4. 使用Log4j进行日志操作
  5. 植保飞行器(G 题)--2021 年全国大学生电子设计竞赛
  6. MICIN、LINEIN、LINEOUT、HPOUT、麦克风、耳机、扬声器一次说明白
  7. ibm量子云计算机,IBM量子云的16个量子比特全被纠缠起来了!
  8. Java 在Word指定段落/文本位置插入分页符
  9. 2021年N1叉车司机找解析及N1叉车司机试题及解析
  10. python《pandas入门》实现Excel数据字段的拆分
  11. 高级端点保护 (AEP) 简介
  12. 【Arduino】坐姿检测器
  13. Julia +VS code windows下配置
  14. 56、基于51单片机 WiFi温湿度加四个继电器报警
  15. 怎么将计算机桌面全部变成英文翻译,Word2010怎样将英文翻译成中文
  16. 统计学5大基本概念,建议收藏!(文末送书)
  17. 为什么说国际站要做长尾词排名?
  18. Esp8266进阶之路17 esp8266自研的快速上电开关五次 (开-关为一次) ,无需按键触发则8266进去一键配网模式。(附带Demo)
  19. GetDocument()使用
  20. 台式电脑回收站删除的文件怎么找回

热门文章

  1. android 使用NDK
  2. MySQL DELETE:删除数据
  3. MySQL配置教程(图解版)
  4. 【MongoDB】docker mongo 数据备份
  5. 1110 Complete Binary Tree (25 分)【难度: 一般 / 知识点: 判断完全二叉树】
  6. 2.3.6 生产者消费者问题
  7. C++中类的组合和继承关系
  8. Spring整合ActiveMQ接收消息
  9. jQuery的Accordion插件
  10. C#通过Outlook发送邮件