Serverless Knative冷启动与自动扩缩容研究:从原理到实践

最近一个研究生网页的提问,然后就有了这篇博客!

大佬你好,我看到您的关于Serverless的文章于是十分冒昧的向您提问。我现在是一名在研究通过Serverless容器调度解决冷启动问题的本科生,导师放养,就让看论文但是后面的代码操作一点也不明白也不知道从哪里开始学起,我找了几本书和网课都是讲怎么在Serverless上部署应用程序的但是和我想研究的Serverless内部的容器调度都没有关系,现在十分迷茫不知道该从哪里学起,是该学习kubernetes吗还是什么,不知道怎么开始求大佬指点,谢谢大佬

引言

在Serverless架构中,冷启动问题和自动扩缩容是两个密切相关且至关重要的主题。本文将从Knative的自动扩缩容原理出发,逐步深入到实际案例,帮助你构建一个完整的研究思路。

1. Knative自动扩缩容原理

1.1 核心概念

Knative的自动扩缩容功能主要包括两个关键部分:

  1. 缩减至零(Scale-to-zero):当服务一段时间没有请求时,Pod数量会降到零,节省资源。
  2. 自动扩缩容(Autoscaling):根据incoming流量动态调整Pod数量。

1.2 核心组件

Knative的自动扩缩容由三个主要组件协作完成:

  1. Autoscaler:负责计算和决定需要的Pod数量。
  2. Activator:在没有运行中的Pod时接收请求,并触发扩容。
  3. Queue-Proxy:作为每个Pod的sidecar,收集指标并执行流量缓冲。

1.3 工作流程

  1. Autoscaler持续监控流量指标。
  2. 当流量增加时,Autoscaler计算需要的Pod数量并触发扩容。
  3. 当流量减少时,Autoscaler逐步减少Pod数量,最终可能缩减至零。
  4. 当服务缩减至零后,新的请求会被Activator接收,Activator随即触发扩容。

下面是一个0 instance 情况下,接到请求负载的流程图:
image.png
分解序列图,我们可以得到以下步骤:

  1. 用户发送一个 GET 请求。请求首先到达网关,网关当前将流量发送到 Activator(激活器)。
  2. Activator 缓存请求,然后通知 Autoscaler(自动伸缩器)。
  3. Autoscaler 做出扩展决定,将实例数扩展到 1。Autoscaler 更新 Knative 服务,将其状态设置为一个实例。
  4. 最终,这导致启动一个新的 Revision 实例。
  5. Autoscaler 记录到实例数已达到 1。
  6. Activator 注意到一个 Revision 实例现在已启动。
  7. Activator 现在将之前缓存的请求转发给 Revision 实例。
  8. Revision 实例发送响应。
  9. 响应随后从 Activator 流经网关返回给用户。

2. 冷启动问题深析

2.1 什么是冷启动?

冷启动指的是当服务从零实例扩展到至少一个运行实例所需的时间。这个过程可能包括:

  1. 调度Pod
  2. 拉取容器镜像
  3. 启动容器
  4. 初始化应用

2.2 冷启动的影响

冷启动可能导致:

  • 首次请求的延迟增加
  • 用户体验下降
  • 在高并发情况下可能引发连锁反应

2.3 Knative如何缓解冷启动问题

  1. 预热:通过设置minScale确保始终有最小数量的Pod运行。
  2. Activator:在冷启动过程中缓存请求。
  3. 渐进式扩容:使用算法避免过度扩容。

3. Knative自动扩缩容配置详解

3.1 关键配置参数

apiVersion: v1
kind: ConfigMap
metadata:name: config-autoscalernamespace: knative-serving
data:container-concurrency-target-default: "100"enable-scale-to-zero: "true"stable-window: "60s"scale-to-zero-grace-period: "30s"
  • container-concurrency-target-default:每个Pod的目标并发请求数
  • enable-scale-to-zero:是否允许缩减至零
  • stable-window:稳定窗口期,用于计算平均并发
  • scale-to-zero-grace-period:缩减至零前的等待时间

3.2 服务级别配置

可以在Knative Service定义中覆盖全局配置:

apiVersion: serving.knative.dev/v1
kind: Service
metadata:name: example-service
spec:template:metadata:annotations:autoscaling.knative.dev/minScale: "1"autoscaling.knative.dev/maxScale: "5"autoscaling.knative.dev/target: "10"

这里设置了最小1个Pod,最大5个Pod,每个Pod的目标并发为10。

4. 使用Apache Kafka增强Knative自动扩缩容

image.png
在 Knative Eventing 系统中,通过 Channels(通道)和 Subscriptions(订阅)定义了一个 Channel(通道),它可以连接到各种后端,如 In-Memory(内存中)、Kafka 和 GCP Pub/Sub,用于事件源。每个 Channel 可以有一个或多个以 Sink Services(接收服务)的形式存在的 Subscriber(订阅者),这些订阅者可以接收事件消息并按需处理。来自 Channel 的每条消息都被格式化为 CloudEvent 并发送到链中的其他 Subscriber 以进行进一步处理。Channels 和 Subscriptions 的使用模式不支持消息过滤功能。

4.1 为什么选择Kafka?

  1. 解耦:Kafka可以解耦事件产生和消费。
  2. 缓冲:在流量突增时作为缓冲。
  3. 持久化:确保消息不会丢失。

4.2 Kafka与Knative Eventing集成

  1. 部署Kafka集群。
  2. 配置KafkaSource连接Kafka和Knative服务。
  3. 利用Knative Eventing的自动扩缩容特性。

4.3 配置示例

apiVersion: sources.knative.dev/v1beta1
kind: KafkaSource
metadata:name: kafka-source
spec:consumerGroup: knative-groupbootstrapServers:- my-cluster-kafka-bootstrap:9092topics:- my-topicsink:ref:apiVersion: serving.knative.dev/v1kind: Servicename: event-display

这个配置将Kafka主题my-topic的消息发送到Knative服务event-display

5. 实战案例:构建Serverless冷启动负载仿真平台

现在,让我们通过一个实际案例来整合前面所学的知识,构建一个Serverless冷启动负载仿真平台。

5.1 平台概述

我们将创建一个系统,使用真实的访问模式数据通过Kafka发送消息,触发Knative服务的自动扩缩容,并监控冷启动性能。

5.2 技术栈

  • Kubernetes:底层容器编排平台
  • Knative:Serverless框架
  • Apache Kafka:消息队列
  • Prometheus & Grafana:监控和可视化

5.3 实现步骤

  1. 准备环境
    • 部署Kubernetes集群
    • 安装Knative(Serving和Eventing)
    • 部署Kafka集群
  2. 创建负载生成器
import json
from kafka import KafkaProducer
import timeproducer = KafkaProducer(bootstrap_servers=['localhost:9092'])def send_load(timestamp, requests):message = json.dumps({'timestamp': timestamp,'requests': requests}).encode('utf-8')producer.send('load-topic', message)# 读取仿真数据并发送
with open('simulation_data.csv', 'r') as f:for line in f:timestamp, requests = line.strip().split(',')send_load(timestamp, int(requests))time.sleep(1)  # 控制发送速率
  1. 配置Knative服务
apiVersion: serving.knative.dev/v1
kind: Service
metadata:name: cold-start-service
spec:template:metadata:annotations:autoscaling.knative.dev/minScale: "0"autoscaling.knative.dev/target: "10"spec:containers:- image: your-test-image:latest
  1. 配置KafkaSource
apiVersion: sources.knative.dev/v1beta1
kind: KafkaSource
metadata:name: kafka-load-source
spec:consumerGroup: knative-groupbootstrapServers:- my-cluster-kafka-bootstrap:9092topics:- load-topicsink:ref:apiVersion: serving.knative.dev/v1kind: Servicename: cold-start-service
  1. 部署监控
    • 配置Prometheus采集Knative指标
    • 设置Grafana仪表板展示关键指标:
      • Pod数量变化
      • 请求延迟
      • 冷启动频率和持续时间
  2. 运行实验
    • 启动负载生成器
    • 观察Knative服务的扩缩容行为
    • 通过Grafana分析冷启动性能

5.4 数据分析

通过这个平台,你可以:

  1. 研究不同负载模式对冷启动的影响
  2. 评估各种Knative配置对冷启动性能的影响
  3. 开发和测试新的冷启动优化策略

结论

通过深入理解Knative的自动扩缩容机制和冷启动问题,再结合实际的负载仿真平台,你现在有了一个强大的工具来系统地研究Serverless环境下的容器调度优化。这个平台不仅可以帮助你验证现有的理论,还可以成为你开发新的调度算法和优化策略的基础。
记住,真正的研究往往始于实践。通过不断调整参数、分析数据,你将逐步积累宝贵的经验,最终可能找到改善Serverless冷启动问题的创新方法。祝你研究顺利!

参考书籍

  • Knative云原生应用开发指南
  • Knative Cookbook Building Effective Serverless Applications with Kubernetes and OpenShift by Burr Sutter, Kamesh Sampath
  • Knative+in+Action-2021

书籍下载连接
https://pan.quark.cn/s/71701c85e7d8

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu20.04.6 安装Skywalking 10.0.1

1.前置准备 1.1. **jdk17(Skywalking10 jdk22不兼容,用17版本即可)**安装: https://blog.csdn.net/CsethCRM/article/details/140768670 1.2. elasticsearch安装: https://blog.csdn.net/CsethCRM/article/details…

Python入门宝藏《看漫画学Python》,495页漫画带你弄清python知识点!简单易懂 | 附PDF全彩版

华为出品的《看漫画学Python》全彩PDF教程是一本适合Python初学者的学习资料,通过漫画的形式将复杂的Python技术问题简单化,使学习过程更加生动有趣。以下是对该教程的内容简介、本书概要及本书目录的详细解析: 内容简介 《看漫画学Python》…

手机三要素接口怎么对接呢?(一)

一、什么是手机三要素? 手机三要素又叫运营商三要素,运营商实名认证,运营商实名核验,手机三要素实名验证,手机三要素实名核验,每个人的称呼都不同,但是入参和出参是一样的。 输入姓名、身份证…

MATLAB基础:函数与函数控制语句

今天我们继续学习Matlab中函数相关知识。 API的查询和调用 help 命令是最基本的查询方法,可查询所有目录、指定目录、命令、函数。 我们直接点击帮助菜单即可查询所需的API函数。 lookfor 关键字用于搜索相关的命令和函数。 如,我们输入lookfor inpu…

矩估计与最大似然估计的通俗理解

点估计与区间估计 矩估计与最大似然估计都属于点估计,也就是估计出来的结果是一个具体的值。对比区间估计,通过样本得出的估计值是一个范围区间。例如估计馒头店每天卖出的馒头个数,点估计就是最终直接估计每天卖出10个,而区间估…

【机器学习基础】机器学习的数学基础

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈Python机器学习 ⌋ ⌋ ⌋ 机器学习是一门人工智能的分支学科,通过算法和模型让计算机从数据中学习,进行模型训练和优化,做出预测、分类和决策支持。Python成为机器学习的首选语言,…

鸿蒙(HarmonyOS)DatePicker+TimePicker时间选择控件

一、操作环境 操作系统: Windows 11 专业版、IDE:DevEco Studio 3.1.1 Release、SDK:HarmonyOS 3.1.0(API 9) 二、效果图 可实现两种选择方式,可带时分选择,也可不带,使用更加方便。 三、代码 SelectedDateDialog…

2024下半年,前端的技术风口来了

“ 你近期有体验过哪些大模型产品呢? 你有使用大模型API做过一些实际开发吗? 在你日常开发中,可以与大模型相关应用结合来完成工作吗? ” **最近,一直在和同事聊,关于前端可以用大模型干点啥&#xff…

实战:安装ElasticSearch 和常用操作命令

概叙 科普文:深入理解ElasticSearch体系结构-CSDN博客 Elasticsearch各版本比较 ElasticSearch 单点安装 1 创建普通用户 #1 创建普通用户名,密码 [roothlink1 lyz]# useradd lyz [roothlink1 lyz]# passwd lyz#2 然后 关闭xshell 重新登录 ip 地址…

Nat Med·UNI:开启计算病理学新篇章的自监督基础模型|顶刊精析·24-07-31

小罗碎碎念 本期推文主题 这一期推文是病理AI基础模型UNI的详细介绍,原文如下。下期推文会介绍如何使用这个模型,为了你能看懂下期的推文,强烈建议你好好看看今天这期推文。 看完这篇推文以后,你大概就能清楚这个模型对自己的数据…

卷积神经网络(六)---实现 cifar10 分类

cifar10 数据集有60000张图片,每张图片的大小都是 32x32 的三通道的彩色图,一共是10种类别、每种类别有6000张图片,如图4.27所示。 图 4.27 cifar数据集 使用前面讲过的残差结构来处理 cifar10 数据集,可以实现比较高的准确率。 …

麦田物语第十五天

系列文章目录 麦田物语第十五天 文章目录 系列文章目录一、构建游戏的时间系统二、时间系统 UI 制作总结 一、构建游戏的时间系统 在该游戏中我们要构建年月日天时分秒等时间的概念,从而实现季节的更替,昼夜的更替等(不同的季节可以播种不同…

【MATLAB源码】机器视觉与图像识别技术实战示例文档---鱼苗面积预测计数

系列文章目录 第一篇文章:【MATLAB源码】机器视觉与图像识别技术—视觉系统的构成(视频与图像格式转换代码及软件下载) 第二篇文章:【MATLAB源码】机器视觉与图像识别技术(2)—图像分割基础 第三篇文章:【MATLAB源码】机器视觉与图像识别技术…

提交高通量测序处理数据到 GEO --- 操作流程

❝ 写在前面 由于最近在提交课题数据到 NCBI 数据库,整理了相关笔记。本着自己学习、分享他人的态度,分享学习笔记,希望能对大家有所帮助。推荐先按顺序阅读往期内容: 1. 提交高通量测序数据到 GEO --- 说明书 2. 提交高通量测序原…

jQuery前端网页制作

1、Jquery的概述 1.1JavaScript库 JavaScript 高级程序设计(特别是对浏览器差异的复杂处理),通常很困难也很耗时。 为了应对这些调整,许多的 JavaScript (helper) 库应运而生。 这些 JavaScript 库常被称为 JavaScript 框架。 市面上一些广受欢迎的 JavaScript 框架:…

基于Docker搭建ELK

目录 1.系统操作 2.搭建es 3.kibana(新起终端跟es一起启动) 4.logstash(新起终端和es一起启动) 5.修改logstash配置文件 6. 创建索引 7. exit #退出容器 8. 在logstash节点插入数据,测试是否能拿取到(下面如果本身有数据…

基于多种机器学习的豆瓣电影评分预测与多维度可视化【可加系统】

有需要本项目的代码或文档以及全部资源,或者部署调试可以私信博主 在本研究中,我们采用Python编程语言,利用爬虫技术实时获取豆瓣电影最新数据。通过分析豆瓣网站的结构,我们设计了一套有效的策略来爬取电影相关的JSON格式数据。…

[FBCTF2019]RCEService (PCRE回溯绕过和%a0换行绕过)

json格式输入ls出现index.php 这道题原本是给了源码的&#xff0c;BUUCTF没给 源码&#xff1a; <?phpputenv(PATH/home/rceservice/jail);if (isset($_REQUEST[cmd])) {$json $_REQUEST[cmd];if (!is_string($json)) {echo Hacking attempt detected<br/><br/…

ElasticSearch学习篇15_《检索技术核心20讲》进阶篇之TopK检索

背景 学习极客实践课程《检索技术核心20讲》https://time.geekbang.org/column/article/215243&#xff0c;文档形式记录笔记。 相关问题&#xff1a; ES全文检索是如何进行相关性打分的&#xff1f;ES中计算相关性得分的时机?如何加速TopK检索&#xff1f;三种思路 精准To…

eclipse ui bug

eclipse ui bug界面缺陷&#xff0c;可能项目过多&#xff0c;特别maven项目过多&#xff0c;下载&#xff0c;自动编译&#xff0c;加载更新界面异常 所有窗口死活Restore不回去了 1&#xff09;尝试创建项目&#xff0c;还原界面&#xff0c;失败 2&#xff09;关闭所有窗口&…