RabbitMQ 教程 | 第10章 网络分区

👨🏻‍💻 热爱摄影的程序员
👨🏻‍🎨 喜欢编码的设计师
🧕🏻 擅长设计的剪辑师
🧑🏻‍🏫 一位高冷无情的编码爱好者
大家好,我是 DevOps 工程师
欢迎分享 / 收藏 / 赞 / 在看!

这篇 RabbitMQ 教程为学习者提供了全面的内容,从 RabbitMQ 的简介开始,涵盖了消息中间件的概念、RabbitMQ 的安装与使用,以及交换机、队列、路由键等相关概念的介绍。进一步深入,教程探讨了 AMQP 协议、客户端开发向导,以及消息的发送和消费方式。同时,学习者还可以了解消息传输保障、高级特性如死信队列、延迟队列、优先级队列、RPC 实现等。此外,教程还涵盖了 RabbitMQ 的管理、配置、运维、监控和集群管理等重要主题,帮助学习者充分掌握 RabbitMQ 的应用。整篇教程丰富内容详实,适合初学者和有经验的开发者参考学习。

全篇共 11 章,9 万余字。本文:第10章 网络分区。

第10章 网络分区

10.1 网络分区的意义

网络分区(Network Partition)是指在分布式系统中,由于网络故障或者其他原因,导致系统中的节点无法相互通信,形成了多个孤立的子网络。在这种情况下,每个子网络内部的节点可以正常通信,但不同子网络之间无法互相通信。

网络分区对消息传递的影响是非常重要的,它可能导致以下问题:

  1. 消息丢失: 在网络分区发生时,由于不同子网络之间无法通信,导致消息无法从一个子网络传递到另一个子网络。这会导致在网络分区期间发送的消息在整个系统范围内丢失。
  2. 消息重复: 当网络分区解除后,不同子网络之间的消息可能会重复传递。因为在网络分区期间,消息可能已经在某个子网络中传递了一次,而在网络分区解除后,它又会传递到其他子网络中。
  3. 消息乱序: 在网络分区发生时,由于不同子网络之间无法通信,消息的传递顺序可能会发生乱序。消息可能先到达一个子网络,而在其他子网络中却无法及时传递,导致消息的顺序不一致。
  4. 系统不可用: 如果网络分区导致集群中的多数节点无法通信,那么集群可能会出现“脑裂”问题,即形成多个孤立的子集群,每个子集群都认为自己是合法的集群,从而导致整个系统的不可用。

为了解决网络分区对消息传递的影响,可以采取以下策略:

  1. 引入消息确认机制: 在发送消息时,生产者可以要求 RabbitMQ 返回确认,以确保消息已经成功投递到队列中。在消费消息时,消费者可以通过消息确认机制来确认消息的处理情况。这可以避免消息的丢失和重复传递。
  2. 使用持久化队列和消息: 将队列和消息设置为持久化,可以确保在网络分区发生时,消息仍然保存在磁盘上,不会因为节点故障而丢失。
  3. 使用镜像队列: 使用镜像队列可以在多个节点上复制消息的副本,从而提高消息的可用性和数据冗余。
  4. 引入自动化网络分区处理机制: 可以通过一些自动化的机制来检测网络分区的发生,并自动进行处理。例如,可以采用 pause-minority、pause-if-all-down 或 autoheal 策略来自动处理网络分区。

总之,网络分区是分布式系统中常见的问题,对消息传递的影响非常重要。采取合适的策略和机制,可以在一定程度上解决网络分区带来的问题,确保消息传递的可靠性和一致性。

10.2 网络分区的判定

判定网络分区是否发生通常是通过监测节点之间的网络连接情况来进行的。在 RabbitMQ 集群中,可以采取以下方法来判定网络分区的发生:

  1. 心跳检测: RabbitMQ 集群中的节点会通过定期发送心跳消息来监测彼此的存活状态。如果一个节点在一定时间内没有收到其他节点的心跳消息,那么就会认为与其他节点发生了网络分区,从而触发网络分区事件。
  2. 节点连接状态: 可以通过查看 RabbitMQ 集群中节点的连接状态来判定是否发生了网络分区。当某个节点与其他节点断开连接或者无法与其他节点建立连接时,可能发生了网络分区。
  3. 监控指标: 通过监控 RabbitMQ 集群的一些关键指标,如消息发布速率、队列长度、消费者数量等,可以间接判定是否发生了网络分区。如果这些指标出现异常波动或者明显下降,可能是网络分区的信号。

处理网络分区事件的方法取决于具体的业务需求和系统设计。以下是一些常见的处理方式:

  1. 暂停少数派: 可以选择暂停网络分区中的少数派节点,保留多数派节点继续工作,从而保证整个集群的可用性。这可以通过 RabbitMQ 提供的 pause-minority 策略来实现。
  2. 暂停全部: 如果网络分区导致集群的多数节点无法通信,可以选择暂停所有节点,防止数据冲突和消息乱序。这可以通过 RabbitMQ 提供的 pause-if-all-down 策略来实现。
  3. 自动恢复: 可以通过自动化脚本或监控程序来检测网络分区的发生,并自动进行处理。例如,可以采用 autoheal 策略来自动恢复网络分区。
  4. 手动处理: 对于较为复杂的网络分区场景,可能需要手动介入来处理网络分区事件。这需要有经验的运维人员来判断网络分区的程度和影响,并做出相应的决策。

无论采用哪种处理方式,都应该在处理网络分区时小心谨慎,确保集群的数据一致性和消息可靠性。在设计系统时,也可以考虑采用多数据中心部署、镜像队列、联邦队列等技术来提高系统的可用性和容错性,从而降低网络分区带来的影响。

10.3 网络分区的模拟

在测试和验证网络分区处理策略时,我们可以通过模拟网络分区来模拟实际环境中的网络故障。这样可以让我们更好地了解系统在网络分区情况下的表现,以及验证我们设计的处理策略是否有效。以下是一些常见的模拟网络分区的方法:

  1. 断开网络连接: 最简单的方法是手动断开集群中某些节点之间的网络连接,或者将某些节点从网络中隔离。这可以模拟节点无法相互通信的情况,从而触发网络分区。
  2. 阻塞通信端口: 可以通过阻塞集群中节点之间的通信端口,使节点之间无法进行网络通信。这可以模拟网络连接断开的情况,从而触发网络分区。
  3. 虚拟网络: 使用虚拟化技术,可以创建多个虚拟网络,然后将不同节点分别放置在不同的虚拟网络中。这样可以模拟多个子网络之间的网络分区。
  4. 限制带宽: 可以通过限制网络带宽或增加网络延迟来模拟网络分区的效果。这可以模拟在网络拥堵或高负载情况下节点之间通信受阻的情况。
  5. 运行在不同地理位置: 如果系统的节点分布在不同的地理位置,可以通过将节点放置在不同的物理服务器或云服务提供商上,模拟节点之间的物理隔离。

无论使用哪种方法,都需要仔细考虑测试环境的搭建和网络分区的模拟情况,确保测试结果能够准确地反映实际情况。同时,进行网络分区测试时,应该密切关注集群的数据一致性和消息可靠性,确保系统在网络分区发生时能够正确地处理消息和数据。测试完成后,应该对网络分区处理策略进行充分评估和优化,以确保系统在面对真实网络分区时能够稳定运行。

10.4 网络分区的影响

了解网络分区对 RabbitMQ 的影响,包括未配置镜像和已配置镜像的情况。

10.4.1 未配置镜像

在未配置镜像的情况下,网络分区可能会对消息传递产生以下影响:

  1. 消息丢失: 当网络分区发生时,集群中的某些节点无法与其他节点通信。如果消息发送到了一个无法与其他节点通信的节点上,那么这些消息可能会丢失,因为在网络分区期间,无法将消息复制到其他节点上进行备份。
  2. 消息堆积: 在网络分区期间,无法将消息传递到其他节点,导致消息堆积在发生网络分区的节点上。一旦网络分区解决,大量堆积的消息会在短时间内传递到其他节点,可能导致网络拥堵和性能下降。
  3. 数据不一致: 在网络分区期间,无法将消息传递到其他节点,可能导致数据不一致。例如,如果一个节点在网络分区期间接收了一些消息,而其他节点无法获得这些消息,那么在网络分区解决后,这些节点的数据将不一致。
  4. 消息乱序: 在网络分区期间,消息可能会在不同节点上产生乱序。因为网络分区导致节点之间无法进行同步,所以消息在网络分区解决后可能会以不同的顺序传递到其他节点。

为了避免上述问题,可以通过配置镜像队列来增加消息的冗余备份。镜像队列会将队列中的消息自动复制到其他节点上,保证即使发生网络分区,数据仍然可以在其他节点上得到备份,避免数据丢失和不一致。同时,在设计系统时,也可以采用多数据中心部署,将节点分布在不同的物理位置上,从而降低因网络分区而导致的影响。在实际应用中,根据业务需求和系统规模,综合考虑数据一致性和性能要求,选择合适的策略来处理网络分区情况。

10.4.2 已配置镜像

在已配置镜像的情况下,网络分区对消息传递会产生以下影响:

  1. 消息冗余备份: 当配置了镜像队列后,消息会被自动复制到其他节点上,保证在发生网络分区时,消息的冗余备份仍然存在于其他节点上。这样可以避免消息的丢失,即使发生了网络分区,消息仍然可以在其他节点上找到。
  2. 消息传递延迟: 虽然已配置镜像队列,但由于网络分区的存在,导致消息可能无法及时传递到其他节点。在网络分区解决后,节点之间可能需要一定时间来同步消息,从而导致消息传递延迟。
  3. 消息冲突: 在网络分区期间,如果不同的节点都在处理相同的消息,可能会导致消息冲突。当网络分区解决后,可能出现相同的消息在不同节点上被重复处理,需要保证业务逻辑的幂等性来避免数据的重复处理。
  4. 数据一致性: 在网络分区期间,由于节点之间无法进行同步,可能导致数据不一致。即使消息被复制到其他节点上,也无法保证所有节点都能实时同步更新。

配置了镜像队列是为了增加消息的冗余备份,从而提高消息的可靠性和高可用性。在网络分区发生时,虽然消息仍然存在于其他节点上,但在解决网络分区后,可能需要进行数据同步和冲突处理。因此,在设计系统时,需要综合考虑数据一致性和性能要求,并确保系统能够正确处理网络分区带来的影响。

10.5 手动处理网络分区

手动处理网络分区可以通过以下步骤来恢复消息传递:

  1. 检测网络分区: 首先,需要检测网络分区是否已经发生。可以通过监控工具或RabbitMQ的管理界面来查看集群节点之间的连接状态和通信情况。如果发现某些节点无法与其他节点通信,那么很可能发生了网络分区。
  2. 解决网络分区原因: 接下来,需要找出网络分区发生的原因。网络分区可能是由网络故障、节点故障、防火墙设置等问题引起的。解决网络分区原因是恢复消息传递的前提。
  3. 处理消息堆积: 在网络分区期间,可能有大量消息堆积在某些节点上。在解决网络分区后,这些堆积的消息会开始传递到其他节点。为了避免消息传递过程中的网络拥堵,可以逐步增加网络吞吐量,或者根据业务情况设置合理的流控策略。
  4. 数据同步: 在网络分区解决后,需要确保所有节点的数据是一致的。可以使用RabbitMQ的镜像队列功能来自动同步消息。确保所有节点上的队列都已镜像,并等待所有镜像队列同步完成。
  5. 消息冲突处理: 在网络分区期间,如果不同节点都在处理相同的消息,可能会导致消息冲突。为了处理消息冲突,可以在业务逻辑中引入幂等性机制,确保相同消息的重复处理不会引发问题。
  6. 监控恢复状态: 在网络分区处理完成后,需要持续监控集群状态,确保消息传递正常。通过监控工具或RabbitMQ的管理界面,查看消息传递情况和队列状态,确保集群正常运行。

处理网络分区是一个复杂的过程,需要综合考虑网络状态、消息堆积、数据一致性等因素。在设计系统时,可以采用多数据中心部署、配置镜像队列等策略来增加系统的可靠性和高可用性,从而更好地应对网络分区带来的影响。

10.6 自动处理网络分区

学习 RabbitMQ 提供的自动处理网络分区的功能,包括 pause-minority 模式、pause-if-all-down 模式和 autoheal 模式。

10.6.1 pause-minority 模式

pause-minority 模式是 RabbitMQ 集群中的一种处理网络分区的策略。在这种模式下,当集群发生网络分区时,RabbitMQ 会主动暂停少数节点上的所有队列,以确保少数节点与多数节点保持一致,从而避免消息的丢失和数据不一致。

原理和用法: 在 pause-minority 模式下,RabbitMQ 集群中的节点会被分为两个组:多数节点和少数节点。多数节点是指处于正常状态的节点数大于等于半数的节点,而少数节点则是指处于正常状态的节点数小于半数的节点。

当集群发生网络分区时,如果少数节点无法与多数节点通信,那么少数节点上的所有队列都会被主动暂停,这样可以确保只有多数节点上的队列能够继续处理消息。在网络分区解决后,集群会自动将暂停的队列恢复,并开始处理消息。

适用场景:pause-minority 模式适用于对数据一致性要求较高的场景,特别是在发生网络分区时希望保证数据的完整性而不希望消息丢失的情况下。这种模式可以确保少数节点的数据不会脱离多数节点太多,并在网络分区解决后自动恢复消息传递。

然而,需要注意的是,在 pause-minority 模式下,少数节点上的队列被暂停后,可能导致这些节点的消息堆积。因此,如果在少数节点上的消息量较大,暂停队列可能会导致性能下降。在设计系统时,需要综合考虑业务需求、网络环境和集群规模,合理选择是否使用 pause-minority 模式来处理网络分区。

10.6.2 pause-if-all-down模式

pause-if-all-down 模式是 RabbitMQ 集群中的一种处理网络分区的策略。在这种模式下,当集群发生网络分区时,RabbitMQ 会自动将所有节点上的所有队列都暂停,以防止消息的丢失和数据不一致。

原理和用法: 在 pause-if-all-down 模式下,集群中的所有节点会被同时监测。当集群发生网络分区时,所有节点都无法通信,RabbitMQ 会自动将所有节点上的所有队列都暂停。这样做的目的是为了确保消息不会在网络分区期间传递到其他节点,以免数据不一致和消息丢失。

当网络分区解决后,RabbitMQ 会自动恢复所有队列,开始处理消息传递。

适用场景:pause-if-all-down 模式适用于对数据一致性要求非常高的场景,特别是在发生网络分区时不希望有任何消息传递的情况下。这种模式可以确保在网络分区期间所有节点的状态保持一致,避免任何消息传递,从而保证数据的完整性。

然而,需要注意的是,在 pause-if-all-down 模式下,所有队列都会被暂停,这可能导致整个集群的消息堆积。在网络分区解决后,可能需要一定的时间来处理积压的消息。因此,在使用此模式时,需要谨慎考虑可能产生的性能影响,并确保业务逻辑能够处理积压消息的情况。

在实际应用中,通常根据业务需求和对数据一致性的要求来选择适合的网络分区处理策略。 pause-if-all-down 模式适用于对数据一致性要求非常严格的场景,但需要注意可能带来的性能影响。

10.6.3 autoheal模式

autoheal 模式是 RabbitMQ 集群中的一种处理网络分区的策略。在这种模式下,当集群发生网络分区时,RabbitMQ 会尝试自动恢复网络分区,以保持集群的一致性和可用性。

原理和用法: 在 autoheal 模式下,集群中的所有节点会被同时监测。当集群发生网络分区时,RabbitMQ 会尝试自动恢复网络连接,并尝试重新建立分区前的集群状态。这意味着 RabbitMQ 会自动寻找可以重新连接的节点,并将它们重新纳入集群。

一旦网络分区解决,RabbitMQ 会自动恢复所有队列,并开始处理消息传递。

适用场景:autoheal 模式适用于对可用性要求较高的场景,特别是在集群发生网络分区后,希望集群能够尽可能快地恢复正常状态,而不希望手动介入的情况下。这种模式可以自动尝试恢复网络分区,并将分区前的集群状态恢复到正常。

然而,需要注意的是,autoheal 模式并不能保证恢复网络分区一定会成功。在网络分区解决的过程中,可能会出现数据不一致或者消息丢失的情况。因此,在使用此模式时,需要谨慎考虑可能的风险,并确保业务逻辑能够处理数据一致性的问题。

在实际应用中,通常根据业务需求和对可用性的要求来选择适合的网络分区处理策略。autoheal 模式适用于希望尽可能快速地自动恢复网络分区的场景,但需要注意可能产生的数据不一致性和消息丢失的风险。

10.6.4 挑选哪种模式

根据实际情况选择合适的网络分区处理模式是非常重要的,因为不同的模式适用于不同的应用场景和业务需求。以下是一些考虑因素,帮助您选择合适的网络分区处理模式:

  1. 数据一致性要求: 如果对数据一致性有极高的要求,而且不能容忍任何消息丢失,可以选择 pause-if-all-down 或 pause-minority 模式。这两种模式在网络分区期间会暂停队列,确保数据在多数节点上保持一致。但需要注意,暂停队列可能会导致消息堆积。
  2. 可用性要求: 如果对可用性有较高的要求,希望在网络分区解决后能够尽快地自动恢复,可以选择 autoheal 模式。这种模式会自动尝试恢复网络分区,并尝试重新建立集群状态,但需要注意可能的数据不一致性和消息丢失。
  3. 性能影响: 不同的模式会对性能产生不同程度的影响。pause-if-all-down 和 pause-minority 模式在暂停队列时可能会导致消息堆积,影响性能。在选择模式时,需要综合考虑集群规模、网络环境和业务负载,确保能够承受可能的性能影响。
  4. 手动处理: 如果希望手动介入来处理网络分区,可以选择 manual 模式。这种模式下,RabbitMQ 不会主动处理网络分区,需要管理员手动决定如何处理分区。
  5. 自动化脚本: 如果希望通过自动化脚本来处理网络分区,可以选择 pause-minority 模式,并编写脚本来监测网络状态并执行相应的操作。

总之,选择合适的网络分区处理模式取决于业务需求、数据一致性要求、可用性要求和性能影响。在设计系统时,需要仔细考虑不同模式的优劣势,并结合实际情况做出选择。同时,也可以根据实际情况灵活调整网络分区处理策略,以满足不同场景下的需求。

10.7 案例:多分区情形

假设有一个由三个节点组成的 RabbitMQ 集群,分别是 Node A、Node B 和 Node C。现在发生了多个网络分区,导致 Node A 和 Node B 形成一个分区,Node C 独立成另一个分区。在这种情况下,我们可以使用 pause-minority 模式来处理多个网络分区。

案例描述:

  1. Node A 和 Node B 组成一个分区,称为分区 X。
  2. Node C 独立成另一个分区,称为分区 Y。

处理步骤:

  1. 在集群启动时,我们使用 pause-minority 模式来设置集群的网络分区处理策略。
  2. 当发生多个网络分区时,RabbitMQ 集群会自动检测到这些分区,并尝试进行自动处理。在 pause-minority 模式下,RabbitMQ 会暂停分区中的队列,使得分区中的队列处于不可用状态。
  3. 在本例中,分区 X 中的队列会被暂停,分区 Y 中的队列则保持可用状态。
  4. 当网络分区解决时,RabbitMQ 会自动尝试恢复网络连接,并尝试重新建立集群状态。
  5. 分区 Y 中的队列会继续处理消息,而分区 X 中的队列则会恢复,开始处理在网络分区期间暂停的消息。

需要注意的是,pause-minority 模式的自动处理过程可能会导致消息重复消费或消息顺序性问题。因为在分区 X 恢复时,可能会重新处理一些之前已经在分区 Y 中处理过的消息。在设计应用时,需要考虑这种可能性,并确保能够处理消息重复消费或消息乱序的情况。

此外,网络分区处理涉及到集群的高可用性和数据一致性问题,因此在实际应用中需要综合考虑业务需求和集群的性能特征,选择适合的网络分区处理策略。在测试和验证过程中,可以通过模拟多个网络分区的情况,来评估不同策略的效果,并确保系统能够在网络分区发生时保持稳定运行。

10.8 小结

本章介绍了 RabbitMQ 网络分区的处理,包括网络分区的意义、判定、模拟、影响、手动处理和自动处理等内容。在下一章中,我们将学习 RabbitMQ 的扩展特性,包括消息追踪、负载均衡等内容。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第20节 R语言医学分析:某保险医疗事故赔偿因素分析

文章目录 某保险医疗事故赔偿因素分析源码源文件下载某保险医疗事故赔偿因素分析 我们分析数据集“诉讼”的第一个方法是确定样本数量、变量类型、缩放/编码约定(如果有)用于验证数据清理。 接下来,数据集看起来很干净,没有缺失值,并且对于分类变量,将编码约定替换为实际…

智慧工地云平台源码,基于微服务+Java+Spring Cloud +UniApp +MySql开发

智慧工地可视化系统利用物联网、人工智能、云计算、大数据、移动互联网等新一代信息技术,通过工地中台、三维建模服务、视频AI分析服务等技术支撑,实现智慧工地高精度动态仿真,趋势分析、预测、模拟,建设智能化、标准化的智慧工地…

LeetCode151.反转字符串中的单词

151.反转字符串中的单词 目录 151.反转字符串中的单词题目描述解法一:调用API解法二:原生函数编写 题目描述 给你一个字符串s,请你反转字符串中单词的顺序。 单词是由非空格字符组成的字符串,s中使用至少一个空格将字符串中的单…

嵌入式一开始该怎么学?学习单片机

学习单片机: 模电数电肯定必须的,玩单片机大概率这两门课都学过,学过微机原理更好。 直接看野火的文档,芯片手册,外设手册。 学单片机不要纠结于某个型号,我认为stm32就OK,主要是原理和感觉。…

IPSEC VPN知识点总结

具体的实验:使用IPSEC VPN实现隧道通信 使用IPSEC VPN在有防火墙和NAT地址转换的场景下实现隧道通信 DS VPN实验 目录 1.什么是数据认证,有什么作用,有哪些实现的技术手段? 2.什么是身份认证,有什么作用,有哪些实现…

SAP标准搜索帮助(Search Help)改造之标准增强点

1. 搜索帮助加载前 包含程序:LWDTMO01 行:40 标准搜索帮助输出前的控制(影响标准Search Help CDS View Search Help(如果在标准Search Help搜索帮助出口函数上修改控制参数,则不会影响 CDS View Search Help&#xf…

一百四十五、Kettle——查看Kettle在Windows本地和在Linux上生成的.kettle文件夹位置

(一)目的 查看kettle连数据库后自动生成的.kettle文件夹在Windows本地和在Linux中的位置, 这个文件很重要!!! (二).kettle文件夹在Windows本地的位置 C:\Users\Administrator\.k…

轻松搭建酒店小程序

酒店小程序的制作并不需要编程经验,只需要按照以下步骤进行操作,就能很快地搭建自己的小程序商城。 第一步,注册登录账号进入操作后台,找到并点击【商城】中的【去管理】进入商城的后台管理页面,然后再点击【小程序商城…

使用langchain与你自己的数据对话(四):问答(question answering)

之前我已经完成了使用langchain与你自己的数据对话的前三篇博客,还没有阅读这三篇博客的朋友可以先阅读一下: 使用langchain与你自己的数据对话(一):文档加载与切割使用langchain与你自己的数据对话(二):向量存储与嵌入使用langc…

orangepi 4lts ubuntu安装RabbitMQ

4lts的emmc 系统安装选文件系统格式 ext4 需先安装erlang: sudo apt install erlang 安装RabbitMQ: sudo apt install rabbitmq-server - 添加用户以便远程访问: - 账号密码都是admin: sudo rabbitmqctl add_user admin admin -sudo rabbitmqct…

嵌入式面试刷题(day3)

文章目录 前言一、怎么判断两个float是否相同二、float数据可以移位吗三、数据接收和发送端大小端不一致怎么办四、怎么传输float类型数据1.使用联合进行传输2.使用字节流3.强制类型转换 总结 前言 本篇文章我们继续讲解嵌入式面试刷题,给大家继续分享嵌入式中的面…

Python web实战之Django用户认证详解

关键词: Python Web 开发、Django、用户认证、实战案例 概要 今天来探讨一下 Django 的用户认证吧!在这篇文章中,我将为大家带来一些有关 Django 用户认证的最佳实践。 1. Django 用户认证 在开发 Web 应用程序时,用户认证是一个…

深度学习实战46-基于CNN的遥感卫星地图智能分类,模型训练与预测

大家好,我是微学AI,今天给大家介绍一下深度学习实战46-基于CNN的遥感卫星地图智能分类,模型训练与预测。随着遥感技术和卫星图像获取能力的快速发展,卫星图像分类任务成为了计算机视觉研究中一个重要的挑战。为了促进这一领域的研究进展,EuroSAT数据集应运而生。本文将详细…

Python小白学习:超级详细的字典介绍(字典的定义、存储、修改、遍历元素和嵌套)

目录 一、字典简介1.1 创建字典1.2 访问字典中的值1.3 添加键值对1.4 修改字典中的值实例 1.5 删除键值对1.6 由多个类似对象组成的字典1.7 使用get()访问值1.8 练习题 二、遍历字典2.1 遍历所有键值对实例 2.2 遍历字典中的所有键2.3 按照特定顺序遍历字典中的所有键2.4 遍历字…

AWS Amplify 部署node版本18报错修复

Amplify env:Amazon Linux:2 Build Error : Specified Node 18 but GLIBC_2.27 or GLIBC_2.28 not found on build 一、原因 报错原因是因为默认情况下,AWS Amplify 使用 Amazon Linux:2 作为其构建镜像,并自带 GLIBC 2.26。不过,…

专业运动耳机哪个牌子好、专业运动耳机推荐

运动和音乐天生就是绝佳的组合,因此对于很多运动爱好者来说,耳机一直都是必备之物。通过音乐的陪伴,我们的运动过程变得更加有节奏感。一款出色的运动耳机需要满足舒适的佩戴感、稳固的固定性以及防水的特性。作为一个对运动耳机有着丰富经验…

Gradle-02:问题Plugin with id ‘maven‘ not found

1. 背景 在一次使用 Gradle 构建自己项目,完事,需要上传到本地 Maven 仓库,因为事先并不清楚 apply plugin: maven 插件已经被 Gradle 移除,找了一圈,才找到解决方案。 2. 原因 apply plugin: maven def localRepo f…

Rookit系列一 【隐藏网络端口】【支持Win7 x32/x64 ~ Win10 x32/x64】

文章目录 Rookit系列一 【隐藏网络端口】【支持Win7 x32/x64 ~ Win10 x32/x64】前言探究隐藏网络端口netstat分析隐藏网络端口的原理关键数据结构隐藏网络端口源码 效果演示 Rookit系列一 【隐藏网络端口】【支持Win7 x32/x64 ~ Win10 x32/x64】 前言 Rookit是个老生常谈的话…

如何从零开始配置前端环境以及安装必备的软件插件

文章目录 前言一、VSCode(Visual Studio Code)1.1 VSCode介绍与安装1.2 VSCode 常用插件安装1.3 VSCode代码格式化 二、Node.js2.1 Node的介绍与安装2. yarn的安装 三、Webpcak3.1 Webpcak的介绍与安装 四、Vue CLI4.1 Vue CLI的安装与介绍 五、初始化Vu…

【力扣】206. 反转链表 <链表指针>

【力扣】206. 反转链表 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1] 示例 2 输入:head [1,2] 输出:[2,1] 示例 3 输入&#xff1a…