RocketMQ 性能优化与调优策略(二)

实战演练:全方位调优策略

(一)细致入微的配置优化

  1. 生产者配置
    • sendMsgTimeout:此参数定义了生产者发送消息时等待 Broker 返回确认的最长时间,默认值为 3000 毫秒。若在该时间段内未收到确认,生产者会抛出异常。在网络不稳定或 Broker 负载较高的情况下,适当增加该值,可避免因超时而导致不必要的消息重发,提高消息发送的成功率。例如,在一个网络延迟较高的跨机房消息传递场景中,将sendMsgTimeout设置为 5000 毫秒,能有效减少因网络波动引起的发送超时问题。
    • retryTimesWhenSendFailed:表示消息发送失败后的重试次数,默认值为 2 次。当生产者发送消息失败时,会按照此参数设置的次数进行重试。在实际应用中,若业务对消息的可靠性要求极高,可适当增加重试次数,但需注意,过多的重试可能会增加系统的负载和延迟。比如,在金融交易系统中,为确保交易消息的准确传递,可将重试次数设置为 3 - 5 次。
    • compressMsgBodyOverHowmuch:当消息体大小超过该参数设定的值(默认 4096 字节,即 4KB)时,RocketMQ 会自动对消息体进行压缩,以减少网络传输和存储开销。在发送大量文本类消息时,合理调整此参数,可有效降低带宽占用和存储成本。例如,在日志收集系统中,若日志消息经常超过 4KB,可根据实际情况将compressMsgBodyOverHowmuch调整为 8192 字节,以提高消息处理效率。
    • maxMessageSize:规定了生产者能发送的最大消息大小,默认值为 4194304 字节(4MB)。若消息大小超过此限制,生产者会抛出异常。在设计消息结构时,需根据业务需求合理控制消息大小,避免因消息过大而导致发送失败。比如,在图片上传通知场景中,若消息中携带图片相关信息较多,可能需要调整maxMessageSize的值,以适应实际需求。
  1. 消费者配置
    • consumeThreadMin和consumeThreadMax:这两个参数分别定义了消费者线程池的最小线程数和最大线程数。consumeThreadMin默认值为 10,consumeThreadMax默认值为 64。消费者通过线程池来并发处理接收到的消息,合理调整线程数能有效提高消费速度。当消费负载较低时,保持较小的线程数,可减少系统资源的占用;当消费负载较高时,适当增加线程数,能加快消息的处理速度。例如,在一个电商订单处理系统中,在促销活动期间,订单消息量剧增,此时可将consumeThreadMax调整为 100,以提高订单处理的效率;而在平时业务量较小时,可将consumeThreadMin调整为 5,节省系统资源。

(二)精心规划的集群配置与优化

  1. 集群架构设计
    • 单 Master 模式:整个集群仅包含一个 Master 节点,这种模式配置极为简单,但存在严重的风险。一旦 Master 节点出现故障,如重启或宕机,整个服务将完全不可用,适用于本地测试环境,但绝不适用于线上生产环境。
    • 多 Master 模式:集群中全部是 Master 节点,没有 Slave 节点。这种模式的优点是配置相对简单,且单个 Master 节点的宕机或重启维护对应用的影响较小。在磁盘配置为 RAID10 时,即使机器宕机不可恢复,消息也不会丢失(异步刷盘会丢失少量消息,同步刷盘则一条不丢),性能表现较高。然而,其缺点是单台机器宕机期间,该机器上未被消费的消息在恢复之前不可订阅,会影响消息的实时性。例如,在一些对消息实时性要求不高的日志收集系统中,可以采用多 Master 模式。
    • 多 Master 多 Slave 模式(异步):每个 Master 节点都配置一个 Slave 节点,采用异步复制方式。这种模式下,即使磁盘损坏,消息丢失量也极少,消息实时性不受影响。而且,当 Master 宕机后,消费者仍可从 Slave 消费,此过程对应用透明,无需人工干预,性能与多 Master 模式几乎相同。不过,在 Master 宕机且磁盘损坏的情况下,会丢失少量消息。例如,在电商的订单消息处理中,若允许少量消息丢失的情况存在,可采用这种模式。
    • 多 Master 多 Slave 模式(同步):同样每个 Master 节点配置一个 Slave 节点,但采用同步双写方式,即只有主备都写成功,才向应用返回成功。这种模式的数据与服务都无单点故障,Master 宕机时消息无延迟,服务可用性与数据可用性都非常高。但缺点是性能比异步复制模式略低(大约低 10% 左右),发送单个消息的 RT(响应时间)会略高,且目前版本在主节点宕机后,备机不能自动切换为主机。在金融交易系统等对数据一致性和可靠性要求极高的场景中,多 Master 多 Slave 模式(同步)是较为合适的选择。
  1. 负载均衡策略
    • 负载均衡原理:在 RocketMQ 集群中,负载均衡旨在将生产者发送的消息以及消费者的请求均匀地分配到各个 Broker 节点上,以充分利用集群资源,避免单点过载,从而提升系统的整体性能和可用性。
    • 负载均衡算法:RocketMQ 主要采用轮询算法和随机算法进行负载均衡。轮询算法按照一定的顺序依次将消息分配到各个队列或 Broker 上,确保每个队列或 Broker 都能被均匀地使用;随机算法则是随机选择队列或 Broker 进行消息分配,这种方式简单且在一定程度上能实现负载均衡。
    • 策略优化:为了使负载更加均衡,可以根据 Broker 节点的性能指标,如 CPU 使用率、内存使用率、磁盘 I/O 等,动态调整负载均衡策略。例如,当某个 Broker 节点的 CPU 使用率过高时,减少分配到该节点的消息量;当某个 Broker 节点的内存充足且磁盘 I/O 性能较好时,适当增加分配到该节点的消息量。同时,结合消息的优先级和业务场景,对不同类型的消息进行差异化的负载均衡,进一步提高系统的性能和稳定性。

(三)匠心独运的存储模型选择与优化

  1. 存储模型解析
    • RocketMQ 存储模型:RocketMQ 采用混合型存储结构,Broker 单个实例下所有的队列共用一个数据文件(commitlog)来存储消息主体及元数据。同时,通过消费文件(consumequeue)和索引文件(index)来提高消息消费和查询的效率。
    • 优缺点分析:这种存储模型的优点是,由于消息顺序写入 commitlog,能充分利用磁盘的顺序写特性,大大提高写入性能;而且,通过 consumequeue 和 index 文件的辅助,能快速定位和查询消息。然而,其缺点是读操作变成了随机读,因为需要先读 consumequeue,再读 commitlog 才能获取完整的消息,增加了读操作的开销;并且,要保证 commitlog 与 consumequeue 的一致性,也增加了编程的复杂度。
    • 选择依据:根据数据特点和业务需求,如果业务场景以写入操作为主,且对消息的实时性要求较高,那么这种存储模型非常适合;如果读操作频繁且对实时性要求极高,可能需要结合其他技术手段来优化读性能,或者根据实际情况选择更适合的存储模型。例如,在物联网设备数据采集场景中,大量设备不断上传数据,写入操作频繁,RocketMQ 的这种存储模型能很好地满足需求。
  1. 优化存储参数
    • mappedFileSizeCommitLog:该参数定义了 commitlog 文件的大小,默认值为 1073741824 字节(1GB)。适当调整此参数可平衡文件切换的频率和单个文件的存储容量。若文件大小设置过小,文件切换会过于频繁,增加系统开销;若设置过大,可能会导致单个文件占用过多磁盘空间,且在文件读写时效率会降低。例如,在消息量较小的场景中,可以将mappedFileSizeCommitLog调整为 512MB,减少文件切换次数;在消息量较大的场景中,可适当增大该值,如调整为 2GB。
    • flushDiskType:此参数指定了刷盘策略,有SYNC_FLUSH(同步刷盘)和ASYNC_FLUSH(异步刷盘)两种选项。SYNC_FLUSH确保消息在写入磁盘后才返回确认,数据可靠性极高,但会降低写入性能;ASYNC_FLUSH则是消息写入内存后立即返回确认,刷盘操作由后台线程异步进行,写入性能较高,但存在数据丢失的风险。在对数据可靠性要求极高的金融业务中,应选择SYNC_FLUSH;在对实时性要求较高且能容忍少量数据丢失的场景中,如日志收集,可选择ASYNC_FLUSH。

(四)巧用索引加速消息查询

  1. 索引原理
    • RocketMQ 索引机制:RocketMQ 支持多种索引方式,包括基于消息 ID 的索引、基于消息 Key 的索引以及基于时间的索引。基于消息 ID 的索引是通过消息在 commitlog 中的物理偏移量来快速定位消息;基于消息 Key 的索引则是通过对消息的业务唯一标识码(设置在 keys 字段)创建哈希索引,方便根据业务需求快速查询消息;基于时间的索引可以根据消息的发送时间范围来查询消息。
    • 快速定位消息:以基于消息 Key 的索引为例,当生产者发送消息时,RocketMQ 会为消息的 Key 创建索引,并将索引信息存储在 index 文件中。当消费者需要根据 Key 查询消息时,RocketMQ 首先在 index 文件中查找对应的索引,获取消息在 commitlog 中的物理偏移量,然后根据偏移量从 commitlog 中读取消息,从而实现快速定位消息的目的。
  1. 创建与使用索引
    • 创建索引示例代码:在 Java 中,创建基于消息 Key 的索引示例代码如下:
 

import org.apache.rocketmq.client.producer.DefaultMQProducer;

import org.apache.rocketmq.client.producer.SendResult;

import org.apache.rocketmq.common.message.Message;

public class IndexProducer {

public static void main(String[] args) throws Exception {

// 实例化生产者

DefaultMQProducer producer = new DefaultMQProducer("IndexProducerGroup");

// 指定NameServer地址

producer.setNamesrvAddr("localhost:9876");

// 启动生产者

producer.start();

String topic = "IndexTopic";

String key = "OrderID-001";

Message message = new Message(topic, "Tag1", key, "Hello world with index".getBytes());

// 发送消息

SendResult sendResult = producer.send(message);

System.out.printf("Message sent: %s%n", sendResult);

// 关闭生产者

producer.shutdown();

}

}

在上述代码中,我们创建了一条消息,并为其设置了 Key 为OrderID-001。当这条消息发送到 RocketMQ 集群时,RocketMQ 会自动为该 Key 创建索引。

  • 使用索引查询消息:在查询消息时,通过指定 Topic 和 Key,RocketMQ 可以利用索引快速定位消息。示例代码如下:
 

import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;

import org.apache.rocketmq.client.consumer.MessageSelector;

import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;

import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;

import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;

import org.apache.rocketmq.common.message.MessageExt;

import java.util.List;

public class IndexConsumer {

public static void main(String[] args) throws Exception {

// 实例化消费者

DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("IndexConsumerGroup");

// 指定NameServer地址

consumer.setNamesrvAddr("localhost:9876");

// 订阅主题,并设置消息选择器,根据Key查询消息

consumer.subscribe("IndexTopic", MessageSelector.byKey("OrderID-001"));

// 注册消息监听器

consumer.registerMessageListener(new MessageListenerConcurrently() {

@Override

public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) {

for (MessageExt msg : msgs) {

System.out.printf("Consumed message: %s%n", new String(msg.getBody()));

}

return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;

}

});

// 启动消费者

consumer.start();

}

}

在上述代码中,我们通过MessageSelector.byKey("OrderID-001")设置了消息选择器,使消费者只接收 Key 为OrderID-001的消息。这样,RocketMQ 会利用索引快速筛选出符合条件的消息,提高查询效率。

性能优化案例深度剖析

(一)案例背景与问题呈现

某电商平台在业务快速发展过程中,订单处理系统的消息量呈爆发式增长。该系统使用 RocketMQ 作为消息中间件,负责订单创建、支付通知、库存更新等消息的传递。随着订单量的急剧增加,RocketMQ 在运行中逐渐暴露出性能问题。主要表现为消息发送延迟明显,部分订单消息的发送延迟从原本的几十毫秒延长到了数秒,严重影响了订单处理的及时性;同时,消息消费速度也大幅下降,消费者在处理订单消息时出现明显卡顿,导致大量消息堆积在 Broker 中,进一步加剧了系统性能的恶化。这些问题直接影响了用户体验,导致部分用户投诉订单处理缓慢,对电商平台的业务运营造成了严重影响。

(二)问题排查与分析过程

为了解决这些性能问题,技术团队首先对 RocketMQ 的运行状态进行了全面排查。通过查看 RocketMQ 的监控指标,发现部分 Broker 节点的 CPU 使用率持续居高不下,达到了 90% 以上,内存使用率也接近饱和。进一步分析发现,由于业务增长过快,原有的 RocketMQ 集群配置已无法满足当前的消息处理需求。生产者的发送线程池配置过小,在高并发情况下,线程资源不足,导致消息发送任务排队等待,从而增加了消息发送延迟。同时,消费者的消费线程池也存在同样的问题,消费线程数量无法满足大量消息的处理需求,使得消息消费速度缓慢。此外,网络带宽在高并发场景下也成为了瓶颈,消息在网络传输过程中出现拥堵,进一步加剧了消息发送和消费的延迟。

(三)调优方案实施与效果验证

针对上述问题,技术团队制定了一系列调优策略。首先,对生产者和消费者的线程池进行了优化,根据业务量和服务器资源情况,将生产者的发送线程池大小从默认的 10 个线程增加到 50 个线程,消费者的消费线程池大小从 10 个线程增加到 80 个线程,以提高消息发送和消费的并发能力。同时,对 RocketMQ 集群进行了扩容,增加了 Broker 节点的数量,从原来的 3 个节点扩展到 6 个节点,并重新调整了负载均衡策略,使消息能够更加均匀地分布到各个 Broker 节点上,避免了单个节点的过载。此外,对网络带宽进行了升级,将原来的 100Mbps 带宽提升到了 1Gbps,以确保消息在网络传输过程中的畅通。

在实施调优方案后,技术团队对 RocketMQ 的性能进行了再次测试。结果显示,消息发送延迟从原来的数秒降低到了 50 毫秒以内,消息消费速度也得到了显著提升,吞吐量从原来的每秒处理 1000 条消息提高到了每秒处理 5000 条消息,消息堆积问题得到了有效解决,系统性能得到了极大的改善。通过这次性能优化案例,我们深刻认识到 RocketMQ 性能优化的重要性和复杂性,只有深入了解其工作原理和性能瓶颈,采取针对性的调优策略,才能充分发挥其优势,保障系统的高效稳定运行。

总结与展望

在分布式系统蓬勃发展的今天,RocketMQ 作为一款卓越的分布式消息中间件,在众多业务场景中发挥着关键作用。通过深入理解并运用其性能优化与调优策略,我们能够显著提升系统的运行效率和稳定性,满足业务不断增长的需求。

从性能优化的基本原则出发,我们深入剖析了消息模型,掌握了提升吞吐量、降低延迟和优化消息存储的方法。批量消息发送、异步消息发送、合理配置存储路径和刷盘模式等策略,为我们在实际应用中优化 RocketMQ 性能提供了有力的工具。在实战演练部分,我们从配置优化、集群配置与优化、存储模型选择与优化以及巧用索引加速消息查询等多个方面,详细阐述了具体的调优策略和方法。通过合理调整生产者和消费者的配置参数、精心规划集群架构和负载均衡策略、优化存储模型和参数以及创建和使用索引,我们能够全方位地提升 RocketMQ 的性能。

未来,随着技术的不断进步和业务的持续发展,RocketMQ 的性能优化也将面临新的挑战和机遇。一方面,随着硬件技术的发展,如 CPU 性能的提升、内存容量的增加和磁盘 I/O 速度的加快,我们需要不断探索如何更好地利用这些硬件资源,进一步提升 RocketMQ 的性能。另一方面,随着分布式系统架构的不断演进,如微服务架构、容器化技术和 Serverless 架构的广泛应用,RocketMQ 需要更好地适应这些新的架构模式,提供更高效、更可靠的消息服务。同时,人工智能和大数据技术的发展也为 RocketMQ 的性能优化提供了新的思路和方法,我们可以借助这些技术实现更智能的负载均衡、故障预测和性能调优。

作为开发者,我们应保持对新技术的敏锐洞察力,不断学习和探索,将最新的技术成果应用到 RocketMQ 的性能优化中。在实践中,我们要根据具体的业务场景和需求,灵活运用各种优化策略,不断尝试和创新,以找到最适合自己业务的性能优化方案。相信在我们的共同努力下,RocketMQ 将在分布式系统领域发挥更加重要的作用,为业务的发展提供更强大的支持。

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

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

相关文章

QT非UI设计器生成界面的国际化

目的 UI设计器生成界面的国际化&#xff0c;比较容易实现些&#xff0c;因为有现成的函数可以调用&#xff0c;基本过程如下&#xff1a; void MainWindow::on_actLang_CN_triggered() {//中文界面qApp->removeTranslator(trans);delete trans;transnew QTranslator;trans…

Hackme靶机通关攻略

1&#xff0c;打开靶机和kali&#xff0c;在kali终端中扫描靶机ip,得到靶机ip为192.168.50.137 arp-scan -l 2&#xff0c;使用工具扫描出后台目录后访问login.php 3&#xff0c;注册后登陆发现有输入框&#xff0c;可以尝试使用sql注入来得到用户名和密码&#xff0c;密码需要…

国产编辑器EverEdit - 工具栏自定义及认识工具栏上的按钮

1 设置-高级-工具条 1.1 设置说明 1.1.1 工具条自定义 选择主菜单工具 -> 设置 -> 常规&#xff0c;在弹出的选项窗口中选择工具条分类&#xff0c;如下图所示&#xff1a; 左侧窗口是当前支持所有功能按钮列表(上图中居中栏)&#xff0c;右侧的窗口是当前显示在工具栏…

docker安装rabbitmq

第一步直接dokce拉取rabbitmq镜像docker 利用docker直接拉取镜像最新版&#xff1a;docker search rabbitmq 运行mq&#xff1a; 需要注意的是-p 5673:5672 解释&#xff1a;-p 外网端口&#xff1a;docker的内部端口 &#xff0c;你们可以改成自己的外网端口号&#xff0c;我这…

【实战ES】实战 Elasticsearch:快速上手与深度实践-8.2.2成本优化与冷热数据分离

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 8.2.2AWS OpenSearch Serverless 成本优化与冷热数据分离深度实践1. 成本构成分析与优化机会识别1.1 Serverless模式成本分布1.2 冷热数据特征分析数据特征矩阵 2. 冷热数据…

安卓edge://inspect 和 chrome://inspect调试移动设备上的网页

edge://inspect 和 chrome://inspect 是用于调试浏览器中运行的网页和移动设备上的网页的工具。这两个工具分别属于 Microsoft Edge 和 Google Chrome 浏览器。以下是它们的详细介绍&#xff1a; chrome://inspect 如果是直接使用数据线调试&#xff0c;则只需要执行下面的第一…

checkpoint机制

1、什么是checkpoint 将缓冲池中的脏页刷新到磁盘&#xff0c;并更新redo log的checkpoint位点&#xff0c;确保数据库在发生故障时可以快速恢复到一致的状态。 2、checkpoint执行过程 确保需要刷新的脏页&#xff1a;从缓冲池中选取一部分需要刷新的页数据页刷新&#xff1…

【微服务日志收集①】使用FileBeat+Logstash+ES搭建ELK日志系统

使用FileBeatLogstashES搭建ELK日志系统&#xff0c;架构图如下&#xff1a; 1、 使用docker快速创建ES服务和Kibana服务 前置条件&#xff1a;需要在linux上提前安装好docker和docker-compose 1.1、在linux创建好一个用于存放docker-compose配置文件的文件夹 我的目录是/app/…

Centos 7 安装达梦数据库

一、环境准备 1. 确认操作系统的版本和数据库的版本是否一致 cat /etc/redhat-release 2. 关闭防火墙 查看防火墙状态 firewall-cmd --state 停止firewall systemctl stop firewalld.service 禁止firewall开机启动 systemctl disable firewalld.service 3. 修改文件l…

仿“东方甄选”直播商城小程序运营平台

在公域直播流量红利趋于饱和、流量成本大幅攀升的当下&#xff0c;私域直播为企业开辟了新的流量聚集和转化渠道&#xff0c;特别是对于那些希望在私域流量领域取得突破的品牌商家来说&#xff0c;直播场景以其独特的高频互动氛围&#xff0c;相比其他运营方式&#xff0c;展现…

ZED X系列双目3D相机的耐用性与创新设计解析

在工业自动化和学术研究领域&#xff0c;高精度的视觉设备正成为提升效率和质量的关键。ZED X系列AI立体相机&#xff0c;凭借其先进的技术和耐用的设计&#xff0c;为这一领域带来了新的可能。 核心技术&#xff1a;深度感知与精准追踪 ZED X系列的核心技术之一是Neural Dept…

Cursor的使用感受,帮你使用好自动化编程工具,整理笔记

使用感受 说实话&#xff0c;我觉得cursor还是好用的&#xff0c;可能我刚开始使用&#xff0c;没有使用的非常的熟练&#xff0c;运用也没有非常的透彻&#xff0c;总体体验还是不错的&#xff0c;在使用它时&#xff0c;我优先考虑&#xff0c;前端页面功能复用的时候&#…

《C#上位机开发从门外到门内》3-5:基于FastAPI的Web上位机系统

文章目录 一、项目概述二、系统架构设计三、前后端开发四、数据可视化五、远程控制六、系统安全性与稳定性七、性能优化与测试八、实际应用案例九、结论 随着互联网技术的快速发展&#xff0c;Web上位机系统在工业自动化、智能家居、环境监测等领域的应用日益广泛。基于FastAPI…

vue3单独引用element-plus的Infinite Scroll无限滚动;vue3自定义指令

文章目录 1.正常单独使用element-plus其他功能组件2.引入类似与指令的插件3.自定义指令钩子 1.正常单独使用element-plus其他功能组件 引入即可使用 import { ElSelect, ElOption } from "element-plus"2.引入类似与指令的插件 需要先引入&#xff0c;再注册&…

CMake学习笔记(二):变量设值,源文件/文件查找

一_变量设值: 在上一节中我们知道了如何去链接起来多个源文件并且生成可执行文件&#xff0c;但是当我们的源文件过多的时候会导致我们在add_executable里面写很长的一串&#xff0c;所以我们可以使用变量来进行设值: set(<variable> <value>... [PARENT_SCOPE])…

【Function】Azure Function通过托管身份或访问令牌连接Azure SQL数据库

【Function】Azure Function通过托管身份或访问令牌连接Azure SQL数据库 推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 【Function】Azure Function通过托管身份或访问令牌连接Azu…

案例5_1:单位数码管显示0

文章目录 文章介绍效果图仿真图5_1放置单位数码管 代码5_1.c 文章介绍 效果图 仿真图5_1 复制案例1_2的仿真图&#xff0c;在此基础上修改 注意&#xff1a;栅格大小需要缩小 放置单位数码管 代码5_1.c #include <reg52.h>#define uchar unsigned char #define uint un…

helm部署metricbeat

背景 在Elastic Stack 7.5版本之前&#xff0c;系统默认采用内置服务进行监控数据采集&#xff08;称为内部收集机制&#xff09;&#xff0c;这种设计存在显著局限性&#xff1a; 当ES集群崩溃时自带的节点监控也会随之崩溃&#xff0c;直到集群恢复前&#xff0c;崩溃期间的…

基于 Python 爬取 TikTok 搜索数据 Tiktok爬虫(2025.3.17)

1. 前言 在数据分析和网络爬虫的应用场景中&#xff0c;我们经常需要获取社交媒体平台的数据&#xff0c;例如 TikTok。本篇文章介绍如何使用 Python 爬取 TikTok 用户搜索数据&#xff0c;并解析其返回的数据。 结果截图 2. 项目环境准备 在正式运行代码之前&#xff0c;我…

阿里云、腾讯云云主机如何提升远程桌面安全(VNC登录)

远程桌面连接&#xff08;RDP&#xff09;是管理主机的常用方式&#xff0c;但同时也带来了安全风险。黑客会对远程桌面进行暴力破解攻击和撞库攻击。作为云主机&#xff0c;在远程桌面方面有天然的安全优势&#xff1a;可以关闭远程桌面服务或端口&#xff0c;限制只能通过网页…