Serverless 架构下的 AI 应用开发

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
性能测试 PTS,5000VUM额度
函数计算FC,每月15万CU 3个月
简介: 本篇内容连载自《Serverless 架构下的 AI 应用开发:入门、实战与性能优化》。

作者:阿里云云原生


本篇内容连载自《Serverless 架构下的 AI 应用开发:入门、实战与性能优化》。


Serverless 架构与 CI/CD 工具的结合


CI/CD 是一种通过在应用开发阶段引入自动化流程以频繁向客户交付应用的方法。如图所示,CI/CD 的核心概念是持续集成持续交付持续部署


作为一个面向开发和运营团队的解决方案,CI/CD 主要针对集成新代码时所引发的问题。具体而言,CI/CD 可以让持续自动化和持续监控贯穿于应用的整个生命周期(从集成、测试阶段到交付和部署阶段)。这些关联的事务通常被统称为“CI/CD 管道”,由开发和运维团队以敏捷方式协同支持。


1.png

CI/CD 的概念与内容简图


在 Serverless 架构下,通常会有很多函数构成一个完整的功能或服务,这种比较细粒度的功能往往会给后期项目维护带来极大的不便,包括但不限于函数管理、项目的构建、发布层面等的不便。此时在 Serverless 架构中,CI/CD 就显得尤为重要。更加科学、安全的持续集成和部署过程不仅会让整体的业务流程更加规范,也会在一定程度上降低人为操作、手工集成部署所产生错误的概率,同时也会大规模减轻运维人员的工作负担。


如果想要通过 CI/CD 平台,科学且方便地进行 Serverless 应用的持续集成、交付和部署,通常情况下我们需要借助相应的开发者工具,例如 Serverless Framework、Serverless Devs 等。Serverless开发者工具配置到 CI/CD 平台的流程可以简化为下图。


2.png

Serverless开发者工具配置到 CI/CD 平台的流程


与 GitHub Action 的集成


在 GitHub Action 的 Yaml 文件中,增加 Serverless Devs 相关下载、配置以及命令执行相关内容。例如,在 GitHub 仓库中创建文件.github/workflows/publish.yml,文件内容如下:


name: Serverless Devs Project CI/CD
on: 
   push: 
      branches: [ master ]
jobs: 
    serverless-devs-cd: 
        runs-on: ubuntu-latest 
        steps:
          - uses: actions/checkout@v2 
          - uses: actions/setup-node@v2 
              with: 
                  node-version: 12 
                  registry-url: https://registry.npmjs.org/ 
          - run: npm install
          - run: npm install -g @serverless-devs/s
          - run: s config add --AccountID ${{secrets.AccountID}} --AccessKeyID
             ${{secrets.AccessKeyID}} --AccessKeySecret ${{secrets.AccessKeySecret}} -a default
          - run: s deploy


与 GitHub Action 集成主要包括以下几部分内容:


  • 通过 NPM 安装最新版本的 Serverless Devs 开发者工具:


run: npm install -g @serverless-devs/s


  • 通过 config 命令进行密钥等信息的配置:


run: s config add --AccountID ${{secrets.AccountID}} --AccessKeyID ${{secrets.
    AccessKeyID}} --AccessKeySecret ${{secrets.AccessKeySecret}} -a default


  • 执行某些命令,例如通过 deploy 命令进行项目的部署,或者通过 build 等命令进行项目的构建:


run: s deploy


关于密钥的配置:密钥信息是通过${{secrets.*}}获取的,此时,需要将所需要的密钥和对应的 Key 配置到 GitHub Secrets 中,例如在上面的案例中,需要 AccountID、AccessKeyID、AccessKeySecret 三个密钥的 Key 就可以配置相关内容。找到 GitHub Secrets 页面,如图所示。


3.png

GitHub Secrets 页面


创建和配置密钥信息,如图所示。


4.png

创建和配置密钥信息页面


此处配置了 3 对密钥,如图所示。


5.png

GitHub 仓库配置密钥结果页面


与 Gitee Go 的集成


在开启 Gitee Go 的服务之后,在流水线的 Yaml 文件中,可以增加 Serverless Devs 的相关下载、配置以及命令执行相关内容。


例如,在 GitHub 仓库中创建文件.github/workflows/publish.yml,文件内容如下:


name: serverless-devs
displayName: 'Serverless Devs Project CI/CD'
triggers:                                     #流水线触发器配置
   push:
       - matchType: PRECISE
           branch: master
commitMessage: ''
stages:
    - stage:
            name: deploy-stage
            displayName: 'Deploy Stage'
            failFast: false
            steps:                            #构建步骤配置
               - step: npmbuild@1             #采用NPM编译环境
                 name: deploy-step
                 displayName: 'Deploy Step'
                 inputs:                      #构建输入参数设定
                     nodeVersion: 14.15       #指定 node 环境版本为 14.15
                     goals: |                 #安装依赖,配置相关主题、部署参数并发布部署
                     node -v
                     npm -v
                     npm install -g @serverless-devs/s
                     s co nfig add --AccountID $ACCOUNTID --AccessKeyID $ACCESSKEYID --AccessKeySecret $ACCESSKEYSECRET -a default
                     s deploy


与 GitHub Action 集成的流程类似,与 Gitee Go 集成主要包括以下几部分内容。


  • 通过 NPM 安装最新版本的 Serverless Devs 开发者工具:


npm install -g @serverless-devs/s


  • 通过 config 命令进行密钥等信息的配置:


s config add --AccountID $ACCOUNTID --AccessKeyID $ACCESSKEYID --AccessKeySecret 
    $ACCESSKEYSECRET -a default


  • 执行某些命令,例如通过 deploy 命令进行项目的部署,或者通过 build 等命令进行项目的构建:


s deploy


关于密钥的配置:密钥信息是通过$*获取的,此时将所需的密钥和对应的 Key 配置到 Gitee 的环境变量管理中,例如在上面的案例中,需要 AccountID、AccessKeyID、AccessKeySecret 三个密钥的 Key 就可以配置相关内容。


找到 Gitee 的环境变量管理页面,如图所示。


6.png

Gitee 的环境变量管理页面


创建和配置密钥信息,如图所示。


7.png

创建和配置密钥信息页面


此处配置了 3 对密钥,如图所示。


8.png

Gitee 仓库完成密钥配置页面


与 Jenkins 的集成


在将 Serverless Devs 集成到 Jenkins 之前,需要先基于 Jenkins 官网安装并运行 Jenkins。本地启动 Jenkins,通过浏览器进入并配置完成基础设置,之后新增凭据设置,如下图所示。


浏览器链接:

http://localhost:8080


9.png

Jenkins 凭据设置页面


可以根据需要,增加密钥信息。以阿里云为例,新增 3 个全局凭据:


  • jenkins-alicloud-account-id : 阿里云 accountId
  • jenkins-alicloud-access-key-id : 阿里云 accessKeyId
  • jenkins-alicloud-access-key-secret : 阿里云 accessKeySecret 


此时,可以对自身的 Serverless Devs 项目进行完善。创建文件 Jenkinsfile:


pipeline { 
    agent { 
        docker { 
            image 'maven:3.3-jdk-8' 
        } 
     }
     environment { 
         ALICLOUD_ACCESS = 'default' 
         ALICLOUD_ACCOUNT_ID = credentials('jenkins-alicloud-account-id') 
         ALICLOUD_ACCESS_KEY_ID = credentials('jenkins-alicloud-access-key-id') 
         ALICLOUD_ACCESS_KEY_SECRET = credentials('jenkins-alicloud-access-key-secret') 
     } 
     stages { 
         stage('Setup') { 
             steps { 
                 sh 'scripts/setup.sh' 
             } 
        } 
    }
}


与 Jenkins 集成主要内容包括以下两部分:


  • environment 部分:主要是根据上面步骤配置的密钥信息,进行密钥的处理。
  • stages 部分:包括 sh 'scripts/setup.sh'部分,即运行 scripts/setup.sh 文件,进行相关内容的准备和配置。 


准备 scripts/setup.sh 文件,只需要在项目下创建该文件即可。


#!/usr/bin/env bash
echo $(pwd)
curl -o- -L http://cli.so/install.sh | bash
source ~/.bashrc
echo $ALICLOUD_ACCOUNT_ID
s config add --AccountID $ALICLOUD_ACCOUNT_ID --AccessKeyID $ALICLOUD_ACCESS_KEY_
     ID --AccessKeySecret $ALICLOUD_ACCESS_KEY_SECRET -a $ALICLOUD_ACCESS
(cd code && mvn package && echo $(pwd))
s deploy -y --use-local --access $ALICLOUD_ACCESS


在该文件中,主要包括以下几个部分:


  • 安装最新版本的 Serverless Devs 开发者工具:


curl -o- -L http://cli.so/install.sh | bash


  • 通过 config 命令进行密钥等信息的配置:


s config add --AccountID $ALICLOUD_ACCOUNT_ID --AccessKeyID $ALICLOUD_ACCESS_
    KEY_ID --AccessKeySecret $ALICLOUD_ACCESS_KEY_SECRET -a $ALICLOUD_ACCESS


  • 执行某些命令,例如通过 deploy 命令进行项目的部署,或者通过 build 等命令进行项目构建:


s deploy -y --use-local --access $ALICLOUD_ACCESS


完成密钥配置之后,可以创建一个 Jenkins 流水线。该流水线的源是目标 GitHub地址。接下来,就可以开始运行 Jenkins 流水线,运行结束后可得到相关的结果。


与云效的集成


在云效中,可以直接选择 Serverless Devs 开发者工具,并在自定义命令中输入以下内容:


# input your command here
npm install -g @serverless-devs/s
s config add --AccountID ${ACCOUNTID} --AccessKeyID ${ACCESSKEYID} --AccessKeySecret 
    ${ACCESSKEYSECRET} -a default
s deploy


与 GitHub Action、Gitee Go 以及 Jenkins 的配置类似,与云效集成同样主要包括 3 部分。


  • 安装最新版本的 Serverless Devs 开发者工具:


npm install -g @serverless-devs/s


  • 通过 config 命令进行密钥等信息的配置:


s config add --AccountID ${ACCOUNTID} --AccessKeyID
    ${ACCESSKEYID} --AccessKeySecret


  • 执行某些命令,例如通过 deploy 命令进行项目的部署,或者通过 build 等命令进行项目的构建:


s deploy -y


效果如图所示。


10.png

云效命令配置页面


由于在命令中引用了 3 个重要的环境变量:ACCOUNTID、 ACCESSKEYID、 ACCESSKEYSECRET,因此还需要在环境变量中增加图所示的类似内容。


11.png

环境变量配置页面


CI/CD 平台集成


总结通过上面几个案例不难发现,在做自动化发布时,最核心的 3 个流程如下。


  • 下载工具:命令为 npm install -g @Serverless-devs/s。
  • 配置密钥:命令为s config add --AccountID $ACCOUNTID --AccessKeyID $ACCESSKEYID --AccessKeySecret $ACCESSKEYSECRET -a default。
  • 项目部署:命令为s deploy。 


虽然只是以 GitHub Action、Gitee Go、Jenkins、云效几个工具作为案例,实际上无论哪个工具与 CI/CD 平台集成,上述 3 个核心流程都不会发生本质变化。另外,上面所列举的流程更多是在做自动化发布,在发布之前有时还需要进行一些测试和重新构建,以便根据具体的实际需要进行适当的完善。


综上所述,如果想非常简单、快速、科学地完成 Serverless 应用的 CI/CD 建设,一个完善的开发者工具是必不可少的。


Serverless Devs 是一款多云开发者工具。我们可以通过该工具非常简单、快速、方便地部署 AWS、阿里云、腾讯云等多个云厂商的函数计算等相关服务。同时,Serverless Devs 也是一个开源项目,便于用户随时随地贡献组件、应用。


Serverless 应用的可观测性


Serverless 应用的可观测性被很多用户所关注。可观测性是通过外部表现判断系统内部状态的方式。在应用开发中,可观测性有助于判断系统内部的健康状况,在系统出现问题时,帮助定位问题、排查问题、分析问题;在系统平稳运行时,帮助评估风险,预测可能出现的问题。


在 Serverless 应用开发中,如果函数的并发度持续升高,很可能是业务推广团队业务规模迅速扩张。为了避免达到并发度限制而触发流控,开发者就需要提前提高并发度。


以阿里云函数计算为例,阿里云函数计算在可观测性层面提供了多种维度,包括 Logging、Metrics 以及 Tracing 等。如图所示:


12.png

函数计算可观测性整体图表


在控制台监控中心,我们可以查看整体的 Metrics、服务级 Metrics 以及每个函数的 Metrics,还可以看到当前函数计算的请求记录。


13.png

函数计算的请求记录


根据不同的请求记录,我们还可以查看函数计算的详细信息。


14.png

函数计算的请求详情


除了在控制台的监控中心查看函数的日志等信息,我们还可以在函数详情页面看到函数计算的详细日志信息,


15.png

函数计算的日志信息


还可以看到 Tracing 相关信息,如下图所示。


16.png

函数计算的 Tracing 相关信息




17.png


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


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

相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
1月前
|
人工智能 运维 Serverless
低成本 Serverless AI 检索介绍和实验
本文介绍了低成本Serverless AI检索技术,分为四部分:1) AI检索介绍,通过电商客服案例展示AI检索的应用和优势;2) 表格存储介绍,详细解释了表格存储的结构化数据处理能力及其在AI检索中的作用;3) 实验:RAG,通过具体实验演示基于表格存储的RAG流程及效果;4) 总结,强调向量检索、易用性和丰富的接口特性。整体内容展示了如何利用Serverless架构实现高效、低成本的AI检索解决方案。
|
1月前
|
人工智能 运维 Serverless
云端问道8期方案教学-基于Serverless计算快速构建AI应用开发
本文介绍了基于Serverless计算快速构建AI应用开发的技术和实践。内容涵盖四个方面:1) Serverless技术价值,包括其发展趋势和优势;2) Serverless函数计算与AI的结合,探讨AIGC应用场景及企业面临的挑战;3) Serverless函数计算AIGC应用方案,提供一键部署、模型托管等功能;4) 业务初期如何低门槛使用,介绍新用户免费额度和优惠活动。通过这些内容,帮助企业和开发者更高效地利用Serverless架构进行AI应用开发。
|
1月前
|
负载均衡 Serverless 持续交付
云端问道9期实践教学-省心省钱的云上Serverless高可用架构
详细介绍了云上Serverless高可用架构的一键部署流程
58 10
|
1月前
|
弹性计算 运维 网络协议
卓越效能,极简运维,Serverless高可用架构
本文介绍了Serverless高可用架构方案,当企业面对日益增长的用户访问量和复杂的业务需求时如何实现更高的灵活性、更低的成本和更强的稳定性。
|
1月前
|
人工智能 Cloud Native Serverless
Serverless Devs 官网全新升级,Serverless+AI 重磅来袭
Serverless Devs 官网迎来全新升级,主站以 AI 应用开发的叙事透出项目特性和解决方案。应用中心(Registry)将各类热门 AI 应用模版、实用 AI 工具以及 AI 工作流等呈现给用户。本次升级主题为“一站式 AI/函数/应用开发”,希望为开发者提供更加便利的应用模版搜索和展示服务,本文将对本次升级的三大看点进行整理,欢迎您来体验!
|
1月前
|
监控 Serverless 测试技术
云端问道9期方案教学-省心省钱的云上Serverless高可用架构
本文介绍了省心省钱的云上Serverless高可用架构,主要分为两个部分:1. Serverless的发展历程、特点及高可用架构;2. SAE(Serverless Application Engine)产品介绍。Serverless作为一种云计算模式,让用户无需管理底层基础设施,自动弹性扩展资源,按需付费,极大提高了资源利用率和业务灵活性。SAE作为Serverless计算服务,提供了简便的应用部署、运维自动化、丰富的弹性策略和可观测性等功能,帮助企业降低运营成本、提升研发效率。通过极氪汽车、南瓜电影等客户案例展示了SAE在实际应用中的优势。
|
2月前
|
人工智能 运维 Devops
CAP:Serverless + AI 让应用开发更简单
对于众多开发者而言,Serverless 架构的核心优势在于其能够无缝集成多种云产品与组件,从而使得开发者可以更加专注于核心业务逻辑和创新。此外,Serverless 架构还提供了按量付费的灵活计费模式,进一步降低了资源成本。使用云应用开发平台 CAP,在 AI 领域,企业就可以专注于模型训练、算法优化等关键任务,让 AI 应用的开发、部署以及全生命周期的管理更加简单。可以预见 Serverless 技术将催生一系列创新且有趣的应用,而这些应用将不断拓展 AI 技术的边界。
|
2月前
|
弹性计算 Cloud Native Serverless
阿里云 SAE 邀您参加 Serverless 高可用架构挑战赛,赢取精美礼品
阿里云 SAE 邀您参加 Serverless 高可用架构挑战赛,赢取精美礼品。
|
2月前
|
弹性计算 API 持续交付
后端服务架构的微服务化转型
本文旨在探讨后端服务从单体架构向微服务架构转型的过程,分析微服务架构的优势和面临的挑战。文章首先介绍单体架构的局限性,然后详细阐述微服务架构的核心概念及其在现代软件开发中的应用。通过对比两种架构,指出微服务化转型的必要性和实施策略。最后,讨论了微服务架构实施过程中可能遇到的问题及解决方案。
|
3月前
|
Cloud Native Devops 云计算
云计算的未来:云原生架构与微服务的革命####
【10月更文挑战第21天】 随着企业数字化转型的加速,云原生技术正迅速成为IT行业的新宠。本文深入探讨了云原生架构的核心理念、关键技术如容器化和微服务的优势,以及如何通过这些技术实现高效、灵活且可扩展的现代应用开发。我们将揭示云原生如何重塑软件开发流程,提升业务敏捷性,并探索其对企业IT架构的深远影响。 ####
83 3

相关产品

  • 函数计算