云上如何实现 Autoscaling: AutoMQ 的实战经验与教训

news2024/12/24 9:51:22

01 背景

弹性是云原生、Serverless 的基础。AutoMQ 从软件设计之初即考虑将弹性作为产品的核心特质。对于 Apache Kafka 而言,由于其存储架构诞生于 IDC 时代,针对物理硬件设计,存储层强依赖本地存储,已不能很好地适应现在云的时代了。当然,这并不意味着我们要放弃 Kafka。Kafka 凭借极其优异的生态已经塑造了其在流处理领域不可撼动的地位,Kafka API 俨然已经成为流处理协议的事实标准。正是因为看到了这一点,AutoMQ 积极拥抱 Kafka 生态,在完全兼容其计算层的基础上,对底层存储做了云原生的改造,充分兑现云的规模化成本、技术红利。
AutoMQ 利用对象存储、云盘构建了一个拥有极速弹性能力的内核底座,使得我们在云上实现自动弹性(下文均称 Autoscaling)成为可能。本文将介绍 AutoMQ 是如何在云上实现 Autoscaling 的,并且分享我们在实践过程中的经验与教训。

02 什么是 AutoMQ 追求的 Autoscaling

对于流处理系统来说,Autoscaling 的关键在于其可以动态调整其容量来满足不同的写入工作负载。当写入流量变多时,集群可以快速扩容拓展集群性能用于承载突增的流量;当写入流量变少甚至为零时,集群可以缩小规模,减少资源开销,甚至做到 scale to zero 的目标,没有任何资源的使用。

我们认为,具备最佳 Autoscaling 能力的产品一定是具备如下特质的:

ꔷ 构建于公有云上或者具备一定规模的私有云上:云的本质是资源的整合和复用带来的技术、成本红利。在这一点上具备最大使用规模的公有云一定是最有优势的。自动弹性的价值在于当你不再使用某一项资源时,你可以尽快释放它,从而避免额外的成本开销;而当你重新需要资源时,通过资源池的预留资源你可以以最快的速度获取到所需的资源。在这一点上来说,公有云的大规模则最具优势。虽然私有云也可以做到类似的效果,但是同样预留 10%的限制资源,在私有云环境可能是 100 台机器,在 aws 上可能是 10000 台机器,大家弹性的上限是不同的。

Tips: 当前以及未来一定仍然会有一些场景需要在非云环境上进行部署。但是按照近年来的趋势,例如 Kubernetes 的兴起,我们可以预见的是,私有环境的技术底座未来和公有云是趋同的。在私有环境也可以提供类似云盘(openebs)、对象存储(minio)这样的能力。

ꔷ 可以充分发挥云服务的能力:AutoMQ 的核心理念是充分利用云上成熟、具备规模优势和技术红利的云服务来构筑自身领先的产品力。对于弹性方面,我们对多云经过了充分的调研,观察到计算实例的弹性伸缩组(或称节点组)已经成为一项标准功能。因此,AutoMQ 在实现自动弹性时充分利用了云端弹性伸缩组服务,以帮助实现快速部署生产级弹性能力。

Tips: 由于弹性伸缩组包括其配套的弹性能力在各个云上都是趋同的,下文即直接以 AWS 的云服务为例来阐述。

从技术指标上来说,AutoMQ 追求的 Autoscaling 一定是:

ꔷ 弹得快:这里弹得快,我们主要是指的扩容。对于生产级系统来说,我们往往遵循“快弹慢缩”的最佳实践来保证整个弹性伸缩对业务是无感的。 从 AutoMQ 集群开始接收突增的写入流量开始到集群完成扩容,并且最终写入吞吐流量提升到目标吞吐值的耗时越短,则我们认为弹得越快。

ꔷ 弹得准:弹得准主要包含两层含义。一层含义是容量的调整需要尽快稳定在目标容量,而不要因为一些弹性策略的设置导致一些容量抖动。另外一层含义是弹的目标容量要尽量接近实际的需求,不要多弹或者少弹。多弹过多的容量会造成资源浪费,少弹容量则会影响消息端到端的延迟。

ꔷ 弹得省:自动弹性主要依赖监控信息来确定何时进行扩容或者缩容。存储、管理和应用 metric 都会产生一些额外的成本。

03 Autoscaling 技术架构

由于充分利用了云的能力,AutoMQ 完成自动弹性的架构变得十分的简单。主要涉及如下组件:

ꔷ Auto Scaling Group (缩写为 ASG): AWS 提供的弹性伸缩组可以将一组 EC2 计算实例作为一个逻辑分组。以计算实例组为单位进行容量管理,并且提供了配套的机器监控、弹性、生命周期钩子等能力。该服务在各个云上均是免费使用的能力。

ꔷ Cloud Watch: AWS  云监控,可以配置监控与报警,用于触发 ASG 的容量调整。AWS 对 EC2 提供了免费的机器监控(粒度为 5 分钟)。在一些弹性速度要求低的场景,可以充分利用云厂商提供的这种免费能力来降低成本。

ꔷ AutoMQ Control Panel: AutoMQ 的控制面,负责与云的 API 进行交互,创建 ASG 弹性策略以及将 Cloud Watch 中的报警模块关联 ASG 的弹性策略。这样可以保证满足报警阈值时,可以触发 ASG 容量的调整。对于 ASG 来说,只要将弹性策略和对应的 metric 阈值关联好,满足阈值后的容量调整是自动进行的。

04 云上 Autoscaling 的挑战

4.1 理解云提供的不同弹性策略的特征以及组合效果

云厂商基本都提供了几种标准化的弹性策略,通过利用这些现成的弹性策略 AutoMQ 可以快速构建起自身的 Autoscaling 能力。然而,在我们的实践过程中我们发现事情并没有那么简单。如果对云提供的这些弹性策略没有一个充分的理解的话,会导致一些弹性策略的错误使用,并且无法达到预期的效果。
下面分享下 AutoMQ 对 AWS ASG 提供的几种弹性策略(其他云也是近似的)应用的心得。

4.1.1 简单策略

简单策略[1]是基于 metric 来报警触发的。报警触发时可以选择的行为包括扩、缩 x 台计算实例。其优点是简单,缺点是不能精细化控制针对不同的情况,动态设置不同的步长,不太灵活。此外,值得注意的是,简单扩缩在扩缩活动开始后,该策略必须等待扩缩活动或运行状况检查替换完成并且冷却时间到期,然后才会响应其他警报。冷却时间有助于防止在先前活动产生明显影响前启动其他扩展活动。

弹性策略的步长(step): 当弹性策略被满足,触发容量调整需要扩或者缩 x 台实例时,x 的大小即为步长。

冷却时间(cooldown): 在上一个扩缩容行为完成后需要等待的时间即为冷却时间。主要是为了预留时间让应用在机器扩缩容后进入稳态,才继续容量调整,使得扩缩容对应用来说感知更少,变化更加平滑。

4.1.2 步进策略

步进策略[1]可以理解成简单策略的优化版本。可以允许不同档位的监控阈值来配置不同的步长。例如,如果 CPU 使用率 75%-85%之间,增加 2 个实例;如果在 85%-95%之间,增加 3 个实例;如果超过 95%,增加 4 个实例。相比简单策略,可以有更加精细化的容量控制,从而避免容量弹多或者弹少。

4.1.3 目标跟踪策略

一般而言,我们是希望负载能够将容量充分利用以避免资源浪费。目标跟踪策略[2]的实现方式就是设置一个目标值,例如 CPU 使用率,然后由 AWS 自己去调节增加、减少机器,扩缩的步长可以自己的定义。那么到底怎样才算维持在目标值附近呢?AWS 默认采用的是容量优先的策略。例如,假设您将 CPU 使用率的目标值设置为 50%,然后 Auto Scaling 组超过了该目标。我们可以确定,添加 1.5 个实例会将 CPU 使用率降低到接近 50%。由于不可能添加 1.5 个实例,我们将该值向上取整,添加两个实例。这可能会将 CPU 使用率降至 50% 以下,但可确保应用程序具有充足的支持资源。同样,如果我们确定删除 1.5 个实例可使 CPU 使用率提高到 50% 以上,我们将只删除一个实例。

AutoMQ 最早实践目标跟踪策略时,实际是希望其可以动态调整步长,更快、更准的帮助我们弹到目标容量。但是实际应用中发现,其效果根本没有那么智能。自己通过组合简单策略反而可以实现比目标跟踪策略有更好的灵活性。例如,目标跟踪策略不允许你自定义扩缩容的步长调整。

4.1.4 预测试扩展

适用于周期性负载(至少需要 24 小时数据),AWS 自己会用机器学习去尽量拟合负载。可以配合其他扩展策略一起执行。AutoMQ 一开始就没有尝试该弹性策略。一方面,AutoMQ 作为通用的流处理系统,不仅仅会应用在周期性负载的场景,二来我们也没法预测用户到底会采用怎样的工作负载。

4.1.5 计划扩展

本质就是定时扩展,可以设置定时任务设置容量,适合大促这类对目标容量有明确感知的场景。

4.1.6 多个弹性策略冲突时如何工作

不同云厂商之间弹性策略冲突时的处理方式不同,正确使用弹性策略需要充分理解弹性策略冲突时的表现。例如阿里云上弹性策略冲突时候会叠加两个弹性策略执行最终的结果。例如一个弹性策略需要扩容4台,另外一个需要缩容2台则最终结果为扩容2台。而 AWS 提供的弹性策略则主要是优先保证容量从而保证可用性。当多个弹性策略冲突时候,云会优先选择执行后具有更大容量的弹性策略。

4.2 寻找触发弹性执行的金指标

弹性策略只是一个执行的逻辑计划。何时触发弹性策略的执行是实践中的重要挑战。弹性策略执行的触发条件是基于监控数据来触发的。寻找一个触发弹性的金指标是自动弹性弹得准的关键。然而实际生产应用中,部署机型、工作负载等都会影响到金指标的选择。
理想情况下,我们希望应用内核可以提供一个金指标。任何外部环境的瓶颈例如 CPU Load 过高、网络流量瓶颈等最终都可以反应到这个唯一金指标。可惜的是, Kafka 本身在内核侧并没有提供这样的一个指标。当前 AutoMQ 提供的自动弹性默认是根据网络流量来确定触发的时机的。根据我们的判断,弹性金指标必然不是一个单一指标,而是一个组合多个因子和权重的综合指标。包含的关键因子可以包括 broker 机器的网络上下行流量、CPU 使用率、内存使用率、磁盘 IOPS 和带宽等。在不同负载和硬件环境下,这些因子的权重也会有所不同。未来理想的情况是 AutoMQ 提供一个默认的多因子指标来指导弹性的触发,用户同时可以自定义参与组合指标的因子及其权重。

4.3 AutoMQ 最终应用的弹性策略

4.3.1 定时弹性

AutoMQ 实际采用的弹性策略本质是一个基于简单策略自己实现的目标跟踪策略再配合一个可选的定时弹性策略。默认的目标跟踪策略的扩缩行为为了保证平滑地执行弹性和避免资源过于浪费,没有设置采用很大的步长。但是,实际很多业务场景例如电商大促或者外卖行业在特定时段都会有突增的流量,这个仅仅依靠默认的弹性策略来扩是来不及扩容的。因此提供可选的定时弹性策略对于弹性的生产应用是十分重要的。定时弹性,本质是人提前做了容量规划,属于一种启发式弹性,当流量峰值过去以后,集群又会自动缩容到指定容量。定时弹性策略利用云底座提供的能力基于 cron 表达式配置定时执行的时间并且配置目标容量信息即可。例如下图的定时弹性策略比较符合餐饮行业,每天上午 11 点时执行扩容,扩容到指定容量 20;当下午 2 点时再重新缩容会一个较小的目标容量。

4.3.2 自定义目标跟踪策略

AutoMQ 基于简单策略实现了自定义的目标跟踪策略。该策略当前默认使用的是基于网络流量来触发弹性的执行的,在通用场景下可以满足绝大部分要求。相比云默认提供的目标跟踪策略具备更好的灵活性,可以做快扩慢缩,在实际生产应用中具有更加稳健的弹性效果。自定义目标跟踪策略主要由一个负责扩的简单弹性策略和一个负责缩的简单弹性策略构成。自定目标跟踪策略中,针对扩、缩的步长我们采用了按比例的调整,这样可以保证在不同集群规模下都有相同的扩缩容效率。在 AWS 上 ASG 上展现的弹性策略内容如下。

由于大部分云都有提供这种默认机器指标的采集,AutoMQ 默认的弹性策略不需要自己采集和管理这些 metric 指标。我们可以最大化利用这些云的能力来降低我们自身实现的复杂度。首先定义下弹性策略中参与表达式计算的变量:

ꔷ network-in byts(nin): 每个 metric 上报间隔内累计的网络流入字节数;

ꔷ network-in bytes per second(nins): aws 计算每秒字节数可以用表达式 nins=nin/DIFF_TIME(nin)来得到每秒网络流入字节数;

ꔷ network-out(nout): 每个 metric 上报间隔内累计的网络流出字节数;

ꔷ network-out bytes per seconds(nouts):aws 计算每秒字节数可以用表达式 nouts=nin/DIFF_TIME(nout)来得到每秒网络流出字节数;

ꔷ active instance count in asg(acount): asg 中活跃的实例数,因为 aws 默认采集的是 group 合计的指标,计算单台 broker 的流量时需要除一下 asg 内 broker 机器的个数;

ꔷ upper: 扩容网络流量阈值,默认值为机型网络带宽上限的 80%,用户也可以自定义该值;

ꔷ lower:  缩容网络流量阈值,默认值为机型网络带宽下限的 50%,用户也可以自定义该值;

负责扩容的简单弹性策略公式如下,该公式含义表示:入或者出的 broker 平均网络流量较大值超过设定的平均网络带宽时,则按照我们设定的步长(默认为扩容当前容量的 10%,且至少为 1 台)来进行扩容。这里值得注意的是,云厂商提供的计算实例,假设网络带宽是 100MB/s,意味着其入和出分别为 100MB/s。

max(nins/acount,nouts/acount) > upper

负责缩容的简单弹性策略公式为如下,该公式含义表示:同时满足以下三个条件时才进行缩容:

ꔷ 当前存活的 broker 数至少为 1,不允许缩至 0 台

ꔷ 入或出的 broker 平均网络流量较大值低于设定的阈值下限时才允许缩容

ꔷ 第三部分计算的实际就是假设当前 broker 数量减少 1 台,然后按照扩容的公式去计算值,需要确保其小于我们设定的阈值 upper。

这种方式主要是为了避免小规模集群时候缩容一台以后马上扩容的行为出现。在小规模集群上,这种频繁的扩缩容对集群的影响就会比较大。

acount>1 、( max(nins/acount,nouts/acount)  < lower )  && ( max(nins/acount-1,nouts/acount-1) < upper )

05 自动弹性效果展示

下图展示了 AutoMQ 在一个流量有变化的负载下,集群规模和集群网络流量的变化关系,可以看到 Broker 数量很好的拟合了流量曲线的变化,达到了自动弹性的效果。对于经常有变化的负载,开启自动弹性可以大大节约成本,达到 pay-as-you-go 的效果。关于具体的实验测试,可以参考我们的成本报告[4]。

06 展望 AutoMQ Autoscaling 的未来

当前提供的自动弹性能力仍然有很多值得优化的地方,他们包括:

ꔷ 更加有效的弹性策略触发金指标:提供用于弹性策略的默认组合指标及其配套的产品化能力。默认的组合指标可以使得默认弹性策略可以去适配更多的场景。提供产品化能力则可以让用户根据自己的场景灵活调整指标的构成和权重,从而带来更加精准的弹性效果。

ꔷ 多云自动弹性的适配:当前我们仍然有一些云平台尚未支持自动弹性。不同云厂商提供的云监控、报警以及机器监控自动采集能力上会存在差异。让自动弹性能力适配更多的云有利于我们构建多云一致的自动弹性能力。

ꔷ 自定义监控采集和发布:在我们实践过程中发现不同云厂商提供的云监控提供的能力和 SLA 都有所不同。在一些比较严苛的场景,云厂商默认提供的监控采集与发布可能是不够的。例如 AWS 默认机器监控的最小粒度为 1 分钟。如果需要更加极速的弹性,提供一种 AutoMQ 自行采集和上报监控数据的模式也是有必要的。一方面可以使用更加灵活可控的监控数据,另外一方面也可以在监控指标的采集、存储上持续优化降低这块基础设施的成本。

ꔷ K8S 上自动弹性:关于 k8s,我们初期其实已经使用 AutoScaler [5]做过了一些探索。k8s 作为当前云原生领域的重要力量,具有大量的用户基础。AutoMQ 也会及时跟进,让大家在 k8s 上一样可以使用到 AutoMQ 自动弹性的能力。

参考资料

[1] Step and simple scaling policies for Amazon EC2 Auto Scaling: https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-scaling-simple-step.html

[2] Target tracking scaling policies for Amazon EC2 Auto Scaling: https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-scaling-target-tracking.html

[3] Basic monitoring and detailed monitoring: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-metrics-basic-detailed.html

[4] AutoMQ 成本分析报告:https://docs.automq.com/zh/docs/automq-s3kafka/EJBvwM3dNic6uYkZAWwc7nmrnae

[5] AutoScaler:  https://github.com/kubernetes/autoscaler

关于我们

我们是来自 Apache RocketMQ 和 Linux LVS 项目的核心团队,曾经见证并应对过消息队列基础设施在大型互联网公司和云计算公司的挑战。现在我们基于对象存储优先、存算分离、多云原生等技术理念,重新设计并实现了 Apache Kafka 和 Apache RocketMQ,带来高达 10 倍的成本优势和百倍的弹性效率提升。

🌟 GitHub 地址:https://github.com/AutoMQ/automq

💻 官网:https://www.automq.com

👀 B站:AutoMQ官方账号

🔍 视频号:AutoMQ

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

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

相关文章

【网络】:高级IO(一)

高级IO 一.五种IO模型二.多路转接&#xff08;select&#xff09;三.非阻塞IO&#xff08;funcl&#xff09;四.POLL IO等待拷贝。单位时间内&#xff0c;IO过程中&#xff0c;等的比例越小&#xff0c;IO就越高效。几乎所有提高IO效率的方式本质都是基于此。 一.五种IO模型 举…

深入解析:前端跨域问题及其CORS、代理、JSONP、Nginx反向代理等解决方案

前端跨域是指在浏览器环境下&#xff0c;当一个网页&#xff08;源&#xff09;尝试访问与自身源不同的服务器资源&#xff08;目标源&#xff09;时&#xff0c;由于浏览器的同源策略限制而产生的访问限制现象。同源策略&#xff08;Same-Origin Policy&#xff09;是浏览器实…

芜湖市夜间景区、文娱主题活动、夜读空、精品文艺演出、数字促销补助等夜间经济奖励政策申报条件、材料

芜湖市示范街区、示范门店、夜间景区、文娱主题活动、体育赛事、夜读空、精品文艺演出、数字促销补助等夜间经济奖励政策申报条件、材料及补贴标准整理如下 芜湖市2023年促进夜间经济发展若干政策申报时间&#xff1a; 针对2023年度促进夜间经济发展若干政策&#xff08;商务局…

❤️新版Linux零基础快速入门到精通——第一部分❤️

❤️新版Linux零基础快速入门到精通——第一部分❤️ 非科班的我&#xff01;Ta&#xff01;还是来了~~~1. 来认识一下Linux吧!1.1 操作系统概述1.1.1 操作系统概述1.1.2 操作系统的发展史1.1.2.1 Unix1.1.2.2 Minix1.1.2.3 Linux 1.1.3 操作系统的发展 1.2 Linux初识1.2.1 Lin…

二叉检索树的实现——增删改查、读取命令文件、将结果写入新文件

看这篇文章前的知识储备 链接: 二叉树的性质和分类 链接: 二叉检索树的概念 、insert方法的图解、实现、时间代价分析 链接: 二叉检索树的search、remove方法的图解、实现、时间代价分析 1、中序遍历及中序遍历写进文件的区别 两者思路一致&#xff0c;将二叉树分为三部分&…

Linux信号(产生)

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 目录 信号是什么&#xff1f; 为什么要有信号&#xff1f; 信号是如何产生的&#xff1f; kill命令 键盘产生信号 系统调用 kill系统调用 raise函数 abort函数 自制kill命令 ​编辑 软件条件 举例一&#xff1…

C++ :设计模式实现

文章目录 原则单一职责原则开闭原则依赖倒置原则接口隔离原则里氏替换原则 设计模式单例模式观察者模式策略模式代理模式 原则 单一职责原则 定义&#xff1a; 即一个类只负责一项职责 问题&#xff1a; 类 T 负责两个不同的职责&#xff1a;职责 P1&#xff0c;职责 P2。当…

大数据第六天

这里写目录标题 问题解决问题查询插入(时间慢)练习sql数据清理 问题 FAILED: ParseException line 1:16 mismatched input ‘input’ expecting INPATH near ‘local’ in load statement MismatchedTokenException(24!155) 加载数据的时候出现了这个错误&#xff0c;我们解释…

【六十】【算法分析与设计】用一道题目解决dfs深度优先遍历,dfs中节点信息,dfs递归函数模板进入前维护出去前回溯,唯一解的剪枝飞升返回值true

路径之谜 题目描述 小明冒充X星球的骑士,进入了一个奇怪的城堡。 城堡里边什么都没有,只有方形石头铺成的地面。 假设城堡地面是nn个方格。如下图所示。 按习俗,骑士要从西北角走到东南角。可以横向或纵向移动,但不能斜着音走,也不能跳跃。每走到一个新方格,就要向正北 方和正西…

短信视频提取批量工具,免COOKIE,博主视频下载抓取,爬虫

痛点&#xff1a;关于看了好多市面的软件&#xff0c;必须要先登录自己的Dy号才能 然后找到自己的COOKIE 放入软件才可以继续搜索&#xff0c;并且无法避免长时间使用 会导致无法正常显示页面的问题。 有没有一种方法 直接可以使用软件&#xff0c;不用设置的COOKIE的方法呢 …

对于地理空间数据,PostGIS扩展如何在PostgreSQL中存储和查询地理信息?

文章目录 一、PostGIS扩展简介二、PostGIS存储地理空间数据1. 创建空间数据表2. 插入空间数据 三、PostGIS查询地理空间数据1. 查询指定范围内的地理空间数据2. 计算地理空间数据之间的距离3. 对地理空间数据进行缓冲区分析 四、总结 地理空间数据是指描述地球表面物体位置、形…

开源社区与开发者的故事

开源社区与开发者的故事 什么是开源社区你参加开源社区的主要目的你是否在开源社区中贡献&#xff0c;或者开源自己的项目&#xff1f;你认为个人开发者是否应该从开源中获利&#xff1f;如果是&#xff0c;该如何获利&#xff1f; 今天要谈及的主题是开源社区&#xff0c;那么…

2024年新算法-牛顿-拉夫逊优化算法(NRBO)优化BP神经网络回归预测

亮点&#xff1a; 输出多个评价指标&#xff1a;R2&#xff0c;RMSE&#xff0c;MSE&#xff0c;MAPE和MAE 满足需求&#xff0c;分开运行和对比的都有对应的主函数&#xff1a;main_BP, main_NRBO, main_BPvsBP_NRBO&#xff0c;并且详细中文注释 方便快捷&#xff1a;替换…

打破企业差旅管理困局,让金融CEO眼前一亮的出行方案

在国内券商投行部工作是怎样一种体验&#xff1f; “长期出差&#xff0c;而且出长差&#xff0c;时常让人有漂泊的孤独感。”这是某问答平台上的高赞回答的第一条。 对金融人来说&#xff0c;说走就走的旅行可能根本没有什么吸引力&#xff0c;时刻准备着说走就走的出差才是生…

MVCC的执行原理

MVCC的执行原理 MVCC简介事务的隔离级别MVCC作用当前读和快照读MVCC实现原理Undo LogUndo Log 版本链Read View判断方法判断规则 小结 MVCC简介 MVCC&#xff08;Multi-Version Concurrency Control&#xff09;是一种并发控制机制&#xff0c;用于解决数据库并发访问中&#…

pyqt 动态更换表头和数据

目录 pyqt 动态更换表头和数据代码 效果图&#xff1a; pyqt 动态更换表头和数据代码 from PyQt5.QtGui import QColor, QBrush from PyQt5.QtWidgets import QApplication, QTableWidget, QVBoxLayout, QWidget, QPushButton, QTableWidgetItemclass Example(QWidget):def _…

如何诊断并解决PostgreSQL中的磁盘空间不足问题?

文章目录 诊断磁盘空间不足问题1. 检查服务器磁盘空间2. 检查PostgreSQL数据目录大小3. 检查PostgreSQL中的大表和大对象 解决磁盘空间不足问题1. 清理不必要的文件和日志2. 清理或压缩大表和大对象3. 扩展磁盘容量4. 优化数据库配置和查询 在使用PostgreSQL数据库时&#xff0…

华为云实验 -- 对云硬盘数据盘进行备份

文章目录 备份Linux系统备份1.购买Linux操作系统的ESC(云服务器)2.挂载数据盘--初始化--分区--格式化2.1.点击"远程登录"a.查看/dev/vdb数据盘b.新建主分区/dev/vdb1 2.2.查看新建分区大小,分区格式信息a.确定之前的分区操作是否正确b.确认完成后&#xff0c;将分区结…

【MATLAB源码-第32期】基于matlab的通信及雷达中常用伪随机码m序列的仿真。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 M序列&#xff0c;也称为最大长度序列或者伪随机序列&#xff0c;是一种特殊的二进制序列。它的特点是在有限的长度内&#xff0c;尽管它是伪随机的&#xff0c;但它会在特定的周期内不重复地循环。 在数学上&#xff0c;M序…

利用fft算法重写公式并理解频率和像素变化率的关系(完美解决问题)

算法我就不贴了。算法就是算法导论的内容。 我直接写推导过程。 假设变化率为f(n1)-f(n) 首先计算二进制数&#xff0c;这里我假设为3位二进制。 例如:f(5)-f(4)&#xff0c; 5和4的二进制为101,100。所以逆序数为101&#xff0c;001 101对应的频率为5, 001对应的频率为1…