带你体验云原生场景下 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 应用编程模型。欢迎有兴趣的同学一起交流。
原文链接
本文为阿里云原创内容,未经允许不得转载。
带你体验云原生场景下 Serverless 应用编程模型的更多相关文章
- API 管理在云原生场景下的机遇与挑战
作者 | 张添翼 来源 | 尔达Erda公众号 云原生下的机遇和挑战 标准和生态的意义 自从 Kubernetes v1.0 于 2015 年 7 月 21 日发布,CNCF 组织随后建立以来,其 ...
- 实践:基于腾讯云播放器SDK,带您体验播放多场景下的 COS 视频文件
一. 实践步骤 1. 准备您的 腾讯云COS 视频文件链接,您需要: 1.1 创建一个存储桶: 1.2 上传对象: 1.3 在对象信息详情里复制对象地址: 注意: 目前腾讯云有COS特惠活动,新人1元 ...
- 扩展 GRTN:云原生趋势下的 RTC 架构演进
在 2021 LiveVideoStackCon 音视频技术大会上海站,聚焦 "轻端重云和边缘架构新模式" 专场,阿里云视频云的 RTC 传输专家杨成立(忘篱)带来 "基 ...
- CODING DevOps 系列第三课:云计算、云原生模式下 DevOps 的建设
本文首先会和大家分享当前整个应用生命周期的演变历程,然后讲解云计算模式下 DevOps 建设包含的过程.流程规范和标准,最后讲解云原生时代到来会带来哪些改变,以及标准化的建设会有哪些改变和突破. 应用 ...
- 重磅发布 | 全球首个云原生应用标准定义与架构模型 OAM 正式开源
作者: OAM 项目负责人 导读:2019 年 10 月 17 日,阿里巴巴合伙人.阿里云智能基础产品事业部总经理蒋江伟(花名:小邪)在 Qcon 上海重磅宣布,阿里云与微软联合推出开放应用模型 Op ...
- 开放应用模型(OAM):全球首个云原生应用标准定义与架构模型
Kubernetes 项目作为容器编排领域的事实标准, 成功推动了诸如阿里云 Kubernetes (ACK)等云原生服务的迅速增长.但同时我们也关注到,Kubernetes 的核心 API 资源比如 ...
- O2O场景下的推荐排序模型:
推荐系统遇上深度学习(五)--Deep&Cross Network模型理论和实践 发表: 2018-04-22 推荐系统遇上深度学习系列:推荐系统遇上深度学习(一)--FM模型理论和实践:ht ...
- at91sam9x5 linux 4.1.0下dts驱动编程模型
测试环境: CPU: AT91SAM9X35 Linux: Atmel提供的linux-at91-linux4sam_5.3 (Linux-4.1.0) 转载请注明: 凌云物网智科嵌入式实 ...
- CNCF 宣布 TUF 毕业 | 云原生生态周报 Vol. 33
作者 | 孙健波.汪萌海.陈有坤.李鹏 业界要闻 CNCF 宣布 TUF 毕业 CNCF 宣布 TUF(The update Framework)项目正式毕业,成为继 Kubernetes.Preme ...
- CNCF 宣布成立应用交付领域小组,正式开启云原生应用时代
作者|赵钰莹 作为云原生领域的顶级开源社区, Cloud Native Computing Foundation (云原生基金会,以下简称 CNCF)近日宣布成立 Application Delive ...
随机推荐
- c语言之被遗漏的角落---#pragma pack
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文作为本人csdn blog的主站的备份.(Bl ...
- 说说Vue 3.0中Treeshaking特性?举例说明一下?
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.是什么 Tree shaking 是一种通过清除多余代码方式来优化项目打包体积的技术,专业术语叫 Dead code eliminat ...
- Markdown的习题
markdown的使用说明 习题1: 将这段话改为2级标题 习题2 试着在你的'Typora'中编辑下面的内容: 这是第一行 这是第2行 这是补充内容 这是第3行 习题3 将下面的内容改为指定的格式要 ...
- drools中no-loop和lock-on-active的区别
一.背景 在我们编写drools规则的过程中,可能会发生死循环,那么该怎么解决呢?如果想某一个规则只执行一次,即别的规则导致该规则重新执行,也不需要执行,那么该怎么解决呢? 二.解决方案 针对以上问题 ...
- .net和java串口通讯压力测试对比
最近由于工作要求,需要对一个串口通讯设备进行压力测试,要求连续持续对串口设备发送指令,无间隔,测试设备是否会死机. 要求做到毫秒级,测试第三方的工具,基本上都无法达到毫秒级,最少的也是10毫秒. 于是 ...
- #二分,负环#JZOJ 3852 单词接龙
题目 只要一个单词的最后两个字母和另一个单词的前两个字母相同,那么这两个单词就可以有序的连接起来.给出\(n\)个单词组成单词环,求所有环的环中单词平均长度最大值. 分析 二分答案,判断是否存在正环( ...
- #博弈论#Poj 2484 A Funny Game
题目 \(n\)个石子排成一圈,每次可以取一个或相邻的一对, 取完为胜,问先手是否必胜 分析 无论先手如何取,后手都能模仿先手的取法. 比如说,当石子个数为奇数时先手取相邻的一对,后手可以将对面的那一 ...
- #网络流,最小割#洛谷 1344 [USACO4.4]追查坏牛奶Pollutant Control
题目 分析 考虑答案求的是最小割,但是最小割的最小边数有点难求, 考虑建立双关键字,其实就是将边权赋值为原边权\(*mx+1\), 其中\(mx\)是一个比较大的数,不需要太大, 这样用网络流做之后对 ...
- 开源共建携手并进 OpenHarmony使能千行百业生态成果亮相HDC2022
11月4日-6日,第四届华为开发者大会 2022(Together)在中国松山湖如期举行,本次大会围绕"创新照见未来"这一主题,向外界展示了OpenAtom OpenHarmon ...
- Viu联合华为HMS生态,共创影音娱乐新体验
华为HMS生态携手流媒体平台Viu,为海外消费者打造精品移动娱乐应用体验,并助力提升流量变现能力.Viu在中东非.东南亚等16个国家及地区提供广告合作和付费会员服务,支持优质视频内容高清点播和直播.自 ...