Serverless架构下的AI应用开发:入门、实战与性能优化
上QQ阅读APP看书,第一时间看更新

2.4.3 通过开发者工具进行依赖安装和项目构建

Serverless架构下的应用开发和传统架构下的应用开发有一个比较大的区别是二者所关注的内容维度是不同的,例如理想状态下的前者并不需要人们关注服务器等底层资源。但是在当今的Serverless发展阶段,Serverless架构下的应用开发真的不需要人们对服务器等额外关注吗?其实不是的,虽然Serverless架构强调的是Noserver心智,但是在实际生产中,有很多依赖等是无法跨平台使用的,例如Python语言中的某些依赖需要进行二进制编译,和操作系统、软件环境等有比较大的关系,所以项目中如果引入这类依赖,需要在和函数计算平台线上环境一致的环境中进行依赖的安装、代码的打包或项目的部署。

目前,各个云厂商均对自身的线上函数环境进行了比较细致的描述,例如AWS Lambda有专门针对不同运行时进行描述的文档,如图2-51所示。

图2-51 AWS Lambda对运行时环境细节的描述

同样,阿里云函数计算也有类似的文档与描述,例如使用C、C++、Go编译的可执行文件,需要与函数计算的运行环境兼容。函数计算的Python运行环境如下。

·Linux内核版本:Linux 4.4.24-2.al7.x86_64。

·Docker基础镜像:docker pull python:2.7 ; docker pull python:3.6。

但是,在实际应用开发过程中,依赖的打包依旧是让一众开发者头疼的事情。他们在很多Serverless应用开发过程中都会面临类似的挑战:项目在本地可以正常运行,一发布到线上就找不到某个依赖,但是实际上依赖是存在的,此时问题定位就成了非常困难的事情。

目前来看,为Serverless应用安装依赖或者项目构建的方法通常有3种。

1)在本地创建项目之后,自行根据云厂商提供的环境数据进行线上环境搭建,进而进行依赖的安装。这种方法相对来说自主可控,但是难度非常大,操作较为烦琐。

2)用已有的开发者工具进行依赖的安装,如图2-52所示。以Serverless Devs开发者工具以及阿里云函数计算产品为例,开发者只需要按照语言习惯准备对应语言的相关依赖安装文件即可,例如Python语言的requirements.txt,Node.js语言的package.json等。然后在当前项目下,执行s build--use-docker命令即可完成与阿里云函数计算平台线上环境一致的环境中的依赖的安装。以Python项目为例,开发者只需要在项目目录下完成如下操作。

·开发源代码;

·执行s build–use-docker命令之后,自动根据requirements.txt文件下载对应的依赖到本地,并且和源码一起组成交付物;

·执行s deploy命令将整个交付物打包,创建函数,同时设置好依赖包的环境变量,让函数可以直接输入对应的代码依赖包。

图2-52 通过工具安装依赖示意图

3)目前,部分云厂商的FaaS平台控制台支持WebIDE,且阿里云、腾讯云等云厂商的WebIDE拥有实现命令行程序的能力,所以也可以在控制台的WebIDE中直接进行依赖的安装。在线安装依赖示意图如图2-53所示。

图2-53 在线安装依赖示意图