基于阿里云函数计算实现需要用到超大依赖包的 Python 无服务器计算

本文介绍了如何在阿里云函数计算环境中处理超大Python依赖包,如PyTorch和librosa。文章详细阐述了在阿里云函数计算中遇到的挑战,包括超大依赖包部署限制和Python依赖包所需的额外工具库的安装问题。通过使用Nas文件系统、调整部署策略以及修改Python源代码来解决这些问题,为开发者提供了避坑指南。
摘要由CSDN通过智能技术生成


引言

无服务器计算(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】

开发流程

阿里云函数计算的工作流程请参见下图:
图1. 阿里云函数计算工作流程
图源【2】:https://help-static-aliyun-doc.aliyuncs.com/assets/img/zh-CN/0087187951/p96487.png

从上述流程及步骤可以看出,阿里云函数计算有三种开发部署模式。【2】【3】

  1. 开发者通过阿里云函数计算控制台的网页版界面在线编写或上传已写好的代码;
  2. 离线先在本地搭建的 Serverless Devs 环境里编写代码并部署到阿里云函数计算环境;
  3. 在代码中通过阿里云函数计算 API 或 SDK 直接部署。

第一种方式适用于轻量级代码的函数计算部署,在代码层级较多、所需要的依赖包体积较大等情形下,就需要通过第二和第三种方式来部署了。第三种方式适用于需要通过自动化方式来部署函数计算方案的方式,使用方式较为复杂,属于高端技能。本文将基于第一种和第二种方式来部署示例 Python 应用,帮助快速了解函数计算的开发部署方式。

函数计算的触发调用

在完成应用代码的上传部署后,理论上就已经完成了函数计算应用的部署。如果代码没有 bug,应用已经处于上线可触发调用的状态。此时通过阿里云函数计算所提供的调用方式,即可激活函数计算应用并返回执行结果。

如果代码有 bug,就需要根据阿里云函数计算接口所返回到错误信息进行 debug。例如由于不熟悉无服务器应用开发的特点,按照常规方式写代码,虽然在普通云服务器上部署可以正常运行,但部署到阿里云函数计算环境后出现错误。

阿里云函数计算目前提供的函数调用方式主要有两种,HTTP函数及事件函数,其相应的函数调用触发处理方式如下。【3】【4】【5】

  1. HTTP请求处理程序(HTTP Request Handler),通过函数计算的 URI 发起 HTTP 请求或 WebSocket 请求来对函数进行调用,该方式比较接近于常见的 Web 服务 API。
  2. 事件请求处理程序(Event Handler),通过指定触发函数的事件,在事件发生并满足设定条件时,由阿里云函数计算环境自动触发函数调用,该方式适用于处理除HTTP触发器以外的各种事件源触发的事件请求,例如难以主动预测到的数据库、网络存储事件等。

本文出于简化示例的复杂性,采用比较直观的 HTTP 请求处理方式来开发该函数计算应用。

函数计算运行实例的生命周期

阿里云函数计算环境可以动态处理请求,并弹性安排计算资源,依据请求的并发情况动态创建函数计算运行实例;并在每个函数计算运行时实例长时间没有新增请求时,销毁函数计算运行实例,以节省资源和计费。下图展示了函数计算运行实例的生命周期。

图2. 函数计算运行实例的生命周期

图源:本文原创

二、示例应用的架构及简介

本文的示例应用为一个基于 PyTorch 深度学习框架和 librosa 音频处理库的音频处理应用,可以用于对音频进行后期处理、音频分类、音乐信息检索等方面。

示例应用的主要架构如下图:

图3. 示例应用架构
图源:本文原创

从示例应用的架构图可以看出,本应用符合无状态服务(stateless service)的定义——对单次请求的处理,不依赖其他请求,也就是说,处理一次请求所需的全部信息,要么都包含在这个请求里,要么可以从外部获取到(比如说数据库),服务器本身不存储任何信息。也因此非常适合采用函数计算的方式来实现本示例应用,在调用过后函数计算运行

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值