关于阿里云:深度学习-如何开发部署-Serverless-应用

42次阅读

共计 7586 个字符,预计需要花费 19 分钟才能阅读完成。

作者:阿里云云原生

本文将具体介绍如何开发和部署 Serverless 利用,并通过阿里云函数计算控制台与开发者工具 Serverless Devs 进行利用的初始化、部署;最初分享利用的调试,通过迷信公布、可观测性等介绍利用的部署和运维总结,进而实现从利用初始化到调试、公布、运维根底流程、外围步骤的摸索。

如何开发、部署 Serverless 利用

通过控制台进行函数创立

上面咱们将基于 Serverless 架构,在 FaaS 平台上实现 Hello world 的输入,根本步骤可分为:

1)注册账号,并登录;

2)找到对应的 FaaS 产品:阿里云的函数计算;

3)单击“创立函数”按钮,进行函数的创立;

4)配置函数,包含函数名称、运行时(能够认为是要应用的编程语言,或者要应用的编程环境等);

5)实现创立,并测试。

以阿里云函数计算为例,当注册并登录阿里云账号之后,须要找到函数计算产品,并单击进入产品首页,如图所示。

阿里云函数计算产品首页

抉择左侧的“服务及函数”,并进行服务的创立,如图所示。

阿里云函数计算创立服务页面

而后进行函数的创立,如图所示。

阿里云函数计算创立函数页面

绝对于其余的云平台,在阿里云函数计算平台,咱们不仅要为行将创立的函数设置函数名称、抉择运行时等,还须要设置该函数所在的服务。在阿里云函数计算的体系中,引入服务的概念会带来肯定的益处。

  • 相关联的函数能够放在一个服务下进行分类,这种分类实际上比标签分类更直观明了。
  • 相关联的函数在同一个服务下共享肯定的配置,例如 VPC 配置、NAS 配置,甚至某些日志仓库的配置等。
  • 通过服务,咱们能够很好地做函数环境的划分,例如对于一个相册我的项目,该我的项目可能存在线上环境、测试环境、开发环境,那么能够在服务层面做辨别,即能够设定 album-release、album-test、album-dev 三个服务,进而做环境的隔离。
  • 通过服务,咱们能够很好地收纳函数。如果我的项目比拟大,可能会产生很多函数,对立放在同一层级会显得十分凌乱,这时就能够通过服务进行无效的收纳。

实现函数的创立之后,咱们能够进行代码的编辑。阿里云函数计算反对从对象存储上传代码,反对间接上传代码包,以及在线编辑。除此之外,阿里云函数计算还反对间接上传文件夹,如图所示。

保留代码之后,能够单击“执行”按钮进行函数的触发、测试。

能够看到,零碎曾经输入相干日志:Hello world。至此,一个非常简单的函数就创立胜利了。

通过工具进行函数创立与部署

通过 Serverless 开发者工具入门 Serverless 利用开发、部署、运维是十分不便的,咱们以 Serverless Devs 为例介绍阿里云函数计算利用的部署,并对工具侧的函数创立、部署以及其余相干性能进行摸索。

Serverless Devs 是一个开源的 Serverless 开发者平台,致力于为开发者提供弱小的工具链。通过该平台,开发者能够一键体验多云 Serverless 产品,极速部署 Serverless 我的项目。依照官网目前的形容,Serverless Devs 曾经反对包含 AWS Lanbda、阿里云函数计算、百度智能云函数计算、腾讯云云函数、华为云函数工作流等在内的多个云厂商的 Serverless 相干产品。

上面通过 Serverless Devs 开发者工具,以阿里云函数计算为例进行实际,摸索如何创立、部署 Serverless 利用。

1)装置 Serverless Devs 开发者工具(执行 npm install -g @Serverless-devs/ s 命令)。

2)设置阿里云凭证信息(执行 s config add –AccessKeyID AccessKeyID –AccessKeySecret AccessKeySecret –AccountID AccountID 命令)。

3)建设模板我的项目(执行 s init node.js12-http -d fc-hello-world-demo 命令),初始化过程如图所示。

通过 Serverless Devs 创立我的项目图

4)进入我的项目目录(执行 cd fc-hello-world-demo 命令),并部署(执行 s deploy 命令),部署后的后果如图所示。

通过 Serverless Devs 部署我的项目

我的项目部署胜利之后,能够进行更多操作,具体如下。

触发函数(执行 s invoke 命令),后果如图所示。

通过 Serverless Devs 触发函数

查看线上函数详情(执行 s info 命令),后果如图所示。

通过 Serverless Devs 查看函数详情

Serverless Devs 还领有比较完善的桌面客户端。开发者能够通过桌面客户端进行利用的创立、治理以及相干配套性能的应用,示例如下。

查看利用列表,并疾速创立利用,如图所示。

通过 Serverless Devs 桌面客户端查看利用列表

创立利用之后,能够进行利用的治理。下图是 Serverless Devs 桌面客户端治理利用界面。

通过 Serverless Devs 桌面客户端治理利用

其余配套性能的应用如下。如图所示为一键压测函数性能。

通过 Serverless Devs 桌面客户端一键压测函数性能

一键对函数资源进行调试,如图所示。

通过 Serverless Devs 桌面客户端一键对函数资源进行调试

一键查看函数多维度指标信息,如图所示。

通过 Serverless Devs 桌面客户端一键查看函数多维度指标信息

除此之外,Serverless Devs 还领有较为不便的 Yaml 可视化配置性能,如下图所示。

通过 Serverless Devs 桌面客户端进行 Yaml 可视化配置

如何对 Serverless 利用进行调试

在利用开发过程中,或者利用开发实现后,当执行后果不合乎预期时,通常要进行肯定的调试。然而在 Serverless 架构下,调试往往会受到极大的考验,尤其在受环境因素限度时,通常会呈现这样的状况:所开发的利用在本地能够衰弱、合乎预期地运行,然而在 FaaS 平台上则有一些不可预测的问题;或者在一些非凡环境下,本地没有方法模仿线上环境,难以进行利用的调试。Serverless 利用的调试始终备受诟病,然而各个云厂商并没有因而放弃在调试方向上的深刻摸索,上面咱们介绍几种形式。

在线调试

  • 简略调试

所谓的简略调试,就是在控制台进行调试。以阿里云函数计算为例,能够在控制台通过“代码执行”按钮进行根本的调试,如下图所示。

函数计算代码编辑页面

必要的时候也能够通过设置 Event 来模仿一些事件。

阿里云函数计算事件页面

在线调试的益处是能够应用一些线上环境进行代码的测试。当线上环境领有 VPC 等资源时,在本地环境是很难进行调试的。

  • 断点调试

除了简略的在线调试之外,局部云厂商还反对断点调试,例如阿里云函数计算的近程调试。咱们以阿里云函数计算近程调试为例,能够实现通过控制台进行函数的在线调试。当创立好函数之后,能够抉择近程调试,并单击“开启调试”按钮,如图所示。

函数计算近程调试页面

开启调试之后,稍等片刻,零碎将会进入近程调试界面,如图所示。

函数计算近程调试开始页面当呈现图

当呈现下图所示界面,咱们能够进行断点调试。

函数计算近程调试断点调试页面

端云联调

在本地进行 Serverless 利用开发时,往往会波及一些线上资源,例如通过对象存储触发器触发函数执行,通过 VPC 拜访数据库等,此时线上和线下环境不统一会让线下开发、调试面临极大的挑战。Serverless Devs 开发者工具通过搭建 Proxy 辅助函数的办法将线上和线下资源买通,能够疾速帮忙开发者在本地进行利用的开发与调试,这种调试形式称为端云联调。

如下图所示,Serverless Devs 开发者工具会依据 Yaml 配置文件,创立辅助服务和辅助函数,并通过辅助服务和辅助函数实现线上和线下资源买通,以及残缺的端云联调。

Serverless Devs 端云联调原理示意图

Serverless Devs 开发者工具会依据 Yaml 配置文件的内容,创立辅助服务和辅助函数(辅助服务和 Yaml 中所申明的业务服务配置是统一的)。

通过触发器(包含通过 SDK、API、s proxied invoke 命令,或者其余触发器)触发辅助函数(函数计算 C),申请流量回到本地调试实例(本地环境 A),这时本地调试实例(本地函数执行环境容器)收到的 event 和 context 是实在来自线上的。

本地调试实例(本地环境 A)能够间接拜访以下内容:

  • VPC 内网资源,比方 RDS、Kafka 内网地址等;
  • 一些云服务的内网地址;
  • 硬盘挂载服务(间接拜访 NAS)。

端云联调流程如下:

1)执行 s proxied setup 命令筹备端云联调所需的辅助资源以及本地环境;

2)对于无触发器的一般事件函数或者 HTTP 触发器,筹备工作实现后,启动另一个新的终端,切换到该我的项目门路下,执行 s proxied invoke 命令调用本地函数;

3)实现调试工作后,执行 s proxied cleanup 命令清理端云联调所需的辅助资源以及本地环境。

除了通过命令应用端云联调性能外,咱们也能够在 VSCode 开发者工具中应用端云联调性能,如图所示。

在 VSCode 中应用端云联调性能

近程调试

端云联调在本地除了有一个通道服务容器外,还有一个函数计算容器,用来执行本地函数;近程辅助函数只是单纯将近程流量发送到本地。在理论调试过程中,须要登录到实例进行我的项目调试,此时能够抉择应用近程调试。

相比于端云联调,近程调试在本地只有一个通道服务容器,执行过程全副依赖线上;近程函数将执行后果返回。近程调试整体架构简图如图所示。

除了通过下面近程调试架构简图所示的通道服务登录线上环境进行代码调试或问题定位之外,局部云厂商还提供了间接登录实例进行代码调试的性能。以 Serverless Devs 为例,当应用阿里云函数计算时,咱们就能够间接通过 instance 命令进行线上实例登录。

只管实例登录命令曾经提供了便捷的登录体验,能帮忙用户解决简单场景下的利用异样定位等问题,然而登录实例后,用户无奈间接通过函数日志、监控指标来具体定位问题,还须要借助例如 coredump、tcpdump、jmap 等工具进行问题的深刻排查。

例如,某用户发现自己的线上程序最近呈现一些函数谬误提醒,报错内容都是连贯近程某服务时超时。该用户狐疑是函数实例与远端服务的网络连接不稳固,因而想进入实例外部,剖析实例与远端服务的网络状况。此时,咱们能够依照以下步骤进行问题的排查。

1)如图所示,登录实例外部后,须要执行 apt-get update 和 apt-get install tcpdump 两条命令,进行 tcpdump 工具的装置。

实例登录与装置软件效果图

2)装置结束后,执行 tcpdump 命令,对远端服务 IP 的申请进行抓包,并将抓包后果保留在 tcpdump.cap 文件中。

3)抓包结束后,借助 OSS 命令行工具 ossutil64,将 tcpdump.cap 文件上传到本人的 OSS,而后下载到本地借助剖析工具 Wireshark 进行剖析。

本地调试

  • 命令行工具

大部分 FaaS 平台会为用户提供绝对齐备的命令行工具,如阿里云的 Funcraft,同时也有一些开源我的项目如 Serverless Framework、Serverless Devs 等反对多云厂商的 FaaS 平台。通过命令行工具进行代码调试的办法很简略。以 Serverless Devs 为例,本地调试阿里云函数计算方法为:首先确保本地领有一个函数计算的我的项目,而后在我的项目下执行调试指令,例如在 Docker 中进行调试,如上面所示。

通过命令行进行本地调试

  • 编辑器插件

以 VSCode 插件为例,下载好阿里云函数计算的 VSCode 插件,并且配置好账号信息之后,在本地新建函数,并且在打点之后进行断点调试,如图所示。

编辑器插件中进行调试

其余调试计划

  • Web 框架的本地调试

以 Python 语言 Bottle 框架为例,若在阿里云 FaaS 平台开发传统 Web 框架,能够减少如下代码:

app = bottle.default_app()

并且对 run() 办法进行条件限度(if name == ‘__main__’):

if __name__ == '__main__': 
    bottle.run(host='localhost', port=8080, debug=True)

例如:

# index.py
import bottle

@bottle.route('/hello/<name>')
def index(name): 
    return "Hello world"

app = bottle.default_app()

if __name__ == '__main__': 
    bottle.run(host='localhost', port=8080, debug=True)

和传统开发思路一样,咱们能够在本地开发并在本地进行调试。当部署到线上时,只须要在入口办法处设置 index.app,即可实现平滑的部署。

  • 本地模仿事件调试

针对非 Web 框架,能够在本地构建一个办法,例如要调试对象存储触发器,代码如下:

import jsondef handler(event, context): print(event)def test(): event = { "events": [ { "eventName": "ObjectCreated:PutObject", "eventSource": "acs:oss", "eventTime": "2017-04-21T12:46:37.000Z", "eventVersion": "1.0", "oss": { "bucket": { "arn": "acs:oss:cn-shanghai:123456789:bucketname", "name": "testbucket",
"ownerIdentity": "123456789", "virtualBucket": ""},"object": {"deltaSize": 122539,"eTag":"688A7BF4F233DC9C88A80BF985AB7329","key":"image/a.jpg","size": 122539},"ossSchemaVersion":"1.0","ruleId":"9adac8e253828f4f7c0466d941fa3db81161****"},"region":"cn-shanghai","requestParameters": {"sourceIPAddress":"140.205.***.***"},"responseElements": {"requestId":"58F9FF2D3DF792092E12044C"},"userIdentity": {"principalId":"123456789"} } ] } handler(json.dumps(event), None)if __name__ =="__main__": print(test())

这样通过结构一个 event 对象,即可实现模仿事件触发。

通过开发者工具进行依赖装置和我的项目构建

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

阿里云函数计算对本身的线上函数环境有比拟粗疏的形容,提供了相应的文档,例如应用 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)用已有的开发者工具进行依赖的装置,如图所示:

通过工具装置依赖示意图

以 Serverless Devs 开发者工具以及阿里云函数计算产品为例,开发者只须要依照语言习惯筹备对应语言的相干依赖安装文件即可,例如 Python 语言的 requirements.txt,Node.js 语言的 package.json 等。而后在以后我的项目下,执行 s build –use-docker 命令即可实现与阿里云函数计算平台线上环境统一的环境中的依赖的装置。以 Python 我的项目为例,开发者只须要在我的项目目录下实现如下操作。

  1. 开发源代码;
  2. 执行 s build –use-docker 命令之后,主动依据 requirements.txt 文件下载对应的依赖到本地,并且和源码一起组成交付物;
  3. 执行 s deploy 命令将整个交付物打包,创立函数,同时设置好依赖包的环境变量,让函数能够间接输出对应的代码依赖包。

3)目前,局部云厂商的 FaaS 平台控制台反对 WebIDE,阿里云的 WebIDE 领有实现命令行程序的能力,所以也能够在控制台的 WebIDE 中间接进行依赖的装置。在线装置依赖示意图如图所示。

在线装置依赖示意图

新书举荐

阿里云、蚂蚁团体的 4 位专家刘宇、田初东、卢萌凯、王仁达(排名不分先后)零碎梳理阿里在 Serverless 架构下的 AI 教训,联袂推出新书 《Serverless 架构下的 AI 利用开发:入门、实战与性能优化》

本书是对于 Serverless 架构下机器学习实战的技术书,咱们心愿通过简单明了的语言、实在的案例,以及凋谢的源代码,为读者介绍 Serverless 架构与机器学习相干的基础知识,帮忙读者在 Serverless 架构下开发、上线机器学习我的项目。

作者介绍:

** 刘宇,阿里云 Serverless 产品经理
田初东,蚂蚁团体算法工程师
卢萌凯,阿里云 Serverless 高级解决方案架构师
王仁达,阿里云 Serverless 工具链技术负责人 **

正文完
 0