无服务器计算(Serverless)是新近比较火的云计算范式。通过采用无服务器计算,开发者可以无需关心基础设施(如数据库、服务器等等),只专注于应用的业务逻辑。这种新的云计算范式极大地简化了云计算的部署和运维,尤其适合缺乏部署运维能力的中小企业。
Serverless 与 FaaS(函数即服务)通常被视为可以互换的术语,但这并不准确。Serverless 是一种抽象层次更高的架构模式,而“FaaS + BaaS”只是 Serverless 这种架构模式的一种实现。【1】
其中,FaaS 是一种特定类型的服务,例如 AWS Lambda、Google Cloud Functions、Azure Functions、阿里云函数计算和腾讯云云函数等等;而 BaaS(后端即服务)可以理解为其他类型的托管服务,例如数据库服务,对象存储服务和日志服务等等。【1】
本文将基于阿里云函数计算,实现一个无服务器 Python 应用,来对音频文件进行后期处理。其中将会涉及到 PyTorch 深度学习框架、librosa 音频处理库等超大依赖包在阿里云函数计算方式下的安装部署方法,特别是阿里云函数计算官方技术参考文档没有准确揭示的技术细节,以及连阿里云工单技术支持团队都毫无办法进行解答的技术难点。供大家在构建阿里云函数计算 Python 应用作为避坑指南参考。
依据阿里云帮助中心产品文档的介绍,“函数计算是事件驱动的全托管计算服务。使用函数计算,您无需采购与管理服务器等基础设施,只需编写并上传代码。函数计算为您准备好计算资源,弹性地、可靠地运行任务,并提供日志查询、性能监控和报警等功能。”【2】
借助阿里云函数计算,开发者可以快速构建任何类型的应用和服务,并且只需为任务实际消耗的资源付费。【2】
函数计算的这种灵活性及按量计费的方式,非常适合中小微企业用于实现低成本的服务。尤其适合闲时用户量几乎没有,忙时用户量峰值极大的服务模式,从而省去租用服务器和自行维护基础设施的成本负担。
可以通过以下视频快速了解阿里云函数计算:
阿里云函数计算简介视频【2】
阿里云函数计算的工作流程请参见下图:
图源【2】:https://help-static-aliyun-doc.aliyuncs.com/assets/img/zh-CN/0087187951/p96487.png
从上述流程及步骤可以看出,阿里云函数计算有三种开发部署模式。【2】【3】
第一种方式适用于轻量级代码的函数计算部署,在代码层级较多、所需要的依赖包体积较大等情形下,就需要通过第二和第三种方式来部署了。第三种方式适用于需要通过自动化方式来部署函数计算方案的方式,使用方式较为复杂,属于高端技能。本文将基于第一种和第二种方式来部署示例 Python 应用,帮助快速了解函数计算的开发部署方式。
在完成应用代码的上传部署后,理论上就已经完成了函数计算应用的部署。如果代码没有 bug,应用已经处于上线可触发调用的状态。此时通过阿里云函数计算所提供的调用方式,即可激活函数计算应用并返回执行结果。
如果代码有 bug,就需要根据阿里云函数计算接口所返回到错误信息进行 debug。例如由于不熟悉无服务器应用开发的特点,按照常规方式写代码,虽然在普通云服务器上部署可以正常运行,但部署到阿里云函数计算环境后出现错误。
阿里云函数计算目前提供的函数调用方式主要有两种,HTTP函数及事件函数,其相应的函数调用触发处理方式如下。【3】【4】【5】
本文出于简化示例的复杂性,采用比较直观的 HTTP 请求处理方式来开发该函数计算应用。
阿里云函数计算环境可以动态处理请求,并弹性安排计算资源,依据请求的并发情况动态创建函数计算运行实例;并在每个函数计算运行时实例长时间没有新增请求时,销毁函数计算运行实例,以节省资源和计费。下图展示了函数计算运行实例的生命周期。