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

文章目录

  • 引言
  • 一、阿里云函数计算是什么?
    • 开发流程
    • 函数计算的触发调用
    • 函数计算运行实例的生命周期
  • 二、示例应用的架构及简介
  • 三、具体开发部署步骤所遇到的坑和~~避坑指南~~
    • 坑1. 超大依赖包的部署
    • 坑2. Python 依赖包所需的额外工具库的正确打开方式
  • 总结
    • 参考资源


引言

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

开发流程

阿里云函数计算的工作流程请参见下图:
基于阿里云函数计算实现需要用到超大依赖包的 Python 无服务器计算_第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 请求处理方式来开发该函数计算应用。

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

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

你可能感兴趣的:(阿里云,python,serverless)