Serverless 架构下的 AI 应用开发

news2024/11/27 22:24:13

作者:阿里云云原生

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

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

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

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

在这里插入图片描述

CI/CD 的概念与内容简图

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

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

在这里插入图片描述

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 页面,如图所示。

在这里插入图片描述

GitHub Secrets 页面

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

在这里插入图片描述

创建和配置密钥信息页面

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

在这里插入图片描述

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 的环境变量管理页面,如图所示。

在这里插入图片描述

Gitee 的环境变量管理页面

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

在这里插入图片描述

创建和配置密钥信息页面

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

在这里插入图片描述

Gitee 仓库完成密钥配置页面

与 Jenkins 的集成

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

浏览器链接:

http://localhost:8080

在这里插入图片描述

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

效果如图所示。

在这里插入图片描述

云效命令配置页面

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

在这里插入图片描述

环境变量配置页面

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 等。如图所示:

在这里插入图片描述

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

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

在这里插入图片描述

函数计算的请求记录

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

在这里插入图片描述

函数计算的请求详情

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

在这里插入图片描述

函数计算的日志信息

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

在这里插入图片描述

函数计算的 Tracing 相关信息


在这里插入图片描述

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/26997.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue3中的computed和watch属性

文章目录1. computed计算属性2. watch侦听器属性2.1 watchEffect2.2 watch1. computed计算属性 简写写法&#xff08;只实现了 get &#xff09;&#xff1a; <template><div><ul><li v-for"item of carts" :key"item.id">{{ it…

精华推荐 | 【深入浅出RocketMQ原理及实战】「底层原理挖掘系列」透彻剖析贯穿RocketMQ的存储系统的实现原理和持久化机制

RocketMQ的发展历史 RocketMQ是一个统一消息引擎、轻量级数据处理平台。RocketMQ是一款阿里巴巴开源的消息中间件。 2016 年 11 月 28 日&#xff0c;阿里巴巴向 广西党性培训 Apache 软件基金会捐赠RocketMQ&#xff0c;成为 Apache 孵化项目。 2017 年 9 月 25 日&#xff0…

webpack安装与基础

概念 webpack是一个前端打包工具用它来处理现代前端错综复杂的依赖关系&#xff08;A插件需要B插件B插件有D插件 F插件需要A插件&#xff09;生成浏览器可以识别静态资源Vue 前期脚手架就是用webpack制作&#xff08;Vue 开始推荐vite构建工具&#xff08;更快&#xff09;&am…

[UE][UE5]Gameplay框架,Actor,pawn,playerController(玩家控制器),Character(角色)之间的关系

[UE][UE5]Gameplay框架,actor,pawn,playerController,Character之间的关系Actor,pawn,playerController(玩家控制器),Character(角色)之间的关系Actor&#xff1a;pawn&#xff1a;character&#xff1a;控制器&#xff08;Controller&#xff09;&#xff1a;playerController…

sqlServer如何实现分页查询

sqlServer的分页查询和mysql语句不一样&#xff0c;有三种实现方式。分别是&#xff1a;offset /fetch next、利用max&#xff08;主键&#xff09;、利用row_number关键字 一、offset /fetch next关键字 2012版本及以上才有&#xff0c;SQL server公司升级后推出的新方法。 …

Shiro前后端分离流程

1.自定义filter 拦截所有携带token的请求&#xff0c; 调用自定义realm&#xff0c;判断token是否正确&#xff0c;不正确realm抛出异常&#xff0c;在filter中被捕获&#xff0c;重定向至token不正确界面 重写了三个方法&#xff1a; 1》isAccessAllowed&#xff1a;如果带…

有一个项目管理软件,名字叫8Manage PM!

优秀的软件工具在项目管理中起到极为重要的作用。8Manage PM项目管理软件由高亚科技自主研发&#xff0c;为项目工作提供项目功能、业务功能、服务功能和工具&#xff0c;有力推动项目成功。 8Manage软件项目功能包括完整性管理、需求管理、计划和执行、资源管理、工作量&…

锐捷BGP基础配置

目录 ​编辑 配置IBGP邻居 配置EBGP邻居 BGP其它配置 配置IBGP邻居 R2、R3、R4底层IGP互通&#xff0c;此处IGP互通配置不做介绍 R2与R4通过Loop0建立IBGP邻居&#xff0c;R3与R4通过Loop0建立IBGP邻居 R4充当反射器&#xff0c;R2和R3作为客户端&#xff08;通过反射可以将…

Vue中设置背景图片和透明度

如果文章对你有帮助欢迎【关注❤️❤️❤️点赞&#x1f44d;&#x1f44d;&#x1f44d;收藏⭐⭐⭐】一键三连&#xff01;一起努力&#xff01; 今天来为我自己的项目设置一个好看的登录页面之前是这样的&#xff1a; 乍一看感觉还行&#xff0c;越看越难受&#xff0c;弄一…

Nodejs http模块常用方法

视频链接&#xff1a;黑马程序员Node.js全套入门教程 文章目录http模块1 什么是http模块2 进一步理解http的作用3 服务器相关的概念3.1 IP地址3.2 域名和域名服务器3.3 端口号4 创建简单的web服务器1 步骤2 代码实现3 req请求对象4 res响应对象5 解决中文乱码问题5 简单路由效果…

《Java并发编程之美》读书笔记——ThreadLocalRandom类原理剖析

文章目录1.Random类的局限性2.ThreadLocalRandom3.源码分析Unsafe机制current()方法int nextInt(int bound)方法1.Random类的局限性 在JDK之前包括现在&#xff0c;java.util.Random都是使用比较广泛的随机数生成工具类。 下面我们先来看一下Random的使用方法。 // 创建一个…

kubelet源码 删除pod(一)

k8s版本为1.25.3版本 kubectl delete pod name当删除一个pod的时候会经历一下流程 kubectl会发pod消息给api server。apiserver将信息存入etcd&#xff0c;然后返回确认信息。apiserver开始反馈etcd中pod对象的变化&#xff0c;其他组件使用watch机制跟踪apiserver上的变动。…

行业生态重塑中,新氧如何逆风翻盘

美东时间11月18日盘前&#xff0c;中国互联网医美第一股新氧科技发布2022财年第三季度的业绩报告&#xff0c;业绩符合其业绩指引。 据新氧该季度财报显示&#xff0c;第三季度实现非美国通用会计准则归属于新氧科技的净利润990万元人民币&#xff08;140万美元&#xff09;。…

表格分组标签:表格行分组中的隐藏功能

在程序员的认知中&#xff0c;表格中存在行分组标签&#xff0c;也就是thead&#xff0c;tbody&#xff0c;tfoot三个行分组标签。也许你会认为我在这里还是为大家继续讲解thead&#xff0c;tbody&#xff0c;tfoot三个标签&#xff0c;那就大错特错了 今天除了要讲解他的基础作…

栈和队列

声明&#xff1a;本文主要作为作者的复习笔记&#xff0c;由于作者水平有限&#xff0c;难免有错误和不准确之处&#xff0c;欢迎读者批评指正。 目录快捷跳转线性表接口两个常用子类什么时候选择ArrayList&#xff0c;什么时候选择LinkedList?栈和队列的关系栈栈的实现根据使…

ASP.NET Core教程-Exception(异常和错误处理)

更新记录 转载请注明出处&#xff1a; 2022年11月22日 发布。 2022年11月20日 从笔记迁移到博客。 错误处理基础 错误处理说明 ASP.NET Core中的错误处理分为&#xff1a; ​ 局部Controller中处理错误 ​ 在Controller中定义错误代码和转到错误界面即可 ​ 全局应用中设置错误…

vue.js毕业设计,基于vue.js前后端分离教室预约系统设计与实现(H5移动项目)

功能模块 【后台管理功能模块】 系统设置&#xff1a;设置关于我们、联系我们、加入我们、法律声明 广告管理&#xff1a;设置小程序首页轮播图广告和链接 留言列表&#xff1a;所有用户留言信息列表&#xff0c;支持删除 会员列表&#xff1a;查看所有注册会员信息&#xff0c…

[附源码]计算机毕业设计JAVA家政管理系统

[附源码]计算机毕业设计JAVA家政管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis M…

Spring Boot中Node.js的下载与Vue CLI在IDEA中的部署及使用(图文解释 简单易懂)

仍有问题可点赞关注收藏后在评论区留言~~~ 一、Node.js与npm的下载 在使用Vue CLI(Vue脚手架)搭建前端系统的时候&#xff0c;因为需要用到npm安装Vue CLI&#xff0c;而npm是集成在Node.js中的&#xff0c;所以需要首先安装Node.js Node.js官网 下载过程很简单&#xff0c;…

数据库错误知识集2

Oracle数据库中最常见的索引类型是b-tree索引&#xff0c;也就是B-树索引&#xff0c;以其同名的计算科学结构命名。 union与union all的区别&#xff08;摘&#xff09;&#xff1a; ①对重复结果的处理&#xff1a;union会去掉重复记录&#xff0c;union all不会&#xff1b;…