简介: 阿里云 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-uf636kjjx8xr4e75npexlabels:danmu.role: "manager"spec:containerConcurrency: 2serviceAccountName: barrage-install-sacontainers:- args:- /managerenv:- name: OTS_ENDPOINTvalue: https://barrage.cn-hangzhou.tablestore.aliyuncs.com- name: TABLE_NAMEvalue: barrage- name: OTS_INSTANCENAMEvalue: barrage- name: OTS_KEYIDvalue: xxx- name: OTS_SECRETvalue: xxx- name: POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: ROLEvalue: manager- name: POD_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespace- name: TRACE_NAMEvalue: "process"- name: PARENT_SPANvalue: "barrage-sender"- name: SUB_SPANvalue: "process"- name: TRACINGvalue: "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-20210618215458name: user-containerports:- containerPort: 8000name: 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: barragenamespace: default
spec:bootstrapServers: 192.168.42.205:9092,192.168.42.204:9092,192.168.42.203:9092consumerGroup: barrage-info-consumersink:ref:apiVersion: serving.knative.dev/v1kind: Servicename: test-barrage-processnamespace: defaulttopics: 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-barrageannotations: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-20210618214527env:- name: OTS_ENDPOINTvalue: https://barrage.cn-hangzhou.ots.aliyuncs.com- name: TABLE_NAMEvalue: barrage- name: OTS_INSTANCENAMEvalue: barrage- name: OTS_KEYIDvalue: xxx- name: OTS_SECRETvalue: xxx- name: KAFKA_SERVERvalue: "106.15.11.179:9093,47.100.131.71:9093,47.102.44.91:9093"- name: KAFKA_USERvalue: "alikafka_pre-cn-xxx"- name: KAFKA_PWDvalue: "xxx"- name: KAFKA_TOPICvalue: "barrage-info"- name: TRACINGvalue: "http://tracing-analysis-dc-sh.aliyuncs.com/adapt_g2it2kg78n@5cf06035aec2eb9_g2it2kg78n@53df7ad2afe8301/api/traces"- name: TRACE_NAME1value: "sender"- name: TRACE_NAME2value: "receiver"- name: TRACE_NAME3value: "result"- name: PARENT_SPANvalue: "barrage-sender"- name: SUB_SPAN1value: "sender"- name: SUB_SPAN2value: "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 应用编程模型相关推荐

  1. 【云安全系列】云原生场景下的容器网络隔离技术

    一.研究背景 随着云计算时代的到来,尤其是容器化技术的飞速发展,云原生作为云计算的未来阶段,其安全势必成为云安全的主要战场.从目前的云原生环境来看,云原生网络安全问题层出不穷,威胁程度逐渐上升,从业人 ...

  2. 直播回顾 | 子芽CCF TF:云原生场景下软件供应链风险治理技术浅谈

    CCF TF(技术前线委员会,Tech Frontier Committee)是中国计算机学会(CCF)为企业界计算机专业人士创建的企业间常态化合作交流平台,创始委员由Intel.LinkedIn.M ...

  3. 云原生体系下 Serverless 弹性探索与实践

    作者:竞霄 Serverless 时代的来临 Serverless 顾名思义,是一种"无服务器"架构,因为屏蔽了服务器的各种运维复杂度,让开发人员可以将更多精力用于业务逻辑设计与实 ...

  4. Clickhouse 在云原生场景下的部署和使用

    ClickHouse 简介 ClickHouse 是一个面向列的数据库管理系统 (DBMS),用于查询的在线分析处理 (OLAP). Clickhouse 特点 真正的面向列的数据库管理系统 在真正的 ...

  5. 实践:基于腾讯云播放器SDK,带您体验播放多场景下的 COS 视频文件

    一. 实践步骤 1. 准备您的 腾讯云COS 视频文件链接,您需要: 1.1 创建一个存储桶: 1.2 上传对象: 1.3 在对象信息详情里复制对象地址: 注意: 目前腾讯云有COS特惠活动,新人1元 ...

  6. 云原生体系下的技海浮沉与理论探索

    作者 | 王银利(芸峥) 1 . 概述 攻技者,短之:理论者,长之:践行者,胜之.可以这么说,一座城市的良心就体现在下水道上,不论这座城市有多少高楼大厦,建设得有多么宏伟,只要是下雨天,雨水就变成了城 ...

  7. Fluid — 云原生环境下的高效“数据物流系统”

    作者 | 顾荣  南京大学 PASALab (注:本文基于作者公开演讲报告内容整理完成) _来源 | _阿里巴巴云原生公众号 得益于计算成本低.易于扩展.部署便捷.运维高效等多方面的优势,云计算平台吸 ...

  8. 云原生时代下,容器安全的“四个挑战”和“两个关键”

    作者 | 匡大虎 来源 | 阿里巴巴云原生公众号 云原生进程中的容器安全挑战 云原生的火热带来了企业基础设施和应用架构等技术层面的革新,在云原生的大势所趋下,越来越多的企业选择拥抱云原生,在 CNCF ...

  9. 云原生趋势下的架构演进 | GIAC

    <云原生--IT领域的"共享经济">报告显示,2019年,以IaaS.PaaS和SaaS为代表的全球云计算市场规模达到1883亿美元,增速20.86%.预计未来几年市场 ...

最新文章

  1. Oracle 数据库DBA管理手册!
  2. python中enumerate()函数_Python enumerate() 函数
  3. GraphQL报错:error: NetworkError when attempting to fetch resource.
  4. opencv中的腐蚀与膨胀(转)
  5. 一加手机史上超大购机优惠 以旧换新至高补贴3800元
  6. 服务器 交换机的维护,服务器路由器交换机维护设置
  7. vdbench数据校验翻译
  8. jeston nano bo1卡槽坏了,不能锁住tf卡,维修方法
  9. 浏览器沙箱(sandBox)到底是什么?
  10. Python +Tesseract白嫖武动乾坤番外篇最终章文字版
  11. 添加视频字幕后期制作Premiere Pro 2022中文
  12. .net C# 堆 栈 垃圾回收 GC
  13. 看我如何用云函数撸一个PC小程序代码包在线解密工具
  14. 文档在线化管理系统Confluce使用
  15. tophat 原理_Tophat2比对原理及命令
  16. 使用浏览器插件,下载网页中的图片
  17. vue 使用a标签跨域下载文件
  18. 想要用Eclipse写java,请先把字体改了(教程)
  19. uniapp微信小程序授权登录流程(代码直接复制可用)
  20. 超链接的字体颜色设置

热门文章

  1. hsv 直方图均衡化_Opencv从零开始 - 「启蒙篇」- 直方图、直方图均衡和反向投射...
  2. 华为可以看游戏时长吗_怎么测试华为手机玩游戏的帧率情况
  3. 最大值减最小值等于区间长度_呆哥数学每日一题 ——三角函数求余弦最小值...
  4. camunda流程定义表无数据_创建流程实例时 act_ru_identitylink 表中没有出现相关的人员数据...
  5. matlab实现图片区水印,怎么在含有水印的图像中提取出水印
  6. python定义一个类savingaccount表示银行账户_c#教程之c#模拟银行atm机示例分享
  7. 镜像浏览器_害怕win10镜像有第三方软件,直接到微软官网下载,原汁原味
  8. mui请求php,PHP 怎样处理mui.ajax POST过来的数据?
  9. 未来如何与计算机和谐相处,未来计算机将进入身体和大脑,大脑将和云连接
  10. oracle存储过程 取时间格式,Oracle存储过程获取YYYY-MM-DD的时间格式