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

简介: 阿里云 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


相关实践学习
函数计算部署PuLID for FLUX人像写真实现智能换颜效果
只需一张图片,生成程序员专属写真!本次实验在函数计算中内置PuLID for FLUX,您可以通过函数计算+Serverless应用中心一键部署Flux模型,快速体验超写实图像生成的魅力。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
目录
相关文章
|
6月前
|
消息中间件 人工智能 安全
云原生进化论:加速构建 AI 应用
本文将和大家分享过去一年在支持企业构建 AI 应用过程的一些实践和思考。
1433 58
|
7月前
|
存储 弹性计算 Cloud Native
云原生数据库的演进与应用实践
随着企业业务扩展,传统数据库难以应对高并发与弹性需求。云原生数据库应运而生,具备计算存储分离、弹性伸缩、高可用等核心特性,广泛应用于电商、金融、物联网等场景。阿里云PolarDB、Lindorm等产品已形成完善生态,助力企业高效处理数据。未来,AI驱动、Serverless与多云兼容将推动其进一步发展。
314 8
|
Cloud Native 持续交付 开发者
云原生技术在现代企业中的应用与实践####
本文深入探讨了云原生技术的核心概念及其在现代企业IT架构转型中的关键作用,通过具体案例分析展示了云原生如何促进企业的敏捷开发、高效运维及成本优化。不同于传统摘要仅概述内容,本部分旨在激发读者对云原生领域的兴趣,强调其在加速数字化转型过程中的不可或缺性,为后续详细论述奠定基础。 ####
|
12月前
|
Cloud Native Serverless 流计算
云原生时代的应用架构演进:从微服务到 Serverless 的阿里云实践
云原生技术正重塑企业数字化转型路径。阿里云作为亚太领先云服务商,提供完整云原生产品矩阵:容器服务ACK优化启动速度与镜像分发效率;MSE微服务引擎保障高可用性;ASM服务网格降低资源消耗;函数计算FC突破冷启动瓶颈;SAE重新定义PaaS边界;PolarDB数据库实现存储计算分离;DataWorks简化数据湖构建;Flink实时计算助力风控系统。这些技术已在多行业落地,推动效率提升与商业模式创新,助力企业在数字化浪潮中占据先机。
603 12
|
人工智能 缓存 异构计算
云原生AI加速生成式人工智能应用的部署构建
本文探讨了云原生技术背景下,尤其是Kubernetes和容器技术的发展,对模型推理服务带来的挑战与优化策略。文中详细介绍了Knative的弹性扩展机制,包括HPA和CronHPA,以及针对传统弹性扩展“滞后”问题提出的AHPA(高级弹性预测)。此外,文章重点介绍了Fluid项目,它通过分布式缓存优化了模型加载的I/O操作,显著缩短了推理服务的冷启动时间,特别是在处理大规模并发请求时表现出色。通过实际案例,展示了Fluid在vLLM和Qwen模型推理中的应用效果,证明了其在提高模型推理效率和响应速度方面的优势。
云原生AI加速生成式人工智能应用的部署构建
|
运维 Cloud Native Serverless
Serverless Argo Workflows大规模计算工作流平台荣获信通院“云原生技术创新标杆案例”
2024年12月24日,阿里云Serverless Argo Workflows大规模计算工作流平台荣获由中国信息通信研究院颁发的「云原生技术创新案例」奖。
|
6月前
|
人工智能 运维 Kubernetes
Serverless 应用引擎 SAE:为传统应用托底,为 AI 创新加速
在容器技术持续演进与 AI 全面爆发的当下,企业既要稳健托管传统业务,又要高效落地 AI 创新,如何在复杂的基础设施与频繁的版本变化中保持敏捷、稳定与低成本,成了所有技术团队的共同挑战。阿里云 Serverless 应用引擎(SAE)正是为应对这一时代挑战而生的破局者,SAE 以“免运维、强稳定、极致降本”为核心,通过一站式的应用级托管能力,同时支撑传统应用与 AI 应用,让企业把更多精力投入到业务创新。
677 30
|
7月前
|
存储 人工智能 Serverless
函数计算进化之路:AI 应用运行时的状态剖析
AI应用正从“请求-响应”迈向“对话式智能体”,推动Serverless架构向“会话原生”演进。阿里云函数计算引领云上 AI 应用 Serverless 运行时技术创新,实现性能、隔离与成本平衡,开启Serverless AI新范式。
703 13
|
12月前
|
SQL 分布式计算 Serverless
鹰角网络:EMR Serverless Spark 在《明日方舟》游戏业务的应用
鹰角网络为应对游戏业务高频活动带来的数据潮汐、资源弹性及稳定性需求,采用阿里云 EMR Serverless Spark 替代原有架构。迁移后实现研发效率提升,支持业务快速发展、计算效率提升,增强SLA保障,稳定性提升,降低运维成本,并支撑全球化数据架构部署。
1247 56
鹰角网络:EMR Serverless Spark 在《明日方舟》游戏业务的应用
|
12月前
|
人工智能 开发框架 安全
Serverless MCP 运行时业界首发,函数计算让 AI 应用最后一公里提速
作为云上托管 MCP 服务的最佳运行时,函数计算 FC 为阿里云百炼 MCP 提供弹性调用能力,用户只需提交 npx 命令即可“零改造”将开源 MCP Server 部署到云上,函数计算 FC 会准备好计算资源,并以弹性、可靠的方式运行 MCP 服务,按实际调用时长和次数计费,欢迎你在阿里云百炼和函数计算 FC 上体验 MCP 服务。
925 30

相关产品

  • 函数计算