主从架构:技术原理与实现
一.简单介绍+分布式锁的复习
今天在一个分布式锁的视频讲解中,提到了主从架构,所以有了这篇文章。
当然我们可以先说说分布式锁,可以使用redis的setnx+lua脚本实现,或者也可以用redission实现,或者看门狗机制。
由看门狗机制引出守护线程,保证业务线程结束之后锁不会无限期地加在线程上。然后对于看门狗机制实际上就是一个定时任务线程。对于一个项目会存在一个线程多次获取锁,所以需要实现可以重入锁,可以借鉴synchronized或者retrantlock的底层来实现一个count计数保证可重入,或者redission的hash结构,key为要锁的对象,field为线程id+UUID,value为重入次数。然后可以通过阻塞锁(自旋锁)来实现性能的一定提升,可以采用redission利用的redis的pub/sub机制实现的,如果一个获取到锁的线程完成任务后,就会发布事件,想要获取锁的线程就会订阅到这个事件然后获取锁。(存在一定时间限制)。如果是主从模式下,主节点在给从节点同步数据时挂了,可以通过联锁解决,要求联锁部署多个主节点,每次加锁必须给所有主节点加锁,但是性能低,可以考虑红锁,每次只需要一半以上的主节点加锁成功后就算是加锁成功。(避免一个节点网络延迟较大导致无法加锁),但是还存在问题,红锁对于不同节点的系统时钟又要求,如果不一致会存在问题。
好啦开始重点介绍一下主从架构。
在现代分布式系统设计中,主从架构(Master-Slave Architecture)作为一种经典的系统设计模式,被广泛应用于各类数据库系统和分布式环境中。这种架构模式的核心思想是将系统中的数据处理职责划分为"主"和"从"两个角色,通过明确的职责分离来实现系统性能、可用性和数据冗余度的提升。 在分布式系统中,数据一致性是一个核心挑战。主从架构通过明确的职责划分和数据复制机制,为解决这一挑战提供了一种行之有效的方案。主节点负责处理所有写入操作,而从节点负责处理读取操作。这种分离使得系统能够实现读写操作的负载均衡,同时通过从节点的复制机制实现数据冗余,从而提高系统的可用性和可靠性。 主从架构的价值不仅体现在性能和可用性提升上,它还为系统提供了灵活性和可扩展性。随着业务需求的增长,可以通过添加更多的从节点来分担读取负载;在面对主节点故障时,系统可以快速将从节点提升为主节点,实现服务的无缝接管。这些特性使主从架构成为构建高可用分布式系统的重要选择。 主从架构技术与核心原理 主从架构是一种将系统或网络资源划分为"主"(Master)和"从"(Slave)节点的分布式架构模式。在这种架构中,主节点通常作为系统的主要处理单元,负责处理所有写入操作,而从节点则作为数据的副本,负责处理读取操作。这种架构模式的核心思想是通过明确的职责分离,实现系统性能、可用性和数据冗余度的提升。
二.主从架构的介绍
在主从架构中,主节点和从节点之间的关系是单向的,数据流动方向是从主节点到从节点。主节点是数据的唯一来源,而从节点的数据则是通过复制主节点的数据得到的。这种单向的数据流动确保了系统的数据流向清晰,同时也为系统提供了数据冗余和故障恢复的能力。 主从架构可以根据实际需求进行扩展,形成不同的架构模式,如一主一从、一主多从、双主架构或多主多从等。每种架构模式都有其特定的应用场景和优缺点。例如,一主多从架构适用于读多写少的场景,可以有效分担读取负载;而双主架构则可以在两个节点之间实现互备,提供更高的可用性。 在实际应用中,主从架构可以实现多种功能,包括负载均衡、高可用性、数据冗余和异地灾备等。通过合理配置主从节点之间的关系和数据复制机制,可以构建出满足特定业务需求的分布式系统。例如,在电子商务系统中,可以使用主从架构实现读写分离,将用户的商品查询请求发送到从节点,而将下单请求发送到主节点,从而提高系统的处理能力。
主从架构的核心组件
主从架构的核心组件主要包括主节点、从节点和复制机制三个部分。这三个部分共同构成了主从架构的基本框架,通过它们之间的协作,实现了数据的同步和系统的高可用性。 主节点是系统的主要处理单元,负责处理所有写入操作。在数据库系统中,主节点通常接受客户端的所有写入请求,如INSERT、UPDATE、DELETE等操作,并将这些操作记录到日志文件中。主节点的职责是确保所有写入操作的原子性和一致性,这是系统事务处理的基础。 从节点是主节点的副本,负责处理所有读取操作。从节点通过复制主节点的数据,保持与主节点的一致性。在数据库系统中,从节点通常只接受SELECT等读取请求,而不接受写入请求。这种职责分离使得从节点可以专注于数据的读取操作,提高系统的整体性能。
复制机制是主从架构中最为关键的部分,它确保了主节点和从节点之间的数据一致性。
复制机制可以分为同步复制和异步复制两种类型。
- 在同步复制中,主节点会等待从节点确认接收到写入操作的日志,然后再向客户端返回成功;而在异步复制中,主节点会立即向客户端返回成功,而不需要等待从节点确认接收到日志。两种复制机制各有优缺点,适用于不同的应用场景。 主从复制机制详解 主从复制是主从架构的核心功能,它通过将主节点的数据复制到从节点,实现了数据的冗余和系统的高可用性。根据复制的实现方式和同步策略,主从复制可以分为多种类型,每种类型都有其特定的应用场景和优缺点。 在数据库系统中,主从复制通常是基于日志的。主节点将所有的数据修改写入到日志文件中,而从节点则通过读取这些日志文件,将相同的修改应用到自己的数据中。这种基于日志的复制机制确保了数据修改的顺序性和一致性,是实现高可用数据库系统的基础。 主从复制的实现可以采用不同的同步策略,包括同步复制和异步复制。在同步复制中,主节点会等待从节点确认接收到写入操作的日志,然后再向客户端返回成功。这种策略确保了数据的一致性,但可能会影响系统的性能,特别是在网络延迟较高的环境中。
- 在异步复制中,主节点会立即向客户端返回成功,而不需要等待从节点确认接收到日志。这种策略提高了系统的性能,但可能导致从节点与主节点之间存在数据不一致的情况。 此外,还有一种半同步复制的策略,它是在异步复制的基础上增加了一个确认机制。具体来说,主节点在接收到大多数从节点确认接收到写入操作的日志后,才会向客户端返回成功。这种策略在保证数据一致性的同时,也提供了较好的性能表现。 主从架构的数据一致性 数据一致性是分布式系统设计中的一个核心挑战,它涉及到系统中所有节点看到的数据是否相同。在主从架构中,由于数据是从主节点复制到从节点的,因此数据一致性主要体现在主节点和从节点之间的数据同步上。 在同步复制中,主节点会等待从节点确认接收到写入操作的日志,然后再向客户端返回成功。这种机制确保了所有节点看到的数据是相同的,因此可以实现强一致性。然而,同步复制也带来了性能上的开销,特别是在网络延迟较高的环境中,可能会显著影响系统的响应时间。 在异步复制中,主节点会立即向客户端返回成功,而不需要等待从节点确认接收到日志。这种机制提高了系统的性能,但可能导致从节点与主节点之间存在数据不一致的情况。 半同步(部分)复制提供了一种折中的方案。在这种机制下,主节点在接收到大多数从节点确认接收到写入操作的日志后,才会向客户端返回成功。这种机制在保证数据一致性的同时,也提供了较好的性能表现。 除了复制机制外,系统设计中的其他因素也会影响数据一致性。例如,在多线程环境下,需要考虑线程安全问题;在网络通信中,需要考虑网络分区问题;在系统故障处理中,需要考虑数据恢复和一致性修复机制等。 主从架构的故障转移 故障转移是主从架构中的一个重要功能,它允许系统在主节点发生故障时,将从节点提升为主节点,从而继续提供服务。这种机制是实现系统高可用性的关键,它确保了即使在主节点失效的情况下,系统仍然能够正常运行。 在主从架构中,故障转移的过程通常包括以下几个步骤:
- 系统检测到主节点的故障;
- 选择一个合适的从节点作为新的主节点;
- 将选定的从节点提升为主节点,并更新系统的配置;
将其他从节点重新连接到新的主节点,并继续进行数据复制。
故障转移的实现可以采用多种方式,包括手动故障转移、半自动故障转移和全自动故障转移等。
在手动故障转移中,系统管理员需要手动执行故障转移的各个步骤;在半自动故障转移中,系统可以自动检测到主节点的故障并选择合适的从节点,但提升从节点为主节点的过程可能需要人工干预;在全自动故障转移中,整个故障转移过程由系统自动完成,无需人工干预。
三.MySQL主从架构模式
MySQL作为一种广泛使用的开源关系型数据库管理系统,在分布式系统设计中扮演着重要角色。MySQL的主从架构模式通过将数据库的读写操作分离,实现了系统的负载均衡、高可用性和数据冗余,是构建高性能数据库系统的重要选择。
MySQL主从复制的基本原理
MySQL的主从复制是一种基于日志的复制机制,它通过将主节点的二进制日志(binlog)复制到从节点,并在从节点上执行这些日志,实现数据的同步。这种机制确保了从节点的数据与主节点保持一致,从而为系统提供了数据冗余和高可用性。 在MySQL的主从架构中,主节点负责处理所有的写入操作(物理日志),如INSERT、UPDATE、DELETE等,并将这些操作记录到二进制日志中。从节点则负责处理所有的读取操作,如SELECT等,并通过复制主节点的二进制日志,保持与主节点的数据一致。 MySQL的主从复制涉及到几个关键的线程和进程。在主节点上,有一个专门的线程负责将二进制日志发送给从节点;在从节点上,有两个重要的线程:一个IO线程负责从主节点获取二进制日志,另一个SQL线程负责执行这些二进制日志中的事件。这种线程结构确保了复制过程的高效和可靠。 MySQL的主从复制可以是异步的,也可以是半同步的。在异步复制中,主节点会立即确认写入操作的成功,而不需要等待从节点确认接收到二进制日志;在半同步复制中,主节点会等待至少一个从节点确认接收到写入操作的二进制日志,然后再确认写入操作的成功。这两种复制方式各有优缺点,适用于不同的应用场景。 MySQL的主从复制还支持多种复制方式,包括基于日志的复制和基于GTID(全局事务标识符)的复制。基于日志的复制是最传统的复制方式,它通过记录和重放二进制日志来实现数据的同步;基于GTID的复制则通过全局唯一标识每个事务,实现了更灵活和可靠的复制机制。
MySQL主从架构的核心组件
MySQL的主从架构由几个核心组件构成,包括主节点、从节点、二进制日志、中继日志和复制线程等。这些组件共同协作,实现了数据的同步和系统的高可用性。 主节点是MySQL主从架构的核心,它负责处理所有的写入操作,并将这些操作记录到二进制日志中。主节点的配置需要启用二进制日志功能,并设置唯一的服务器ID。在MySQL的配置文件中,通常需要设置以下参数:
server-id=1
log-bin=mysql-bin
这两个参数分别设置了服务器的唯一ID和二进制日志的文件名前缀。启用二进制日志后,主节点会将所有的写入操作记录到二进制日志文件中,这些文件将被从节点复制并执行。 从节点是主节点的副本,它负责处理所有的读取操作,并通过复制主节点的二进制日志,保持与主节点的数据一致。从节点的配置需要指定主节点的连接信息,包括IP地址、端口、用户名和密码等。在MySQL的配置文件中,通常需要设置以下参数:
server-id=2
这个参数设置了从节点的唯一服务器ID。此外,还需要通过以下命令设置主节点的连接信息:
CHANGE MASTER TO MASTER_HOST='master_ip',
MASTER_PORT=3306,
MASTER_USER='replication_user',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=107;
这些参数分别指定了主节点的IP地址、端口、复制用户、密码、二进制日志文件名和日志位置。 二进制日志是MySQL主从复制的核心,它记录了主节点上所有的写入操作。从节点通过复制并执行这些日志,实现了与主节点的数据同步。二进制日志的内容包括每个写入操作的详细信息,如执行的SQL语句、事务的提交时间等。 中继日志是从节点上的日志文件,它保存了从主节点复制过来的二进制日志。从节点的IO线程负责将主节点的二进制日志复制到中继日志中,而SQL线程则负责执行中继日志中的事件。这种机制确保了从节点能够可靠地接收和执行主节点的写入操作。
复制线程是MySQL主从复制的关键组件,它包括主节点上的Binlog Dump线程和从节点上的IO线程和SQL线程。
- Binlog Dump线程负责将主节点的二进制日志发送给从节点;IO线程负责从主节点接收二进制日志,并将其写入中继日志;
- SQL线程负责执行中继日志中的事件,将这些操作应用到从节点的数据库中。
MySQL主从架构的配置步骤
配置MySQL的主从架构需要经过一系列的步骤,包括主节点和从节点的配置、复制用户的创建、复制过程的启动和验证等。这些步骤需要按照特定的顺序执行,以确保复制过程的正确性和可靠性。
- 在主节点上需要启用二进制日志功能,并设置唯一的服务器ID。在MySQL的配置文件中(通常是/etc/mysql/mysql.conf.d/mysqld.cnf或类似文件),添加或修改以下行: server-id=1 log-bin=mysql-bin
- 重启MySQL服务以应用这些更改: sudo service mysql restart 接下来,在主节点上创建一个用于复制的用户。这个用户需要有REPLICATION SLAVE权限,以便从节点可以连接到主节点并复制数据: CREATE USER 'replication_user'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON . TO 'replication_user'@'%'; FLUSH PRIVILEGES; 为了获取一致的数据快照,可以锁定表,防止在复制设置过程中有新的写入操作: FLUSH TABLES WITH READ LOCK; 在锁定表后,需要记录二进制日志的文件名和位置,这些信息将在从节点的配置中使用: SHOW MASTER STATUS; 这个命令会返回当前二进制日志的文件名和位置,记录下这些信息后,可以解锁表: UNLOCK TABLES;
- 配置从节点。在从节点的MySQL配置文件中,设置唯一的服务器ID: server-id=2
- 重启MySQL服务: sudo service mysql restart 在从节点上,设置主节点的连接信息:
CHANGE MASTER TO MASTER_HOST='master_ip',
MASTER_PORT=3306,
MASTER_USER='replication_user',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=107;
- 启动从节点的复制过程: START SLAVE; 启动复制后,需要验证复制是否正常工作: SHOW SLAVE STATUS \G 如果复制正常,Slave_IO_Running和Slave_SQL_Running都应该显示为"YES"。
MySQL主从复制的同步类型
MySQL的主从复制支持多种同步类型,包括异步复制、半同步复制和半异步复制等。这些不同的同步类型在性能和一致性方面有不同的表现,适用于不同的应用场景。
- 异步复制是最常见的复制方式,也是MySQL的默认设置。在这种方式下,主节点会立即确认写入操作的成功,而不需要等待从节点确认接收到二进制日志。这种机制提供了最佳的性能,但可能导致从节点与主节点之间存在数据不一致的情况。在异步复制中,如果主节点发生故障,可能会有未被从节点接收或执行的写入操作,这可能导致数据丢失或不一致。
- 半同步复制是一种折中的方案,它在性能和一致性之间取得了平衡。在这种方式下,主节点会等待至少一个从节点确认接收到写入操作的二进制日志,然后再确认写入操作的成功。这种机制确保了写入操作至少被记录在一个从节点上,提高了数据的可靠性;但同时也引入了一定的性能开销,特别是在网络延迟较高的环境中。
- 半异步复制是另一种折中的方案,它结合了异步复制和半同步复制的特点。在这种方式下,主节点会立即确认写入操作的成功,但会等待至少一个从节点确认执行了写入操作的二进制日志。这种机制提供了较好的性能,同时确保了写入操作被正确执行;但同样也引入了一定的性能开销。 在MySQL中,可以通过设置参数来选择不同的复制方式。例如,设置以下参数可以启用半同步复制: binlog_sync=1 这个参数确保了二进制日志被同步写入磁盘,而不是异步写入。此外,还需要在从节点上设置以下参数: rpl_semi_sync_master_enabled=1 这个参数启用了半同步复制功能。 不同的同步类型适用于不同的应用场景。例如,在电子商务系统中,订单确认等关键操作可能需要半同步复制,以确保数据的可靠性;而在社交媒体应用中,用户状态更新等操作可能更适合异步复制,以提供更好的性能。
MySQL主从架构的优缺点
MySQL主从架构的主要优点包括高可用性、负载均衡和数据冗余。高可用性是MySQL主从架构最显著的优势之一。通过将主节点和从节点部署在不同的物理服务器上,可以避免单点故障的风险。当主节点发生故障时,可以从节点接管主节点的角色,继续提供服务。这种故障转移机制大大提高了系统的可用性和可靠性。 负载均衡是另一个重要的优点。在主从架构中,写入操作由主节点处理,而读取操作可以由多个从节点处理。这种职责分离使得系统能够更有效地利用资源,提高整体的处理能力。
特别是对于读多写少的应用场景,如门户网站、内容管理系统等,这种架构可以显著提高系统的性能和响应速度。 数据冗余是MySQL主从架构的另一个重要优点。通过将数据复制到多个从节点,可以避免数据丢失的风险。即使主节点发生故障,从节点仍然保留着数据的副本,可以用于数据恢复或继续提供服务。此外,从节点还可以用于数据备份,减轻主节点的负担,提高系统的整体性能。
然而,MySQL主从架构也存在一些缺点和局限性。首先是系统复杂性。相比于单一节点的数据库系统,主从架构的管理更加复杂。需要配置和维护多个节点之间的关系,处理复制延迟和不一致等问题,增加了系统的复杂性和管理难度。 其次是数据一致性问题。在异步复制中,从节点可能与主节点存在数据不一致的情况。如果主节点发生故障,可能会有未被从节点接收或执行的写入操作,导致数据丢失或不一致。虽然半同步复制可以部分解决这个问题,但仍然存在一定的风险。 最后是性能影响。复制过程本身会消耗一定的系统资源,包括CPU、内存和网络带宽等。特别是在高负载的情况下,复制过程可能会对主节点的性能产生一定的影响,降低系统的整体性能。 此外,MySQL主从架构还有一些特定的限制和挑战,如网络带宽和延迟的影响、大事务的处理、跨数据中心复制等。这些都需要在设计和实施MySQL主从架构时加以考虑。
总的来说,MySQL主从架构是一种强大而灵活的数据库设计模式,它通过分离读写操作,实现了系统的高可用性和负载均衡。然而,它也带来了一定的复杂性和挑战。在实际应用中,需要根据具体的需求和约束条件,选择合适的架构和复制策略,以实现最佳的性能和可靠性。
四.Redis主从架构模式
Redis作为一种高性能的开源键值存储系统,以其卓越的性能和丰富的数据结构支持,在缓存、会话管理和实时分析等领域得到了广泛应用。
Redis的主从架构模式通过将数据从主节点复制到从节点,实现了系统的高可用性和负载均衡,是构建高性能分布式系统的重要选择。
Redis主从复制的基本原理
Redis的主从复制是一种异步的、基于命令传播的复制机制。与MySQL的基于日志复制不同,Redis的复制是通过将写入命令从主节点传播到从节点来实现的。这种机制确保了从节点能够镜像主节点的状态,从而为系统提供了数据冗余和高可用性。
在Redis的主从架构中,主节点负责处理所有的写入操作,并将这些操作传播给从节点。从节点负责处理读取操作,并通过复制主节点的写入命令,保持与主节点的数据一致。这种职责分离使得系统能够实现读写操作的负载均衡,提高整体的性能和响应速度。 Redis的主从复制是异步的,这意味着主节点会立即确认写入操作的成功,而不需要等待从节点确认接收到写入命令。这种机制提供了最佳的性能,但可能导致从节点与主节点之间存在数据不一致的情况。在异步复制中,如果主节点发生故障,可能会有未被从节点接收或执行的写入操作,这可能导致数据丢失或不一致。
Redis的主从复制分为两个主要操作:同步(SYNC)和命令传播(command propagate)。
同步操作用于将从服务器的状态更新到和主服务器一致,而命令传播则用于将主服务器的写入命令传播到从服务器。通过这两种操作的协同工作,Redis实现了从服务器与主服务器之间的数据同步。 在Redis的主从复制中,还有一种部分同步机制,它通过复制偏移量、复制积压缓冲区和服务器ID来实现。这种机制使得从服务器在断线重连时,不需要重新同步整个数据集,而是可以从断点处继续同步,大大提高了复制的效率和可靠性。
Redis主从架构的核心组件
Redis的主从架构由几个核心组件构成,包括主节点、从节点、复制偏移量、复制积压缓冲区和同步机制等。这些组件共同协作,实现了数据的同步和系统的高可用性。 主节点是Redis主从架构的核心,它负责处理所有的写入操作,并将这些操作传播给从节点。主节点的配置相对简单,主要是启用日志记录功能。
在Redis的配置文件中,通常需要设置以下参数:
save 900 1
save 300 10
save 60 10000
这些参数定义了自动保存的条件,如每900秒至少有1次修改,则自动保存;每300秒至少有10次修改,则自动保存;每60秒至少有10000次修改,则自动保存。
此外,还可以启用AOF(Append Only File)功能:
appendonly yes
这个参数启用了AOF功能,通过记录所有写入命令到文件中,提高了数据的持久性和可靠性。 从节点是主节点的副本,它负责处理读取操作,并通过复制主节点的写入命令,保持与主节点的数据一致。
从节点的配置需要指定主节点的IP和端口:
masterip master_ip
masterport 6379
这些参数分别指定了主节点的IP地址和端口号。配置完成后,重启Redis服务,从节点会自动连接到主节点并开始复制。
复制偏移量是Redis主从复制中的一个重要概念,它记录了从节点已经复制了主节点的多少字节。在部分同步机制中,复制偏移量用于确定从节点需要从主节点复制的数据量。 复制积压缓冲区是主节点上的一个固定大小的环形缓冲区,用于存储最近的写入命令。当从节点断线重连时,主节点可以通过复制积压缓冲区,将断线期间的写入命令发送给从节点,实现部分同步。
同步机制是Redis主从复制的核心,它包括全量同步和部分同步两种方式。全量同步用于初始连接或从节点数据严重不一致的情况,它会将主节点的整个数据集发送给从节点;部分同步用于从节点断线重连的情况,它会只发送断线期间的写入命令给从节点。通过这两种同步方式的结合,Redis实现了高效可靠的数据复制。
Redis主从架构的配置步骤
配置Redis的主从架构需要经过一系列的步骤,包括主节点和从节点的配置、复制过程的启动和验证等。这些步骤相对简单,但需要按照特定的顺序执行,以确保复制过程的正确性和可靠性。
首先,在主节点上需要启用日志记录功能。在Redis的配置文件中,可以启用RDB(Redis Database Backup)功能: save 900 1 save 300 10 save 60 10000 这些参数定义了自动保存的条件,如每900秒至少有1次修改,则自动保存;每300秒至少有10次修改,则自动保存;每60秒至少有10000次修改,则自动保存。
此外,还可以启用AOF(Append Only File)功能: appendonly yes 这个参数启用了AOF功能,通过记录所有写入命令到文件中,提高了数据的持久性和可靠性。
然后,重启主节点的Redis服务,使配置生效: sudo service redis-server restart
接下来,在从节点上需要指定主节点的IP和端口:
masterip master_ip
masterport 6379
配置完成后,重启从节点的Redis服务: sudo service redis-server restart 启动后,从节点会自动连接到主节点并开始复制。复制过程是自动处理的,不需要额外的命令或操作。
为了验证复制是否正常工作,可以使用以下命令检查复制状态:
redis-cli -h from_ip info replication
这个命令会返回从节点的复制状态信息,包括连接状态、复制偏移量、积压缓冲区大小等。如果复制正常,应该显示"connected"状态,并且复制偏移量应该在不断更新。
Redis主从复制的同步机制
Redis的主从复制通过两种同步机制来实现数据的同步:全量同步和部分同步。这两种机制各有优缺点,适用于不同的场景和需求。
全量同步是一种彻底的同步方式,它会将主节点的整个数据集发送给从节点。全量同步通常用于初始连接或从节点数据严重不一致的情况。在全量同步过程中,主节点会创建一个RDB文件,包含当前数据库的完整快照,然后将这个文件发送给从节点。从节点接收到这个文件后,会加载它,从而获得与主节点相同的数据状态。 全量同步的优点是简单可靠,确保从节点与主节点完全一致;缺点是资源消耗大,特别是在数据量大或网络带宽有限的情况下,可能会对系统性能产生显著影响。
部分同步是一种更高效和实用的同步方式,它只将主节点在从节点断线期间的写入命令发送给从节点。部分同步通过复制偏移量、复制积压缓冲区和服务器ID来实现。复制偏移量记录了从节点已经复制了主节点的多少字节;复制积压缓冲区是主节点上的一个固定大小的环形缓冲区,用于存储最近的写入命令;服务器ID是每个Redis实例的唯一标识,用于区分不同的实例。
在部分同步过程中,当从节点断线重连时,会向主节点发送自己的复制偏移量。主节点会检查这个偏移量是否有效,即是否在复制积压缓冲区中。如果有效,主节点会将从该偏移量之后的写入命令发送给从节点;如果无效,将执行全量同步。 部分同步的优点是高效和实用,特别是在网络条件良好或从节点断线时间不长的情况下,可以大大减少同步的时间和资源消耗;缺点是在某些情况下(如主节点重启或复制积压缓冲区不足)可能需要执行全量同步。 除了这两种同步机制外,Redis还支持异步复制和半同步复制。
异步复制是Redis的默认设置,主节点会立即确认写入操作的成功,而不需要等待从节点确认接收到写入命令。这种机制提供了最佳的性能,但可能导致从节点与主节点之间存在数据不一致的情况。
半同步复制是一种折中的方案,主节点会等待至少一个从节点确认接收到写入操作的命令,然后再确认写入操作的成功。这种机制确保了写入操作至少被记录在一个从节点上,提高了数据的可靠性;但同时也引入了一定的性能开销,特别是在网络延迟较高的环境中。 在实际应用中,选择合适的同步机制需要考虑系统的具体需求和约束条件。例如,在电子商务系统中,订单确认等关键操作可能需要半同步复制,以确保数据的可靠性;而在社交媒体应用中,用户状态更新等操作可能更适合异步复制,以提供更好的性能。 Redis主从架构的优缺点 Redis的主从架构作为一种分布式数据存储设计模式,具有其独特的优势和局限性。了解这些优缺点,有助于我们根据具体的应用需求,选择合适的数据库架构和复制策略。
Redis主从架构的主要优点包括高可用性、负载均衡和数据冗余。
- 高可用性是Redis主从架构最显著的优势之一。通过将主节点和从节点部署在不同的物理服务器上,可以避免单点故障的风险。当主节点发生故障时,可以从节点接管主节点的角色,继续提供服务。这种故障转移机制大大提高了系统的可用性和可靠性。
- 负载均衡是另一个重要的优点。在主从架构中,写入操作由主节点处理,而读取操作可以由多个从节点处理。这种职责分离使得系统能够更有效地利用资源,提高整体的处理能力。特别是对于读多写少的应用场景,如缓存、会话管理等,这种架构可以显著提高系统的性能和响应速度。
- 数据冗余是Redis主从架构的另一个重要优点。通过将数据复制到多个从节点,可以避免数据丢失的风险。即使主节点发生故障,从节点仍然保留着数据的副本,可以用于数据恢复或继续提供服务。此外,从节点还可以用于数据备份,减轻主节点的负担,提高系统的整体性能。 然而,Redis主从架构也存在一些缺点和局限性。首先是系统复杂性。相比于单一节点的数据库系统,主从架构的管理更加复杂。需要配置和维护多个节点之间的关系,处理复制延迟和不一致等问题,增加了系统的复杂性和管理难度。 其次是数据一致性问题。在异步复制中,从节点可能与主节点存在数据不一致的情况。如果主节点发生故障,可能会有未被从节点接收或执行的写入操作,导致数据丢失或不一致。虽然半同步复制可以部分解决这个问题,但仍然存在一定的风险。
- 最后是主节点故障处理的复杂性。在Redis的主从架构中,如果主节点发生故障,需要手动或通过哨兵(Sentinel)将从节点提升为主节点。这个过程可能会有一定的延迟,影响系统的可用性和响应时间。
此外,从节点提升为主节点后,其他从节点需要重新连接到新的主节点,这个过程也需要一定的协调和管理。 Redis主从架构还有一些特定的限制和挑战,如网络带宽和延迟的影响、大写入操作的处理、跨数据中心复制等。这些都需要在设计和实施Redis主从架构时加以考虑。
总的来说,Redis主从架构是一种强大而灵活的数据存储设计模式,它通过分离读写操作,实现了系统的高可用性和负载均衡。然而,它也带来了一定的复杂性和挑战。在实际应用中,需要根据具体的需求和约束条件,选择合适的架构和复制策略,以实现最佳的性能和可靠性。
五.MySQL与Redis主从架构的异同
MySQL和Redis的主从架构在核心思想上有着相似之处,但具体实现方式和应用场景却有所不同。
在核心思想上,MySQL和Redis的主从架构都遵循了职责分离的原则,即将系统的读写操作分开处理,通过从节点分担主节点的读取负载,实现系统的负载均衡和高可用性。这种思想使得系统能够更有效地利用资源,提高整体的处理能力。
然而,在具体实现方式上,MySQL和Redis的主从架构有着显著的差异。MySQL的主从复制是基于日志的,主节点将所有的写入操作记录到二进制日志中,从节点通过复制并执行这些日志,实现数据的同步。这种机制使得MySQL能够支持复杂的事务操作和数据完整性约束,适合于需要复杂查询和事务管理的应用场景。 相比之下,Redis的主从复制是基于命令传播的,主节点将所有的写入命令直接发送给从节点,从节点执行这些命令,实现数据的同步。这种机制使得Redis具有更高的性能和更低的延迟,适合于需要快速读写操作的应用场景,如缓存、消息队列和实时分析等。
在复制机制上,MySQL和Redis也有所不同。MySQL的主从复制可以是异步的,也可以是半同步的。在异步复制中,主节点会立即确认写入操作的成功,而不需要等待从节点确认接收到二进制日志;在半同步复制中,主节点会等待至少一个从节点确认接收到写入操作的二进制日志,然后再确认写入操作的成功。这种机制在性能和一致性之间提供了一定的平衡。 Redis的主从复制则是异步的,主节点会立即确认写入操作的成功,而不需要等待从节点确认接收到写入命令。为了提高数据的可靠性,Redis提供了半同步复制的选项,主节点会等待至少一个从节点确认接收到写入操作的命令,然后再确认写入操作的成功。这种机制在性能和一致性之间也提供了一定的平衡。
在同步机制上,MySQL和Redis也有不同的实现。MySQL的主从复制主要基于二进制日志的同步,通过记录和重放写入操作的日志,实现数据的同步。MySQL还支持基于GTID(全局事务标识符)的复制,通过全局唯一标识每个事务,实现了更灵活和可靠的复制机制。 Redis的主从复制则分为全量同步和部分同步两种方式。全量同步会将主节点的整个数据集发送给从节点;部分同步则只将主节点在从节点断线期间的写入命令发送给从节点。
通过这两种同步方式的结合,Redis实现了高效可靠的数据复制。 在适用场景上,MySQL和Redis的主从架构也有所不同。MySQL作为关系型数据库,适合于需要复杂查询和事务管理的应用场景,如电子商务系统、内容管理系统等。
MySQL的主从架构可以有效地支持这些复杂的应用需求,提供高性能和高可用性的数据服务。 Redis作为键值存储系统,适合于需要快速读写操作的应用场景,如缓存、会话管理、消息队列等。Redis的主从架构可以有效地支持这些高性能的需求,提供低延迟和高吞吐量的数据服务。
对于需要复杂查询和事务管理的应用,如电子商务系统、内容管理系统等,MySQL的主从架构可能是一个更好的选择。MySQL支持复杂的SQL查询和事务操作,能够满足这些应用的复杂数据处理需求。通过合理的配置和优化,MySQL的主从架构可以提供高性能和高可用性的数据服务。 对于需要快速读写操作的应用,如缓存、会话管理、消息队列等,Redis的主从架构可能是一个更好的选择。Redis提供了丰富的数据结构和操作,能够高效地处理这些高性能的需求。通过合理的配置和优化,Redis的主从架构可以提供低延迟和高吞吐量的数据服务。 在选择复制机制时,需要考虑性能和一致性之间的权衡。对于对性能要求较高的应用,异步复制可能是一个更好的选择,它提供了最佳的性能,但可能导致数据不一致的情况。对于对一致性要求较高的应用,半同步复制可能是一个更好的选择,它提供了一定的一致性保证,但会引入一定的性能开销。 在设计和实施主从架构时,还需要考虑系统的扩展性和维护性。主从架构的管理相对复杂,需要配置和维护多个节点之间的关系,处理复制延迟和不一致等问题。
因此,在设计系统时,应该考虑这些复杂性,并采取适当的措施来简化管理和维护。 此外,还需要考虑网络带宽和延迟的影响。复制过程涉及到节点之间的数据传输,网络条件的好坏会直接影响复制的效率和可靠性。在设计系统时,应该考虑网络的带宽和延迟,选择合适的复制机制和同步策略,以实现最佳的性能和可靠性。 最后,还需要考虑故障转移和恢复机制。在主从架构中,如果主节点发生故障,系统需要能够快速将从节点提升为主节点,继续提供服务。这种故障转移机制是实现系统高可用性的关键。在设计系统时,应该考虑故障转移的实现方式和时间,以确保系统的可用性和连续性。
未来发展趋势与展望(AI想的真美,不过还是放在这里了,不免有大佬实现)
随着分布式系统和数据库技术的不断发展,主从架构也在不断演进和创新。未来,我们可以期待主从架构在以下几个方面的发展和创新。
首先,同步机制的优化和创新。随着网络带宽的增加和延迟的减少,全量同步和部分同步的效率和可靠性可能会得到进一步的提升。新的同步算法和协议可能会出现,使得同步过程更加高效和可靠,减少复制延迟和不一致的情况。
其次,一致性模型的多样化和精细化。随着分布式系统复杂性的增加,单一的一致性模型可能无法满足所有应用的需求。未来,可能会出现更加多样化和精细化的一致性模型,使得系统能够根据具体的应用需求,选择合适的一致性级别,平衡性能和可靠性。 第三,自动化和智能化管理。随着系统规模和复杂性的增加,手动管理主从架构变得越来越困难和不可行。未来,可能会出现更加自动化和智能化的管理系统,能够自动监控系统状态,自动处理复制延迟和不一致,自动执行故障转移,减轻管理员的负担,提高系统的可靠性和可用性。 第四,跨云和混合云支持。随着云计算的普及和发展,越来越多的系统开始采用跨云和混合云的架构。未来,主从架构可能会更好地支持跨云和混合云的部署,使得系统能够在多个云平台之间无缝运行,提高系统的灵活性和可靠性。
最后,与容器化和微服务的集成。随着容器化和微服务的普及,数据库系统也需要更好地支持这些技术。未来,主从架构可能会更好地与容器化和微服务集成,提供更加灵活和高效的数据服务,满足现代应用的需求。
总的来说,主从架构作为一种经典的分布式系统设计模式,在未来仍然有着广阔的发展空间和应用前景。通过不断创新和优化,主从架构将继续为构建高性能、高可用和可扩展的分布式系统提供强有力的支持。
六.小结
主从架构作为一种经典的分布式系统设计模式,通过将系统的读写操作分开处理,实现了负载均衡、高可用性和数据冗余。MySQL和Redis作为两种主流的数据库系统,都实现了主从架构,并在各自的领域有着广泛的应用。 通过本文的深入探讨,我们已经了解了主从架构的基本概念、核心原理以及在MySQL和Redis中的具体实现方式。
感谢你看到这里,喜欢的可以点点关注哦!
相关文章:
主从架构:技术原理与实现
一.简单介绍分布式锁的复习 今天在一个分布式锁的视频讲解中,提到了主从架构,所以有了这篇文章。 当然我们可以先说说分布式锁,可以使用redis的setnxlua脚本实现,或者也可以用redission实现,或者看门狗机制。 由看门…...
8天Python从入门到精通【itheima】-1~5
目录 1节: 1.Python的优势: 2.Python的独具优势的特点: 2节-初识Python: 1.Python的起源 2.Python广泛的适用面: 3节-什么是编程语言: 1.编程语言的作用: 2.编程语言的好处:…...
JVM之垃圾回收器
部分内容来源:JavaGuide,二哥Java 垃圾回收器快速复习 JDK 8: Parallel Scavenge(新生代) Parallel Old(老年代) JDK8: Serial Serial Old JDK 9 ~ JDK22: G1 新生代:标记-复制算法 老年代&…...
【K8S学习之生命周期钩子】详细了解 postStart 和 preStop 生命周期钩子
0. 参考 Kubernetes容器生命周期 —— 钩子函数详解(postStart、preStop) - 人艰不拆_zmc - 博客园详解Kubernetes Pod优雅退出 - 人艰不拆_zmc - 博客园 1. Kubernetes 生命周期钩子概述 在 Kubernetes 中,生命周期钩子(Lifec…...
深度强化学习有什么学习建议吗?
什么是强化学习? 广泛地讲,强化学习是机器通过与环境交互来实现目标的一种计算方法。机器和环境的一 轮交互是指,机器在环境的一个状态下做一个动作决策,把这个动作作用到环境当中,这个环 境发生相应的改变并且将相应…...
Flutter - UIKit开发相关指南 - 控制器,主题,表单
环境 Flutter 3.29 macOS Sequoia 15.4.1 Xcode 16.3 控制器(ViewControllers) 在UIKit中,通过ViewController控制数据在视图上展现,多个ViewController组合在一起构建复杂的用户界面。在Flutter中,因为所有都是Widget,所以ViewController相关的功能也由Widget来承担。 生命周…...
嵌入式软件开发常见warning之 warning: implicit declaration of function
文章目录 🧩 1. C 编译流程回顾(背景)📍 2. 出现 warning 的具体阶段:**编译阶段(Compilation)**🧬 2.1 词法分析(Lexical Analysis)🌲 2.2 语法分…...
AI赋能安全生产,推进数智化转型的智慧油站开源了。
AI视频监控平台简介 AI视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用…...
(六)毛子整洁架构(测试)
文章目录 项目地址一、 项目地址 教程作者:教程地址: 代码仓库地址: 所用到的框架和插件: dbt airflow一、...
Vue3 Echarts 3D饼图(3D环形图)实现讲解附带源码
文章目录 前言一、准备工作1. 所需工具2. 引入依赖方式一:CDN 快速引入方式二:npm 本地安装(推荐) 二、实现原理解析三、echarts-gl 3D插件 使用回顾grid3D 常用通用属性:series 常用通用属性:surface&…...
Java大师成长计划之第20天:Spring Framework基础
📢 友情提示: 本文由银河易创AI(https://ai.eaigx.com)平台gpt-4o-mini模型辅助创作完成,旨在提供灵感参考与技术分享,文中关键数据、代码与结论建议通过官方渠道验证。 在Java开发领域,Spring …...
WebSocket集成方案对比
WebSocket集成方案对比与实战 架构选型全景图 #mermaid-svg-BEuyOkkoP6cFygI0 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-BEuyOkkoP6cFygI0 .error-icon{fill:#552222;}#mermaid-svg-BEuyOkkoP6cFygI0 .er…...
新能源汽车电池加热技术:传统膜加热 vs. 脉冲自加热
在新能源汽车的普及过程中,低温环境下的电池性能一直是影响用户体验的关键问题。当温度低于0C时,锂电池的内阻增大,充放电效率下降,续航缩短,甚至可能因低温充电导致电池损坏。 引言:电池低温性能衰减机理 …...
C++ 状态模式详解
状态模式(State Pattern)是一种行为设计模式,它允许一个对象在内部状态改变时改变其行为,使对象看起来像是改变了其类。 核心概念 设计原则 状态模式遵循以下设计原则: 单一职责原则:将状态相关行为分离…...
1. 使用 IntelliJ IDEA 创建 React 项目:创建 React 项目界面详解;配置 Yarn 为包管理器
1. 使用 IntelliJ IDEA 创建 React 项目:创建 React 项目界面详解;配置 Yarn 为包管理器 🧩 使用 IntelliJ IDEA 创建 React 项目(附 Yarn 配置与 Vite 建议)📷 创建 React 项目界面详解1️⃣ Name…...
【深度学习】目标检测算法大全
目录 一、R-CNN 1、R-CNN概述 2、R-CNN 模型总体流程 3、核心模块详解 (1)候选框生成(Selective Search) (2)深度特征提取与微调 2.1 特征提取 2.2 网络微调(Fine-tuning) …...
【node】6 包与npm
前言 目标 1 了解什么是包 2 怎么使用npm下载包 #mermaid-svg-Ur0d2uCdQeAQOJjW {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Ur0d2uCdQeAQOJjW .error-icon{fill:#552222;}#mermaid-svg-Ur0d2uCdQeAQOJjW .erro…...
【C++进阶篇】多态
深入探索C多态:静态与动态绑定的奥秘 一. 多态1.1 定义1.2 多态定义及实现1.2.1 多态构成条件1.2.1.1 实现多态两个必要条件1.2.1.2 虚函数1.2.1.3 虚函数的重写/覆盖1.2.1.4 协变1.2.1.5 析构函数重写1.2.1.6 override和final关键字1.2.1.7 重载/重写/隐藏的对⽐ 1…...
计算机网络|| 路由器和交换机的配置
一、实验目的 1. 了解路由器和交换机的工作模式和使用方法; 2. 熟悉 Cisco 网络设备的基本配置命令; 3. 掌握 Cisco 路由器的基本配置方式及配置命令; 4. 掌握路由器和交换机的基本配置与管理方法。 二、实验环境 1. 运行 Windows 操作…...
图形化编程如何从工具迭代到生态重构?
一、技术架构的范式突破 在图形化编程领域,技术架构的创新正在重塑行业格局。iVX 作为开源领域的领军者该平台通过图形化逻辑设计,将传统文本编程需 30 行 Python 代码实现的 "按钮点击→条件判断→调用接口→弹窗反馈" 流程,简化…...
歌曲《忘尘谷》基于C语言的歌曲调性检测技术解析
引言 在音乐分析与数字信号处理领域,自动检测歌曲调性是一项基础且关键的任务。本文以C语言为核心,结合音频处理库(libsndfile)和快速傅里叶变换库(FFTW),探讨如何实现调性检测,并通…...
Spring Boot 使用Itext绘制并导出PDF
最终效果 其实可以加分页,但是没有那么精细的需求,所以我最后就没有加,有兴趣的可以尝试下。 项目依赖 <!-- Spring Boot 版本有点老 --> <spring-boot.version>2.3.12.RELEASE</spring-boot.version><!-- 依…...
医学影像处理与可视化:从预处理到 3D 重建的技术实践
🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C++, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C++、C#等开发语言,熟悉Java常用开发技术,能熟练应用常用数据库SQL server,Oracle,mysql,postgresql等进行开发应用…...
用 openssl 测试 tls 连接
以 baidu 为例,命令行为: openssl s_client -tlsextdebug -connect baidu.com:443 得到的输出为: CONNECTED(00000003) TLS server extension "renegotiation info" (id65281), len1 0000 - 00 …...
Matlab 汽车制动纵向动力学模型和PID控制
1、内容简介 Matlab 228-汽车制动纵向动力学模型和PID控制 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略...
重塑JavaScript原生功底=>【构造函数篇】
概念:用于创建对象的函数称之为构造函数 作用:构造函数在 JavaScript 中是用来创建对象的最根本操作。 语法:当一个函数通过 new 关键字 来调用的话,那么这个函数就是一个构造函数。 场景:构造函数是专门用来创建对象…...
从0到1:Python机器学习实战全攻略(8/10)
摘要:通过本文的学习,我们深入探索了 Python 机器学习从入门到实战的精彩世界。从 Python 在机器学习领域的独特优势,到机器学习的核心概念,再到各种强大工具库的应用,以及实战项目的完整演练,我们逐步揭开…...
[计算机网络]网络层
文章目录 408考研大纲IPV4数据报格式协议: IPv4 地址DHCP协议IP组播 408考研大纲 IPV4数据报格式 协议: 1:ICMP IPv4 地址 特殊IP 网络号全1又称直接广播地址,32位全1又称受限广播地址 因为255.255.255.255只能在本网络内广播,路由器不许通过它&…...
华为行业认证是什么?如何考取华为行业认证?
据IDC预测,2027年全球数字化转型市场规模将突破3.4万亿美元,而中国将成为增长最快的市场之一。然而,85%的企业在转型中面临核心人才短缺的困境,尤其缺乏兼具技术能力与行业洞察的复合型人才! 讯方技术作为华为授权培训…...
Kotlin与Qt跨平台框架深度解析:业务逻辑共享与多语言集成
简介 Kotlin Multiplatform和Qt作为两大主流跨平台开发框架,各自在技术生态和应用场景上展现出独特优势。Kotlin Multiplatform专注于业务逻辑的跨平台共享,通过Kotlin语言的统一特性实现高达80%的代码复用率,特别适合移动应用和Web服务的业务逻辑开发。而Qt则凭借其强大的…...
基于LNMP架构的个人博客系统部署
一、项目概述 本项目旨在通过两台服务器(Server-Web和Server-NFS-DNS)搭建一个基于LNMP(Linux、Nginx、MySQL、PHP)架构的个人博客系统。通过域名访问自建网站,同时实现资源文件的共享和DNS解析功能。 二、服务器配置…...
Python训练打卡Day21
常见的降维算法: # 先运行预处理阶段的代码 import pandas as pd import pandas as pd #用于数据处理和分析,可处理表格数据。 import numpy as np #用于数值计算,提供了高效的数组操作。 import matplotlib.pyplot as plt #用于绘…...
PostgreSQL 序列(Sequence) 与 Oracle 序列对比
PostgreSQL 序列(Sequence) 与 Oracle 序列对比 PostgreSQL 和 Oracle 都提供了序列(Sequence)功能,但在实现细节和使用方式上存在一些重要差异。以下是两者的详细对比: 一 基本语法对比 1.1 创建序列 PostgreSQL: CREATE [ { TEMPORARY | TEMP } |…...
直播:怎样用Agentic AI搭建企业AI应用?5.24日,拆解新一代“智能客服系统”案例
2025 DeepSeek掀起了中国企业的AI落地浪潮! 随着应用的深入,AI的落地技术正在快速演化。 3月,Manus一夜爆火,让AI Agent更加引人关注。 从生成式AI,到Agentic AI(代理式AI)。 AI正在从只能生…...
《Asp.net Mvc 网站开发》复习试题
一.选择题(注:每题2分,共 54分,只能在下列表格中,填写每个题目相应的正确字母选项) 01: 02: 03: 04: 05: 06: 07: 08: 09: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: :27: 1. Mvc让软件…...
算法题(145):货仓选址
审题: 本题需要我们找出距离之和的最小值 思路: 方法一:贪心 贪心策略:将货仓建立在所有商店的中间可以达到距离之和最小 因为每家商店都需要接收一车商品,所以这里的距离之和指的是从货仓到每一家商店的路线的距离之和…...
✅ TensorRT Python 安装精简流程(适用于 Ubuntu 20.04+)
安装 TensorRT Python 轮子的步骤 确保 pip 和 wheel 模块已更新并安装: 参考链接 python3 -m pip install --upgrade pip python3 -m pip install wheel 1. 确认环境要求 Python:版本 3.8 - 3.13 OS:Ubuntu 20.04 或 Windows 10 CPU&a…...
MYSQL 全量,增量备份与恢复
目录 一 数据备份的重要性 1 数据备份的重要性 2 数据库备份类型 2.1 从物理与逻辑的角度分类 2.2. 从数据库的备份策略角度分类从数据库的备份策略角度,数据库的备份可分为完全备份、差异备份和增量备份。 3 常见的备份方法 3.1 物理冷备份 物理冷备份时需要在数据库处…...
10. Spring AI PromptTemplate:从模板到高级技巧
1、前言 如果学到了这里,相信大部分人对Prompt并不陌生了。 在 Spring AI 的世界里,与强大的语言模型进行交互的基石便是 Prompt(提示语)。它不仅仅是你输入给 AI 的一段文本,更是你与智能对话的桥梁,是你唤醒模型潜能的关键指令。理解 Prompt 的本质、构建原则以及在 …...
基于OpenCV的人脸识别:Haar级联分类器
文章目录 引言一、环境准备二、代码实现1. 图像加载与预处理2. 加载Haar级联分类器3. 人脸检测核心参数详解4. 结果显示与标注 三、效果优化建议四、完整代码五、总结 引言 本文将带你一步步实现一个简单但实用的人脸检测程序,使用Python和OpenCV库。 一、环境准备…...
Git安装教程及常用命令
1. 安装 Git Bash 下载 Git 安装包 首先,访问 Git 官方网站 下载适用于 Windows 的 Git 安装包。 安装步骤 启动安装程序:双击下载的 .exe 文件,启动安装程序。选择安装选项: 安装路径:可以选择默认路径࿰…...
【PmHub后端篇】Skywalking:性能监控与分布式追踪的利器
在微服务架构日益普及的当下,对系统的性能监控和分布式追踪显得尤为重要。本文将详细介绍在 PmHub 项目中,如何使用 Skywalking 实现对系统的性能监控和分布式追踪,以及在这过程中的一些关键技术点和实践经验。 1 分布式链路追踪概述 在微服…...
ChromeDriver 技术生态与应用场景深度解析
ChromeDriver 技术生态与应用场景深度解析 随着 Web 自动化测试、运维和数据采集需求的不断增长,ChromeDriver 及其相关技术栈在各行业中扮演着举足轻重的角色。本文将从技术选型、语言适配、典型场景、技术延伸等维度,结合最新行业趋势与实践经验&…...
链表面试题6之回文结构
经过前几道题的铺垫,那么我们也是来到了链表的第六关。这也是一道非常经典的题目。 目录 逆置法 数组法 那么对于这道题目,我们要判断回文结构,实际上就是判断链表对不对称。这种类型的题目我们好像在哪里见过,对了,…...
ASP.NET Core Identity框架使用指南
文章目录 前言一、核心功能二、核心组件三、使用1)创建项目2)安装必要 NuGet包3)配置数据库连接字符串4)用户与角色实体定义4)配置数据库上下文5) 注册服务6)数据库迁移与初始化7)用…...
Hugging Face推出了一款免费AI代理工具,它能像人类一样使用电脑
Hugging Face推出了一款免费AI代理工具,它能像人类一样使用电脑。 这款工具名为Open Computer Agent(开放计算机代理),可模拟真实的电脑操作。 无需安装,在浏览器中即可运行。 以下是一些信息: - Open C…...
一.Gitee基本操作
一.初始化 1.git init初始化仓库 git init 用于在当前目录下初始化一个本地 Git 仓库,让这个目录开始被 Git 跟踪和管理。 生成 .git 元数据目录,从而可以开始进行提交、回退、分支管理等操作。 2.git config user.name/user.email配置本地仓库 # 设置…...
24、DeepSeek-V3论文笔记
DeepSeek-V3论文笔记 **一、概述****二、核心架构与创新技术**0.汇总:1. **基础架构**2. **创新策略** 1.DeepSeekMoE无辅助损失负载均衡DeepSeekMoE基础架构无辅助损失负载均衡互补序列级辅助损失 2.多令牌预测(MTP)1.概念2、原理2.1BPD2.2M…...
神经网络初步学习——感知机
一、前言 神经网络,顾名思义,它与我们大脑生物学里面讲到的神经元有关联。前辈们在研究早期人工智能的时候,就开始过我们的“交叉融合”,他们思考能不能把我们的人工智能的学习模式改造成我们人脑中神经元之间的学习方式——于是乎…...
在Text-to-SQL任务中应用过程奖励模型
论文标题 Reward-SQL: Boosting Text-to-SQL via Stepwise Reasoning and Process-Supervised Rewards 论文地址 https://arxiv.org/pdf/2505.04671 代码地址 https://github.com/ruc-datalab/RewardSQL 作者背景 中国人民大学,香港科技大学广州,阿…...