【连续和自适应资源需求估计】通过不断应用在线优化、选择和估计,SARDE能够有效地适应在线跟踪,并使用得到的集成技术减少模型误差(Python代码实现)

2024-01-12

???????????????? 欢迎来到本博客 ❤️❤️????????

????博主优势: ???????????? 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️ 座右铭: 行百里者,半于九十。

???????????? 本文目录如下: ????????????

目录

????1 概述

????2 运行结果

????3 参考文献

????4 Python代码、数据、文章


????1 概述

文献来源:

SARDE:连续和自适应资源需求估计框架

摘要 资源需求是建模和预测软件系统性能的关键参数。目前,资源需求估计器通常只在系统分析时执行一次。然而,在运行时环境中,监视的系统以及资源需求本身都会不断变化。这些变化会影响各种估计方法的适用性、所需的参数化以及估计结果的准确性。随着时间的推移,这将导致无效或过时的估计,进而对自适应系统的决策产生负面影响。本文介绍了SARDE,这是一个用于连续环境中自适应资源需求估计的框架。SARDE动态地、持续地调整、选择和执行一系列资源需求估计方法,以适应环境的变化。这创造了一种自主的、无监督的集成估计技术,在动态环境中提供可靠的资源需求估计。我们使用了两个真实数据集对SARDE进行评估。其中一个数据集包含反映不同可能系统状态的不同微基准,另一个数据集包含在不断变化的环境中运行的应用程序。我们的结果表明,通过不断应用在线优化、选择和估计,SARDE能够有效地适应在线跟踪,并使用得到的集成技术减少模型误差。

及时和精确的资源需求估计是自动扩展机制[2]或用于弹性资源配置的性能建模技术[36, 69]的关键输入。因此,已经证明资源需求的统计估计是实现精确弹性云资源管理的有效和有用工具[2, 92]。资源需求(或服务需求[79])是单位工作(例如请求或交易)在系统整体访问中获得服务所花费的平均时间,不包括任何等待时间[48, 59]。不幸的是,在大多数现实系统中,在系统运行期间测量资源需求是不可行的[79],这是由于仪器开销和可能的测量干扰。因此,多年来提出了许多资源需求估计方法,使用不同的统计估计技术(例如线性回归[8, 72]或卡尔曼滤波器[88, 98])并基于排队理论的不同建模方法。

在选择适合特定场景的方法时,用户必须考虑估计方法的不同特征,例如预期的输入参数、配置设置、准确性以及对测量异常的鲁棒性。不同方法的准确性在很大程度上取决于诸如系统负载、工作负载类型、部署结构、内部状态和监控粒度等因素[79]。此外,Spinner等人[79]表明,在所有情况下没有单一的最佳方法。这与机器学习[93]和优化[94]的无免费午餐定理相一致,该定理指出当性能在所有可能的问题上平均时,任何两种算法是等效的。

解决上述问题的第一步集中在将不同的估计方法结合成一个可用的工具[80],基于测量数据优化配置参数[27, 29],并使用机器学习推荐最有前途的方法[30]。然而,现有工作侧重于一次性估计和优化,忽略了系统变化的影响。随着DevOps和弹性云操作等现代软件范式的日益普及,随着越来越多的变量不断发生变化,及时和精确的资源需求估计变得越来越复杂,估计必须不断更新。例如,任何自动扩展器都在不断改变所考虑的软件系统的部署结构。此外,在任何在线应用程序中,应用的工作负载从未真正恒定。因此,所考虑的环境在设计时是未知的,并且在操作期间不断演变[10]。随着系统和测量数据的变化,最适合的估计方法也会发生变化。因此,任何人类用户都不可能在系统运行期间持续选择、参数化和监督资源需求估计器。

因此,在本文中,我们介绍了SARDE,这是一个用于连续自适应资源需求估计的框架。SARDE能够连续地操作、参数化和选择多种不同的资源需求估计方法,并能够自主地适应所研究系统的环境变化。本文侧重于将不同的构建模块结合起来,创建一个适应性强、可在任何连续环境中应用的坚固框架,而无需专业知识。

???? 2 运行结果

保存运行结果:

部分代码:


# Plot evaluation
respApprox = logs[(logs['Type'] == ' EVALUATION') & (
        logs['Selected Approach'] == ' tools.descartes.librede.approach.ResponseTimeApproximationApproach')]
ax2.plot(respApprox['Finish time'], pd.to_numeric(respApprox[errorvec]) * 100, linewidth=plotwidth,
         color=respApproxColor)
utilizationRegression = logs[(logs['Type'] == ' EVALUATION') & (
        logs['Selected Approach'] == ' tools.descartes.librede.approach.UtilizationRegressionApproach')]
ax2.plot(utilizationRegression['Finish time'], pd.to_numeric(utilizationRegression[errorvec]) * 100,
         linewidth=plotwidth,
         color=utilizationRegressionColor)
serviceDemandLaw = logs[(logs['Type'] == ' EVALUATION') & (
        logs['Selected Approach'] == ' tools.descartes.librede.approach.ServiceDemandLawApproach')]
ax2.plot(serviceDemandLaw['Finish time'], pd.to_numeric(serviceDemandLaw[errorvec]) * 100, linewidth=plotwidth,
         color=serviceDemandLawColor)
wangKalmanFilter = logs[(logs['Type'] == ' EVALUATION') & (
        logs['Selected Approach'] == ' tools.descartes.librede.approach.WangKalmanFilterApproach')]
ax2.plot(wangKalmanFilter['Finish time'], pd.to_numeric(wangKalmanFilter[errorvec]) * 100, linewidth=plotwidth,
         color=wangKalmanFilterColor)
kumarKalmanFilter = logs[(logs['Type'] == ' EVALUATION') & (
        logs['Selected Approach'] == ' tools.descartes.librede.approach.KumarKalmanFilterApproach')]
ax2.plot(kumarKalmanFilter['Finish time'], pd.to_numeric(kumarKalmanFilter[errorvec]) * 100, linewidth=plotwidth,
         color=kumarKalmanFilterColor)
responsetimeRegression = logs[(logs['Type'] == ' EVALUATION') & (
        logs['Selected Approach'] == ' tools.descartes.librede.approach.ResponseTimeRegressionApproach')]
ax2.plot(responsetimeRegression['Finish time'], pd.to_numeric(responsetimeRegression[errorvec]) * 100,
         linewidth=plotwidth,
         color=responsetimeRegressionColor)

ax2.set_xlabel("Time [s]")
ax2.set_ylabel("Estimation Error [%]")
ax2.set_xlim(xmin=0, xmax=10800)
ax2.set_yticks([0, 20, 40, 60, 80])
ax2.set_ylim(ymin=0, ymax=100)

names = ['ResponsetimeApproximation', 'UtilizationRegression', 'ServiceDemandLaw', 'WangKalmanFilter',
         'KumarKalmanFilter', 'ResponsetimeRegression']
ncols = 3
ax2.legend(lines, names, ncol=ncols, loc="upper right")

# plt.xlim(0, 180)
# Finish up plot
fig.tight_layout(pad=0.1)
fig.savefig(filename)
plt.show()  

????3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

???? 4 Python代码、数据、文章

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【连续和自适应资源需求估计】通过不断应用在线优化、选择和估计,SARDE能够有效地适应在线跟踪,并使用得到的集成技术减少模型误差(Python代码实现) 的相关文章

  • Pandas apply 与 np.vectorize 从现有列创建新列的性能

    我正在使用 Pandas 数据框 并希望创建一个新列作为现有列的函数 我还没有看到关于之间速度差异的很好的讨论df apply and np vectorize 所以我想我会在这里问 熊猫apply 功能很慢 根据我的测量 在一些实验中如下
  • python导入模块时如何避免一直写模块名?

    我用math最近模块很多 我不想写math sqrt x and math sin x 每时每刻 我想缩短它并写sqrt x and sin x How 对于较长的模块名称 通常会缩短它们 例如 import numpy as np 然后您
  • DataFrame 在函数内部修改

    我面临一个我以前从未观察到的函数内数据帧修改的问题 有没有一种方法可以处理这个问题 以便初始数据帧不被修改 def test df df tt np nan return df dff pd DataFrame data 现在 当我打印时d
  • 子进程改变目录

    我想在子目录 超级目录中执行脚本 我需要首先进入该子目录 超级目录 我无法得到subprocess进入我的子目录 tducin localhost Projekty tests ve python Python 2 7 4 default
  • Python + PostgreSQL + 奇怪的ascii = UTF8编码错误

    我有包含字符的 ascii 字符串 x80 代表欧元符号 gt gt gt print x80 当将包含该字符的字符串数据插入数据库时 我得到 psycopg2 DataError invalid byte sequence for enc
  • 将 API 数据存储到 DataFrame 中

    我正在运行 Python 脚本来从 Interactive Brokers API 收集金融市场数据 连接到API后 终端打印出请求的历史数据 如何将数据保存到数据帧中而不是在终端中流式传输 from ibapi wrapper impor
  • html 解析器 python

    我正在尝试解析一个网站 我正在使用 HTMLParser 模块 问题是我想解析第一个 a href 评论后 但我真的不知道该怎么做 所以我在文档中发现有一个函数叫做handle comment 但我还没有找到如何正确使用它 我有以下内容 i
  • 如何找到列表S的所有分区为k个子集(可以为空)?

    我有一个唯一元素列表 比方说 1 2 我想将其拆分为 k 2 个子列表 现在我想要所有可能的子列表 1 2 1 2 2 1 1 2 我想分成 1 1 2 我怎样才能用 Python 3 做到这一点 更新 我的目标是获取 N 个唯一数字列表的
  • Python 正则表达式部分匹配或“hitEnd”

    我正在编写一个扫描器 因此我将任意字符串与正则表达式规则列表进行匹配 如果我可以模拟 Java hitEnd 功能 不仅知道正则表达式何时不匹配 还知道何时匹配 这将非常有用 can t匹配 当正则表达式匹配器在决定拒绝输入之前到达输入末尾
  • 在 Flask (WSGI) 中使用全局单例,我是否需要担心竞争条件? [复制]

    这个问题在这里已经有答案了 Flask 的 hello world 演示是 from flask import Flask app Flask name app route def hello return Hello World if n
  • 错误:无法访问文件“$libdir/plpython2”:没有这样的文件或目录

    我正在运行 postgresql 9 4 PostgreSQL 9 4 4 on x86 64 unknown linux gnu compiled by gcc GCC 4 1 2 20070626 Red Hat 4 1 2 14 64
  • 在 matplotlib 中使用 yscale('log') 时缺少误差线

    在某些情况下 当使用对数刻度时 matplotlib 会错误地显示带有误差条的图 假设这些数据 例如在 pylab 内 s 19 0 20 0 21 0 22 0 24 0 v 36 5 66 814250000000001 130 177
  • pip 安装软件包两次

    不幸的是我无法重现它 但我们已经见过几次了 pip 将一个软件包安装两次 如果卸载第一个 第二个就会可见并且也可以被卸载 我的问题 如果一个包安装了两次 如何用 python 检查 背景 我想编写一个测试来检查这一点 devOp Updat
  • Python正则表达式从字符串中获取浮点数

    我正在使用正则表达式来解析字符串中的浮点数 re findall a zA Z d d t 是我使用的代码 这段代码有问题 如果数字和任何字符之间没有空格 则不会解析该数字 例如 0 1 2 3 4 5 6 7 8 9 的预期输出为 0 1
  • 大型数据集上的 Sklearn-GMM

    我有一个很大的数据集 我无法将整个数据放入内存中 我想在这个数据集上拟合 GMM 我可以用吗GMM fit sklearn mixture GMM 重复小批量数据 没有理由重复贴合 只需随机采样您认为机器可以在合理时间内计算的尽可能多的数据
  • Jupyter Notebook:没有名为 pandas 的模块

    我搜索了其他问题 但没有找到任何有帮助的内容 大多数只是建议您使用 conda 或 pip 安装 pandas 在我的 jupyter 笔记本中 我试图导入 pandas import pandas as pd 但我收到以下错误 Modul
  • Spyder 如何在同一线程的后台运行 asyncio 事件循环(或者确实如此?)

    我已经研究 asyncio 模块 功能几天了 因为我想将它用于我的应用程序的 IO 绑定部分 并且我认为我现在对它的工作原理有一个合理的理解 或者在至少我认为我已经理解了以下内容 任一时刻 任一线程中只能运行一个异步事件循环 一旦一切都设置
  • 最小硬币找零问题——回溯

    我正在尝试用最少数量的硬币解决硬币找零问题 采用回溯法 我实际上已经完成了它 但我想添加一些选项 按其单位打印硬币数量 而不仅仅是总数 这是我下面的Python代码 def minimum coins coin list change mi
  • issubclass() 对从不同路径导入的同一类返回 False

    目的是实现某种插件框架 其中插件是同一基类 即 A 的子类 即 B 基类使用标准导入加载 而子类使用 imp load module 从众所周知的包 即 pkg 的路径加载 pkg init py mod1 py class A mod2
  • 从数据集的给定日期范围中提取属于一天的数据

    我有一个数据集 日期范围为 2018 年 1 月 12 日到 8 月 3 日 其中包含一些值 维数为my df数据框是 my df shape 9752 2 每行包含半小时频率 第一行开始于2018 01 12 my df iloc 0 D

随机推荐