小研究 - 主动式微服务细粒度弹性缩放算法研究(四)

微服务架构已成为云数据中心的基本服务架构。但目前关于微服务系统弹性缩放的研究大多是基于服务或实例级别的水平缩放,忽略了能够充分利用单台服务器资源的细粒度垂直缩放,从而导致资源浪费。为此,本文设计了主动式微服务细粒度弹性缩放算法。算法通过预测请求到达率对系统进行资源预配置。基于预测结果,应用平方根配置规则计算需求资源数量,进而利用垂直缩放的细粒度资源控制特性和水平缩放的高可用性对微服务进行伸缩。最后应用基于微服务依赖关系的实例迁移算法进一步降低资源开销。实验表明,本文提出的算法在优化微服务系统时延和开销方面取得了显著效果。

目录

4 算法仿真及结果分析

4.1 实验数据生成

4.2 数据预处理

4.3 实验参数设置

4.4 实验结果分析

4.4.1 GRU-LR-𝟒 − 𝛔预测算法性能分析 预测算法性能分析

 4.4.2 垂直与水平相结合的缩放算法性能分析


4 算法仿真及结果分析

本实验对 GRU 预测模型的实现基于 Python3 完成,其他部分应用 java 语言完成仿真。

4.1 实验数据生成

本实验同时考虑五条微服务链在云数据中心的弹性缩放,每条服务链包含 5 个微服务。为了对动态缩放算法进行更全面的评估,本文通过 Abdullah 等人和李德方提出的负载生成方法为五条微服务链构建具有不同特征的请求到达率,并基于生成的请求到达率对预测模型和弹性缩放算法进行性能评估。本实验以 5 分钟为一个时隙,共生成 576 个时隙(即 48 小时)的请求到达率。

(1) 微服务链𝑜 1 :请求到达率线性增加。本实验采用公式(39)生成𝑜 1 的请求到达率。𝜇 1 (𝑢 + 1) = 𝜇 1 (𝑢 0 ) + 𝑢𝛥𝑏 + 𝑡 𝑑 𝑆𝑏𝑜𝑒(ℕ(0,1)) 。其中,𝜇 1 (𝑢 0 )即初始状态的请求到达率。𝑢表示第𝑢个时
隙,𝛥𝑏为固定值,本实验取 0.2。𝑡 𝑑 为随机噪声比例因子,取值为 0.5,𝜇 1 (𝑢 0 ) = 5。

(2) 微服务链𝑜 2 :请求到达率周期性变化。本实验采用公式(40)生成𝑜 2 的请求到达率

其中,𝛽是振幅,𝜇 2 (𝑢 0 )是初始状态的请求到达率,p表示周期。本实验中,𝛽 = 10,p = 200,𝜇 2 (𝑢 0 ) = 10。本实验采用 Gaussian 函数生成微服务链𝑜 3 、𝑜 4 和𝑜 5 的请求到达率。流量峰值可能出现在任意时刻,因此服务链的请求到达率是多个 Gaussian 函数的叠加。

(3) 微服务链𝑜 3 :请求到达率峰值集中在白天。

4.2 数据预处理

将数据输入到 GRU 中训练之前,需要先对数据进行标准化处理。标准化处理将数据统一缩放到指定范围内,以避免数据相差太大导致小数值被忽略,同时还可降低计算复杂度。本文采用极大极小值标准化( Max-min Normalization )方法将数据映射到区间[0,1]内。

4.3 实验参数设置

本实验对五条微服务链的请求流量分别应用 GRU 模型进行调参训练。其中,训练轮次、模型训练时进行梯度下降的每个 batch 中的样本数 batch_size 以及 Adam 算法的学习率分别为 30 、 64 、 0.001 。 GRU 神经网络隐藏层数取值为 1 ,隐藏层单元数在区间 [50,100] 内取值,时间步长在区间 [1,20]内取值,最终综合预测精度和训练预测时长。

预测模型中应用线性回归进行短期流量预测的时间窗口𝑥 𝑡 取值为 3。动态缩放实验中,每条服务链包含5 个微服务,服务器核心对微服务的服务率在 5-10 之间变化,每台服务器最大核心数为 8.动态实验时隙个数T 取值为 50,SR Rule 中排队概率阈值δ默认取值为 0.1。

4.4 实验结果分析
4.4.1 GRU-LR-𝟒 − 𝛔预测算法性能分析 预测算法性能分析

本文采用 GRU-LR-3σ算法对微服务请求到达率进行预测的效果如图 7 所示。从图 7 的预测效果图中可看出,对于具有不同特征的请求流量,通过 GRU-LR-3σ算法预测的到达率与真实到达率十分接近,GRU-LR-3σ算法的预测值在部分时刻略大于实际值,但总体来看二者相差并不大。因此,GRU-LR-3σ预测模型对预测的平均流量进行扩展可保留适当冗余资源以提升服务性能,但不会造成很大的资源浪费,这得益于 GRU-LR-3σ算法采用相对估计误差的标准差作为σ的取值,从而避免了过度的资源消耗。

 

 4.4.2 垂直与水平相结合的缩放算法性能分析

本实验以首次适应降序放置算法( First FitDecreasing,FFD )和随机缩放算法( Random )为对比算法对本文提出的基于垂直和水平的相结合的微服务缩放算法( HABVH )进行性能评估,FFD 和 Random算法介绍如下:

(1) FFD:FFD 算法在进行服务扩展时,首先对服务器剩余核心数降序排序,然后从有序列表末尾开始寻找刚好能满足待扩展实例核心需求的服务器,如果搜索完有序列表后未找到适合的服务器,则重启服务器进行实例扩展。当实例需要收缩时,FFD 算法采用与HABVH 相同的实例收缩算法回收资源。

(2) Random:Random 算法从所有满足待扩展实例核心需求的服务器中随机选择一台服务器进行实例扩展,如果没有满足需求的服务器,则重启一台服务器。同样地,Random 算法也采用与 HABVH 相同的实例收缩算法回收资源。本实验选取生成的五个数据集的第 461 至第 511共 50 个时隙内的请求到达率作为动态实验的流量输入,微服务系统请求总到达率为五个数据集的请求到达率之和,时隙 461 至时隙 511 内的请求总到达率。

本文通过设置请求排队概率控制系统对用户的响应时延,为了展示不同排队概率约束下 HABVH 算法的性能,本实验评估了请求到达率为图 9 所示的总到达率,请求排队概率阈值δ分别设置为 0.1、0.2、0.5、0.8 时 HABVH 算法对微服务系统的优化结果,实验结果如图 11 所示。

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

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

相关文章

Centos安装libwebcam库运行 uvcdynctrl 命令

Centos 软件包仓库中没有 libwebcam 库,因此需要下载源文件手动编译 源文件地址:https://github.com/lucasrangit/libwebcam 解压后进入项目文件夹 mkdir build cd build cmake .. make make install 如果使用uvcdynctrl提示找不到库,则 vi…

k8s apiserver如何支持http访问?

原本是可以通过设置api-server的--insecure-port来实现,但是这个参数已经被废弃了,更好的方法则是使用proxy来实现: 在集群任意一个节点上起一个proxy服务,并设置允许所有host访问: kubectl proxy --address0.0.0.0 …

Java 版 spring cloud + spring boot 工程系统管理 工程项目管理系统源码 工程项目各模块及其功能点清单

工程项目各模块及其功能点清单 一、系统管理 1、数据字典:实现对数据字典标签的增删改查操作 2、编码管理:实现对系统编码的增删改查操作 3、用户管理:管理和查看用户角色 4、菜单管理:实现对系统菜单的增删改查操…

基于以太坊+IPFS的去中心化数据交易方法及平台

自己的论文,哎费事 目录 基于以太坊IPFS的去中心化数据交易方法及平台 基于以太坊IPFS的去中心化数据交易方法及平台 摘要: 数据交易过程中存在数据权属不明和数据安全问题。本文开发了一种基于以太坊IPFS的去中心化数据交易方法及平台。方法包括&am…

IPv4网络用户访问IPv6网络服务器

NAT64静态映射为一对一的对应关系&#xff0c;通常应用在IPv4网络主动访问IPv6网络的场景中。 要求位于IPv4网络中的PC通过IPv4地址1.1.1.10能够直接访问位于IPv6网络中Server。 操作步骤 配置FW。 # 配置接口GigabitEthernet 0/0/1的IPv4地址。 <FW> system-view [F…

使用okHttp不走代理问题

背景 okHttp处理流程 okHttp & 代理 为什么没走代理 okhttp选择proxy时&#xff0c;现将传入的url传换为uri&#xff0c;如果uri的host为空&#xff0c;okhttp选择直连url&#xff0c;放弃走代理 okhttp3.internal.connection.RouteSelector private fun resetNextProxy(…

1047. 删除字符串中的所有相邻重复项

给出由小写字母组成的字符串 S&#xff0c;重复项删除操作会选择两个相邻且相同的字母&#xff0c;并删除它们。 在 S 上反复执行重复项删除操作&#xff0c;直到无法继续删除。 在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。 示例&#xff1a; 输入&#xff1a…

FFmpeg-channel rematrix

channel rematrix Channel rematrix 是一种音频处理技术&#xff0c;用于将多声道音频转换为不同的多声道格式。它可以将一个多声道音频信号从一种布局转换为另一种布局&#xff0c;例如从 5.1 到 7.1 或从立体声到环绕声。 ffmpeg中的rematrix可以通过fixter完成&#xff0c…

IP 工具

什么是IP 工具 IP 工具是用于轻松扫描和排除网络 IP 地址空间故障的网络工程工具。IP 工具使网络管理员能够审核、跟踪和监视 IP 地址、子网以及使用 IP 的设备和主机的性能。这个全面的网络工程工具集包括高级 IP 工具&#xff0c;如 Ping、系统资源管理器、MAC 地址解析器和…

[SQL挖掘机] - 存储过程

介绍: 当你在sql中需要多次执行相同的一组sql语句时&#xff0c;存储过程是一个非常有用的工具。它是一段预先定义好的sql代码块&#xff0c;可以被命名并保存在数据库中&#xff0c;以便重复使用。 存储过程可以包含多个sql语句、逻辑流程、条件判断和循环等&#xff0c;可以…

近7000万美元被盗:Curve被攻击事件分析

7 月 31 日&#xff0c;以太坊编程语言Vyper发布公告称&#xff0c;Vyper 0.2.15、0.2.16 和 0.3.0 版本的递归锁失效。随后Curve Finance等相关协议出现了漏洞攻击事件。 漏洞的根源都是某些版本的 Vyper 中出现故障的递归锁。攻击者通过反复重新签署合约&#xff0c;导致未经…

设计模式行为型——解释器模式

目录 什么是解释器模式 解释器模式的实现 解释器模式角色 解释器模式类图 解释器模式举例 解释器模式代码实现 解释器模式的特点 优点 缺点 使用场景 注意事项 实际应用 什么是解释器模式 解释器模式&#xff08;Interpreter Pattern&#xff09;属于行为型模式&…

​小程序 WxValidate.js ​再次封装

util.js // 合并验证规则和提示信息 const filterRules (objectItem) > {let rules {}, messages {};for (let key in objectItem) {rules[key] objectItem[key].rulesmessages[key] objectItem[key].message}return { rules, messages } }module.exports {filterRule…

html中非插件实现pdf预览【PC+H5】

这里只考虑非插件以外的方法&#xff0c;插件可以参考pdf.js 1. iframe标签 <iframe src"/file/read?fileaaa&typeupload" width"100%" height"800px"></iframe>经测试&#xff0c;chrome正常显示&#xff0c;firefox不能显示…

为什么要开源?

什么是开源&#xff1f; 开源软件是其源代码已由其版权所有者公开的软件。在真正的开源许可证下&#xff0c;软件是协作开发的&#xff0c;其他程序员可以查看、修改或使用自己的代码。这种“纯”开源模式通常被称为FOSS&#xff08;自由和开源软件&#xff09;。 开源的一个…

《零基础入门学习Python》第075讲:GUI的终极选择:Tkinter12

Tkinter 的基本组件我们已经介绍得七七八八了&#xff0c;剩下的一些我们在这节课全部都会讲解完毕。 &#xff08;一&#xff09;Message组件 Message&#xff08;消息&#xff09;组件是 Label 组件的变体&#xff0c;用于显示多行文本消息。众所周知&#xff0c;我们的Lab…

sqlalchemy flask长时间未使用 导致数据库连接失效

临时解决方案&#xff1a;在正式运行定时任务之前&#xff0c;先跑一个session.query()&#xff0c;相当于唤醒连接。 参考 https://blog.csdn.net/sinat_42483341/article/details/103723691

【腾讯云 Cloud Studio 实战训练营】Redisgo_task 分布式锁实现

文章目录 前言问题场景腾讯云 Cloud Studio Redisgo_task长短类型分布式场景介绍Redisgo_task实现原理SetNx(valueexpire)原子性子协程Done()时间点子协程中的Ticker Redisgo_task唯一外部依赖Redisgo_task Lock结构Redisgo_task架构健壮性设计Redisgo_task可扩展性Redisgo_tas…

MyBatis-Plus 和达梦数据库实现高效数据持久化

一、添加依赖 首先&#xff0c;我们需要在项目的 pom.xml 文件中添加 MyBatis-Plus 和达梦数据库的依赖&#xff1a; <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifac…

Docker 命令没有提示信息

问题描述 提示&#xff1a;这里描述项目中遇到的问题&#xff1a; linux安装docker后发现使用docker命令没有提示功能&#xff0c;使用 Tab 键的时候只是提示已有的文件 解决方案&#xff1a; 提示&#xff1a;这里填写该问题的具体解决方案&#xff1a; Bash命令补全 Docke…