点击下载《不同的 双11 技术:阿里巴巴经济体云原生实践》html
本文节选自《不同的 双11 技术:阿里巴巴经济体云原生实践》一书,点击上方图片便可下载!小程序
做者 | 吴天龙(木吴)阿里云函数计算技术专家segmentfault
导读:小程序是轻量级的快速迭代的移动应用,对开发者从开发到上线的效率提出了更高的要求。使用函数计算,开发者无需关心后端服务的搭建运维,只须要编写函数就可以为小程序提供稳定可靠而且弹性伸缩的服务。而且随着小程序访问量增长,函数计算可以自动快速地弹性伸缩,即便应对 双11 活动高峰也可以如丝般顺滑。
自 2017 年第一批小程序上线以来,愈来愈多的移动端应用以小程序的形式呈现。小程序拥有触手可及、用完即走的优势,这大大下降了用户的使用负担,使小程序获得了普遍的传播。在阿里巴巴,小程序也被普遍地应用在淘宝/支付宝/钉钉/高德等平台上,例现在年 双11,你们在淘宝/天猫上参加的活动,大部分都是经过小程序提供的。后端
一个小程序能够分为客户端和服务端:客户端包括界面的展现和交互逻辑;服务端则包括数据的处理和分析。安全
为了支撑大量的小程序,平台在服务端面临的挑战有:服务器
针对小程序场景,阿里云提供了完整的小程序解决方案:小程序云。资源的有效利用和弹性伸缩,是小程序云提供的核心能力之一,而这背后依托的,就是阿里云函数计算服务。函数计算是一个全托管 Serverless 计算服务,让开发者无需管理服务器等基础设施,只需编写和上传代码,就可以构建可靠、弹性、安全的服务。下面就以 双11 小程序场景为例,解析函数计算在弹性伸缩上的核心技术。架构
让咱们先来看一下淘宝小程序的技术架构是什么样的:app
利用小程序云提供的丰富的扩展能力,用户能够方便地构建完整的电商应用:less
能够看到,函数是整个小程序的业务逻辑的核心,它将云端的基础能力组合串联起来,对客户端提供服务能力。若是函数能力成为瓶颈,将影响整个小程序的运行。运维
在这样的架构下,要支撑大量的小程序,须要函数可以作到:
其中几个核心组件的功能以下:
基于这个架构,函数计算是如何解决上面提到的小程序平台的挑战呢?接下来咱们逐一分析。
当用户建立函数上传代码时,函数计算只是将代码包保存到 OSS,并无分配计算资源,所以函数计算能够支撑海量的小程序。
当函数第一次被调用时,函数计算会分配计算资源、下载函数代码、加载并执行代码。这一过程称为冷启动,函数计算经过大量的优化,将系统侧的冷启动时间优化到 200ms 之内。所以即便是冷的小程序,在初次调用时也可以作到快速的即开即用。
当小程序持续调用过程当中,负载逐渐上升或者忽然升高的状况下,函数计算是如何应对的呢?
函数计算的“资源调度”模块,会精确管理每一个实例的状态,当请求到来时,它首先检查是否有空闲的实例能够服务,若是没有请求就会进入等待队列,当有空闲的实例释放出来时,请求就可以被及时处理。
同时,调度器还会在后台建立新的实例,当新的实例准备好后,也可以服务请求。在这种策略下,可以作到在负载以 2 倍的速度增加状况下,请求的 P95 延时是稳定的。优化细节能够参考咱们的博客文章。
上面是某个淘宝小程序的调用量和延时监控数据。
能够看到,在整点活动时,TPS 出现了瞬间的高峰,可是 P95 延时却没有明显的波动。这是由于函数计算在请求高峰来临时,可以快速地弹性伸缩建立新的实例,同时利用已有资源作必定的缓冲,使得整个攀升的过程可以比较平滑。
对于一些“秒杀”的场景,要求瞬间提供大量的计算资源。此时靠实时的弹性伸缩是不够的:
针对这种场景,函数计算提供了预留实例的功能。使用预留实例,用户能够为一些可预测的活动提早预留好资源,完全消除冷启动。
和传统的基于服务器的作法不一样,用户不须要按峰值来预留资源,而是能够结合预留实例和按量实例的混合模式:请求先被预留实例处理,当预留实例用满时,会自动弹性伸缩出更多的按量实例来处理请求。
因为有必定的资源基础,结合调度优化,按量实例的冷启动所产生的影响就被大大减少了。这就是利用函数计算的弹性伸缩能力,在性能和成本之间达到很好的平衡。
小程序是轻量级的快速迭代的移动应用,对小程序开发者的开发效率有很高的要求。
小程序上线后随着访问量的增长或者活动期间的访问突增,对后端服务的稳定和弹性也是一个很大的考验。函数计算上传代码便可运行,极大地提升了后端服务的开发效率;混合模式的弹性伸缩,轻松应对负载变化。这些特色使得函数计算成为支撑小程序平台的很好的选择。
对函数计算感兴趣的开发者,能够点此免费试用)!
本书亮点
“ 阿里巴巴云原生关注微服务、Serverless、容器、Service Mesh 等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,作最懂云原生开发者的技术圈。”