带你体验云原生场景下 Serverless 应用编程模型

本文涉及的产品
函数计算FC,每月15万CU 3个月
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
简介: 阿里云 Knative 基于 ASK 之上,在完全兼容社区 Knaitve 的同时对 FC、ECI 工作负载进行统一应用编排,支持事件驱动、自动弹性,为您提供统一的 Serverless 应用编程模型。

背景

阿里云 Serverless Kubernetes(ASK) 是阿里云推出的无服务器 Kubernetes 容器服务,底层基于 ECI(Elastic Container Instance)让您无需购买 ECS 节点就能直接创建安全隔离的容器应用。 ASK 通过了 Kubernetes 的一致性测试,给您提供了完全兼容社区 Kubernetes 的使用体验。

Knative 是一款基于 Kubernetes 的开源 Serverless 应用编排框架,其目标是制定云原生、跨平台的Serverless应用编排标准。阿里云 Knative 基于 ASK 之上,在完全兼容社区 Knaitve 的同时对 FC、ECI 工作负载进行统一应用编排,支持事件驱动、自动弹性,为您提供统一的 Serverless 应用编程模型。

架构

接下来我们通过一个弹幕服务 demo 进行介绍。该 demo 主要包括 HomePage、事件驱动、消息处理这 3 部分。

HomePage 主要用于发送和接收弹幕。事件驱动用来接收事件,并进行事件过滤、流转。消息处理,用于处理弹幕消息。其中 HomePage、消息处理通过 Knative Serving 部署分别到 FC、ECI,事件驱动通过 Knative Eventing 部署到ECI。


弹幕服务 demo 主要流程如图,用户通过前端发送弹幕消息到 HomePage,HomePage 接着将弹幕发送到 Kafka,事件驱动接收弹幕消息,然后路由到消息处理进行加工,待弹幕加工完之后,将弹幕结果发送到表格存储中,最后前端获取弹幕结果在页面展示。


接下来我们开始部署该弹幕服务 demo, 操作包括以下内容:

首先部署消息处理,然后部署事件驱动,接着部署 HomePage,待部署完成之后进行弹幕服务访问

第一步:部署消息处理

该服务用于接收事件驱动发送的弹幕请求,并根据请求数进行自动扩缩容,待弹幕消息处理完成之后将结果发送到表格存储。部署之前,我们先确认当前无工作负载,以便观察部署之后的结果。

  • 选择 ask 集群
  • 在集群管理页左侧导航栏中,选择工作负载 > 无状态。选择 default命名空间,确认当前无工作负载

接着通过 Knative 把弹消息处理部署到 ECI 类型工作负载。这里我们通过yaml的方式进行部署,yaml内容如下:

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: test-barrage-process
spec:
  template:
    metadata:
      annotations:
        autoscaling.knative.dev/maxScale: "100"
        autoscaling.knative.dev/minScale: "0"
        k8s.aliyun.com/eci-image-snapshot-id: imc-uf636kjjx8xr4e75npex
      labels:
        danmu.role: "manager"
    spec:
      containerConcurrency: 2
      serviceAccountName: barrage-install-sa
      containers:
        - args:
            - /manager
          env:
            - name: OTS_ENDPOINT
              value: https://barrage.cn-hangzhou.tablestore.aliyuncs.com
            - name: TABLE_NAME
              value: barrage
            - name: OTS_INSTANCENAME
              value: barrage
            - name: OTS_KEYID
              value: xxx
            - name: OTS_SECRET
              value: xxx
            - name: POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: ROLE
              value: manager
            - name: POD_NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
            - name: TRACE_NAME
              value: "process"
            - name: PARENT_SPAN
              value: "barrage-sender"
            - name: SUB_SPAN
              value: "process"
            - name: TRACING
              value: "http://tracing-analysis-dc-sh.aliyuncs.com/adapt_g2it2kg78n@5cf06035aec2eb9_g2it2kg78n@53df7ad2afe8301/api/traces"
          image: registry-vpc.cn-shanghai.aliyuncs.com/knative-sample/barrage-manager:forrester-yuanyi_4cd77c84-20210618215458
          name: user-container
          ports:
            - containerPort: 8000
              name: http1

主要参数说明:

  • minScale和maxScale:表示服务配置的最小和最大Pod数量
  • containerConcurrency:表示配置的Pod最大请求并发数
  • OTS_ENDPOINT:表示配置的表格存储访问地址
  • TRACING:表示配置的调用连地址

那么接下来我们部署该服务。

  • 在集群管理页左侧导航栏中,选择应用 > Knative
  • 服务管理页签右上角,单击【使用模版创建】。选择default 命名空间,将上面的 yaml 内容粘贴到模版,点击创建。


第二步:部署事件驱动

事件驱动用于接收事件并进行事件流过滤、流转。这里我们使用 Kafka 事件源作为事件驱动,用于从 Kafka 接收弹幕消息,然后把弹幕路由到消息处理。我们通过yaml的方式进行部署, yaml内容如下:

apiVersion: sources.knative.dev/v1alpha1
kind: KafkaSource
metadata:
  annotations:
    k8s.aliyun.com/req-timeout: "60"
    k8s.aliyun.com/retry-count: "5"
    k8s.aliyun.com/retry-interval: "2"
  name: barrage
  namespace: default
spec:
  bootstrapServers: 192.168.42.205:9092,192.168.42.204:9092,192.168.42.203:9092
  consumerGroup: barrage-info-consumer
  sink:
    ref:
      apiVersion: serving.knative.dev/v1
      kind: Service
      name: test-barrage-process
      namespace: default
  topics: barrage-info

主要参数说明:

  • kafka配置包括:kafka服务地址 ,弹幕消息 topics 以及消费组 consumerGroup
  • 路由的目标消息处理:test-barrage-process


那么接下来我们部署该服务。

  • 在集群管理页左侧导航栏中,选择应用 > Knative
  • 服务管理页签右上角,单击【使用模版创建】。选择default 命名空间,将上面的 yaml 内容粘贴到模版,点击创建。

以上消息处理和事件驱动都已部署完成,我们来验证一下。

(在集群管理页左侧导航栏中,选择工作负载 > 容器组)

在容器组中,可以看到消息处理以及 Kafka 事件源实例都已 running


第三步:部署HomePage

该服务用于接收前端弹幕消息,并将弹幕消息发送到 Kafka,同时从表格存储中接收弹幕结果。这里通过 Knative 函数方式部署之后,会自动在FC中创建服务、函数、自定义域名。操作之前我们先确认FC中无弹幕服务、函数以及自定义域名。

  • 登录FC控制台
  • 在顶部菜单栏,选择地域(上海)。

打开服务及函数页面,确认无弹幕服务及函数

  • 在左侧导航栏中,单击自定义域名,确认无域名信息。

打开自定义域名页面,确认无自定义域名

接下来我们通过 Knative 把HomePage部署到FC类型工作负载。这里我们通过yaml的方式进行部署, yaml内容如下:

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: demo-barrage
  annotations:
    workload.serving.knative.aliyun.com/class: "fc"
spec:
  template:
    metadata:
      annotations:
        fc.revision.serving.knative.aliyun.com/code-space: "image"
        fc.revision.serving.knative.aliyun.com/role-arm: "acs:ram::xxxx:role/knative-fc"
        fc.revision.serving.knative.aliyun.com/domain: '{"domain":"barrage.demo.knative.top","path":"/*"}'
    spec:
      containers:
        - image: registry.cn-shanghai.aliyuncs.com/knative-sample/barrage-main:forrester-yuanyi_4cd77c84-20210618214527
          env:
            - name: OTS_ENDPOINT
              value: https://barrage.cn-hangzhou.ots.aliyuncs.com
            - name: TABLE_NAME
              value: barrage
            - name: OTS_INSTANCENAME
              value: barrage
            - name: OTS_KEYID
              value: xxx
            - name: OTS_SECRET
              value: xxx
            - name: KAFKA_SERVER
              value: "106.15.11.179:9093,47.100.131.71:9093,47.102.44.91:9093"
            - name: KAFKA_USER
              value: "alikafka_pre-cn-xxx"
            - name: KAFKA_PWD
              value: "xxx"
            - name: KAFKA_TOPIC
              value: "barrage-info"
            - name: TRACING
              value: "http://tracing-analysis-dc-sh.aliyuncs.com/adapt_g2it2kg78n@5cf06035aec2eb9_g2it2kg78n@53df7ad2afe8301/api/traces"
            - name: TRACE_NAME1
              value: "sender"
            - name: TRACE_NAME2
              value: "receiver"
            - name: TRACE_NAME3
              value: "result"
            - name: PARENT_SPAN
              value: "barrage-sender"
            - name: SUB_SPAN1
              value: "sender"
            - name: SUB_SPAN2
              value: "result"

主要参数说明:

  • fc 相关参数配置包括: 部署fc类型的工作负载、通过镜像方式部署,并指定访问域名为: barrage.demo.knative.top
  • 配置表格存储访问地址: OTS_ENDPOINT
  • kafka 相关参数配置:kafka服务地址、弹幕消息 topic
  • 调用连地址配置:TRACING

那么我们来部署该服务。

  • 登录容器服务管理控制台
  • 在集群管理页左侧导航栏中,选择应用 > Knative
  • 服务管理页签右上角,单击【使用模版创建】。选择default 命名空间,将上面的 yaml 内容粘贴到模版,点击创建。

部署完成之后,我们在函数计算控制台验证一下。

  • 登录函数计算控制台
  • 在顶部菜单栏,选择地域。
  • 在左侧导航栏中,单击服务及函数,选择可以看到弹幕服务已经部署完成

打开服务及函数页面,可以看到HomePage已经部署完成。

  • 在左侧导航栏中,单击自定义域名。

打开自定义域名页面可以看到自动创建出来了我们配置的域名。

第四步:服务访问

以上服务都已部署完成,接着我们通过自定义域名进行服务访问。http://barrage.demo.knative.top

接下来我们发送弹幕,这里可以自定义设置需要发送的弹幕消息,并发数以及持续时间。这里我们使用默认配置进行发送。

设置Message、Concurrency以及Duration,点击【Send】

我们可以看到不断有弹幕消息展示出来。

小结

阿里云 Knative 在 Serverless Kubernetes 之上,提供了面向容器+函数的统一编程模型,给你带来统一的Serverless 应用编程模型。欢迎有兴趣的同学一起交流。

image.png


相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
3月前
|
人工智能 自然语言处理 Serverless
阿里云函数计算 x NVIDIA 加速企业 AI 应用落地
阿里云函数计算与 NVIDIA TensorRT/TensorRT-LLM 展开合作,通过结合阿里云的无缝计算体验和 NVIDIA 的高性能推理库,开发者能够以更低的成本、更高的效率完成复杂的 AI 任务,加速技术落地和应用创新。
179 13
|
9天前
|
人工智能 Serverless API
尽享红利,Serverless构建企业AI应用方案与实践
本次课程由阿里云云原生架构师计缘分享,主题为“尽享红利,Serverless构建企业AI应用方案与实践”。课程分为四个部分:1) Serverless技术价值,介绍其发展趋势及优势;2) Serverless函数计算与AI的结合,探讨两者融合的应用场景;3) Serverless函数计算AIGC应用方案,展示具体的技术实现和客户案例;4) 业务初期如何降低使用门槛,提供新用户权益和免费资源。通过这些内容,帮助企业和开发者快速构建高效、低成本的AI应用。
50 12
|
2月前
|
存储 消息中间件 人工智能
ApsaraMQ Serverless 能力再升级,事件驱动架构赋能 AI 应用
本文整理自2024年云栖大会阿里云智能集团高级技术专家金吉祥的演讲《ApsaraMQ Serverless 能力再升级,事件驱动架构赋能 AI 应用》。
155 10
|
1月前
|
运维 Serverless 数据处理
Serverless架构通过提供更快的研发交付速度、降低成本、简化运维、优化资源利用、提供自动扩展能力、支持实时数据处理和快速原型开发等优势,为图像处理等计算密集型应用提供了一个高效、灵活且成本效益高的解决方案。
Serverless架构通过提供更快的研发交付速度、降低成本、简化运维、优化资源利用、提供自动扩展能力、支持实时数据处理和快速原型开发等优势,为图像处理等计算密集型应用提供了一个高效、灵活且成本效益高的解决方案。
99 1
|
1月前
|
运维 监控 Serverless
Serverless架构在图像处理等计算密集型应用中展现了显著的优势
Serverless架构在图像处理等计算密集型应用中展现了显著的优势
39 1
|
2月前
|
运维 Serverless 数据处理
Serverless架构通过提供更快的研发交付速度、降低成本、简化运维、优化资源利用、提供自动扩展能力、支持实时数据处理和快速原型开发等优势,为图像处理等计算密集型应用提供了一个高效、灵活且成本效益高的解决方案。
Serverless架构通过提供更快的研发交付速度、降低成本、简化运维、优化资源利用、提供自动扩展能力、支持实时数据处理和快速原型开发等优势,为图像处理等计算密集型应用提供了一个高效、灵活且成本效益高的解决方案。
64 3
|
2月前
|
运维 Serverless 数据处理
Serverless架构在图像处理等计算密集型应用中展现了显著的优势
Serverless架构在图像处理等计算密集型应用中展现出显著优势,包括加速研发交付、降低成本、零运维成本、高效资源利用、自动扩展、实时数据处理及快速原型开发,为高并发、动态需求场景提供高效解决方案。
67 1
|
2月前
|
运维 Serverless 数据处理
Serverless架构在图像处理等计算密集型应用中展现出显著优势
【10月更文挑战第6天】Serverless架构在图像处理等计算密集型应用中展现出显著优势,包括加速研发交付、成本效益、零运维成本、高效资源利用、自动扩展能力、实时数据处理及快速原型开发,为高并发、动态需求场景提供高效、灵活的解决方案。
52 4
|
3月前
|
Cloud Native 关系型数据库 Serverless
基于阿里云函数计算(FC)x 云原生 API 网关构建生产级别 LLM Chat 应用方案最佳实践
本文带大家了解一下如何使用阿里云Serverless计算产品函数计算构建生产级别的LLM Chat应用。该最佳实践会指导大家基于开源WebChat组件LobeChat和阿里云函数计算(FC)构建企业生产级别LLM Chat应用。实现同一个WebChat中既可以支持自定义的Agent,也支持基于Ollama部署的开源模型场景。
719 28
|
2月前
|
机器学习/深度学习 机器人 Serverless
【10月更文挑战第1天】FaaS 的应用场景
【10月更文挑战第1天】FaaS 的应用场景

热门文章

最新文章

相关产品

  • 函数计算