MariaDB Galera 原理及用例说明
一、底层原理
MariaDB Galera 集群是一种基于同步多主架构的高可用数据库解决方案,适合需要高并发、低延迟和数据强一致性的场景。以下是部署和配置 MariaDB Galera 集群的简明步骤:
1. 环境准备
-
节点要求:至少 3 个节点(奇数节点避免脑裂),确保网络互通。
-
系统环境:所有节点使用相同操作系统(如 CentOS 7/8、Ubuntu 20.04+)。
-
依赖安装:
bash
复制
# CentOS sudo yum install -y mariadb-server galera# Ubuntu sudo apt-get install -y mariadb-server galera
2. 配置 MariaDB Galera 集群
修改配置文件 (/etc/my.cnf.d/server.cnf
或 /etc/mysql/mariadb.conf.d/60-galera.cnf
)
ini
复制
[galera] wsrep_on = ON wsrep_provider = /usr/lib/galera/libgalera_smm.so# 集群名称(所有节点一致) wsrep_cluster_name = "my_galera_cluster"# 当前节点IP和其他节点IP列表(以逗号分隔) wsrep_cluster_address = "gcomm://node1_ip,node2_ip,node3_ip"# 当前节点名称(唯一) wsrep_node_name = "node1"# 当前节点地址 wsrep_node_address = "node1_ip"# 同步方法(推荐使用 mariabackup) wsrep_sst_method = mariabackup# SST 认证信息(所有节点一致) wsrep_sst_auth = "sst_user:sst_password"# InnoDB 配置(调整缓冲池大小) innodb_buffer_pool_size = 1G innodb_log_file_size = 256M
创建 SST 用户(在每个节点的 MariaDB 中执行)
sql
复制
CREATE USER 'sst_user'@'localhost' IDENTIFIED BY 'sst_password'; GRANT RELOAD, PROCESS, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'sst_user'@'localhost';
3. 启动集群
-
首次启动第一个节点(引导集群):
bash
复制
sudo systemctl stop mariadb sudo galera_new_cluster sudo systemctl start mariadb
-
启动其他节点:
bash
复制
sudo systemctl restart mariadb
4. 验证集群状态
-
检查集群节点数:
sql
复制
SHOW STATUS LIKE 'wsrep_cluster_size';
输出应为
3
(假设有 3 个节点)。 -
检查集群健康状态:
sql
复制
SHOW STATUS LIKE 'wsrep_%';
关键指标:
-
wsrep_ready
:ON
(节点可读写) -
wsrep_connected
:ON
(节点已连接) -
wsrep_cluster_status
:Primary
(正常状态)
-
5. 常见操作
添加新节点
-
在新节点上配置相同的
/etc/my.cnf
。 -
直接启动 MariaDB:
bash
复制
sudo systemctl start mariadb
安全关闭集群
-
关闭最后一个节点:
bash
复制
sudo systemctl stop mariadb
6. 故障排查
-
日志位置:
/var/log/mysql/error.log
或/var/log/mariadb/mariadb.log
-
常见问题:
-
节点无法加入集群:检查防火墙是否开放端口(3306, 4567, 4568, 4444)。
-
SST 失败:确认
wsrep_sst_auth
的用户名密码正确。 -
脑裂问题:强制重启少数节点并重新加入集群。
-
7. 优化建议
-
网络:确保节点间低延迟(建议内网专用网络)。
-
负载均衡:使用 HAProxy 或 ProxySQL 分发读请求。
-
监控:集成 Prometheus + Grafana 监控
wsrep
指标。
参考链接
-
MariaDB Galera 官方文档
-
Galera Cluster 配置参数详解
如有具体问题(如错误日志内容),可提供详细信息进一步分析!
底层原理
已深度思考(用时 24 秒)
嗯,用户之前问了关于MariaDB Galera集群的部署步骤,现在他们又询问“底层原理”。这说明用户已经完成了初步的配置,现在想更深入地了解集群是如何工作的。作为新手,用户可能在使用过程中遇到了一些问题,或者想优化集群性能,因此需要理解背后的机制。
首先,用户可能想知道Galera集群和传统的主从复制有什么不同。传统的主从是异步的,而Galera是同步多主,这对数据一致性很重要。用户可能关心数据如何同步,以及为什么Galera能保证强一致性。
接下来,用户可能对Galera的核心组件感兴趣,比如wsrep API、组通信(gcomm)和认证器。他们可能听说过这些术语,但不清楚具体作用。需要解释每个部分的功能,以及它们如何协作实现数据同步。
另外,关于事务的流程,用户可能想知道一个事务在提交时如何在集群中传播,确认机制是怎样的。这里需要详细说明事务的认证和应用过程,以及为什么需要多数节点确认。
SST和IST的区别也是关键点。用户可能在扩容或恢复节点时遇到过全量同步和增量同步的问题,需要解释这两种同步方式的适用场景和原理。
脑裂问题可能让用户头疼,特别是在网络分区时。用户想知道Galera如何通过Quorum和权重配置来避免脑裂,以及出现问题时如何恢复。
高可用性和数据一致性之间的平衡也是用户关心的。Galera的同步复制虽然保证了强一致性,但可能影响性能,用户需要了解背后的机制和可能的优化方法。
最后,用户可能想了解Galera的局限,比如对DDL操作的支持、写扩展问题以及网络延迟的影响。这些信息能帮助他们合理设计架构,避免潜在问题。
在回答时,需要保持逻辑清晰,用简单的类比帮助理解,比如将认证过程比作议会投票,或者用快递包裹来解释事务传输。同时,结合用户之前的部署步骤,指出原理部分如何影响实际配置和故障处理,比如wsrep_cluster_address的配置或SST用户设置。
总结来说,用户需要的是从基础概念到工作机制的全面解析,帮助他们不仅知道如何配置,还能理解为什么这样配置,以及如何应对可能出现的问题。这有助于他们更好地维护和优化Galera集群,提升系统的稳定性和性能。
MariaDB Galera 集群的底层原理基于 同步多主复制(Synchronous Multi-Master Replication),通过 Galera Library 实现数据一致性、高可用性和分布式事务处理。以下是其核心原理的深入解析:
1. 核心组件与架构
**(1) WriteSet Replication (wsrep) API
-
作用:Galera 基于
wsrep
API 实现节点间数据同步,该 API 定义了事务在节点间的复制接口。 -
关键行为:
-
将事务的二进制变更(WriteSet)广播到所有节点。
-
确保事务在所有节点上按相同顺序提交(Total Ordering)。
-
(2) 组通信系统(Group Communication System, gcomm)
-
功能:实现节点间的消息传递和成员管理(如节点加入/退出检测)。
-
协议:基于 Paxos 变种(如
gcomm
协议),确保消息的可靠传输和一致性。 -
端口:默认使用
4567
(集群通信)、4568
(增量状态传输)、4444
(全量状态传输)。
(3) 认证器(Certifier)
-
作用:验证事务是否与其他事务冲突(如主键冲突、锁冲突)。
-
过程:每个节点独立验证事务,通过后标记为“可提交”。
2. 事务处理流程
当一个事务在任意节点提交时,Galera 集群会按以下步骤处理:
-
本地事务提交:
-
事务在本地节点执行,生成 WriteSet(包含事务的二进制变更和元数据)。
-
事务进入本地节点的
prepare
阶段,但尚未提交。
-
-
广播 WriteSet:
-
本地节点通过
gcomm
将 WriteSet 广播到集群所有节点。
-
-
全局认证(Certification):
-
所有节点对接收到的 WriteSet 进行冲突检测:
-
检查事务是否与其他事务的 WriteSet 冲突(如修改同一行数据)。
-
若无冲突,事务被标记为全局有效(Certified)。
-
-
-
按序提交(Total Order Commit):
-
所有节点按 相同的顺序 提交事务,保证数据一致性。
-
事务最终在所有节点上提交(同步提交)。
-
-
确认(ACK):
-
发起事务的节点收到多数节点的确认(Quorum)后,向客户端返回成功。
-
3. 同步复制的关键机制
(1) 全局事务序列(Global Transaction Sequence)
-
所有事务被赋予一个全局唯一的序列号(GTID),确保事务在集群中按统一顺序提交。
(2) 冲突检测(Certification-Based Conflict Resolution)
-
乐观锁机制:假设事务冲突概率低,先执行后验证。
-
若检测到冲突(如两个节点同时修改同一行),Galera 会回滚其中一个事务(由客户端重试)。
(3) 状态传输(State Snapshot Transfer, SST & IST)
-
SST(全量同步):新节点加入时,从现有节点拉取完整数据快照(如使用
mariabackup
)。 -
IST(增量同步):节点短暂离线后,仅同步缺失的事务(通过 GTID 追踪)。
4. 避免脑裂(Split-Brain)
Galera 通过 Quorum 机制 和 权重配置 防止网络分区导致的脑裂:
-
Quorum 要求:集群需多数节点存活(如 3 节点集群至少 2 节点在线)。
-
自动隔离(Non-Primary 状态):
-
若节点失去 Quorum,会拒绝写入操作(防止数据分歧)。
-
需人工介入修复网络或重新同步。
-
5. 高可用性与一致性保证
(1) 强一致性(Strong Consistency)
-
所有节点数据视图一致(CAP 理论中的 CP 模型)。
-
客户端无论连接到哪个节点,都能读取最新数据。
(2) 多主写入(Multi-Master)
-
任何节点均可处理读写请求,无单点故障。
-
通过全局锁(如
wsrep_causal_reads
)避免读未提交数据。
(3) 自动故障转移
-
节点故障时,集群自动剔除故障节点,客户端可重连到其他节点。
6. 性能优化与限制
优点:
-
低延迟:事务在本地提交后立即返回,后台异步广播 WriteSet。
-
线性扩展:读性能随节点数增加线性提升。
限制:
-
写扩展性:所有节点需处理所有写操作,写性能受限于最慢节点。
-
DDL 操作限制:某些 DDL(如
ALTER TABLE
)需要特殊处理(建议使用TOI
或RSU
模式)。 -
网络依赖:高网络延迟可能导致事务提交变慢。
7. 与异步复制的本质区别
特性 | Galera 同步复制 | 传统异步复制 |
---|---|---|
数据一致性 | 强一致性(所有节点同步提交) | 最终一致性(主从延迟) |
故障恢复 | 自动切换,无数据丢失 | 可能丢失未同步的数据 |
性能影响 | 事务延迟受网络影响 | 主节点无复制延迟影响 |
适用场景 | 高可用、强一致性场景 | 读写分离、灾备场景 |
8. 底层原理的实际应用
-
配置调优:
-
调整
innodb_flush_log_at_trx_commit=2
提升性能(牺牲部分持久性)。 -
设置
wsrep_slave_threads
匹配 CPU 核心数。
-
-
监控指标:
-
wsrep_local_state
:节点状态(4 表示正常同步)。 -
wsrep_flow_control_paused
:流量控制暂停时间(>0 表示复制压力大)。
-
总结
MariaDB Galera 的底层原理通过 全局事务序列化、冲突检测和同步提交 实现多主强一致性,核心是牺牲部分写性能换取高可用和数据一致性。理解这些机制有助于合理设计集群架构(如控制节点数量、优化网络)和故障排查(如脑裂恢复、SST/IST 问题)。
二、用例说明执行流程
在 MariaDB Galera 集群中,一个多语句更新事务的完整执行过程涉及 本地事务执行、全局冲突检测、同步提交 等多个阶段。以下是其详细流程:
1. 事务启动阶段
-
客户端连接任意节点(如
Node1
),执行以下多语句事务:sql
复制
START TRANSACTION; UPDATE accounts SET balance = balance - 100 WHERE user_id = 1; UPDATE accounts SET balance = balance + 100 WHERE user_id = 2; COMMIT;
2. 本地事务执行
(1) 本地节点(Node1)执行事务
-
步骤:
-
本地节点解析 SQL,在内存中执行事务逻辑。
-
生成 WriteSet:记录事务的二进制变更(如
InnoDB
的 redo log)。 -
事务进入
PREPARE
阶段(未提交到本地数据库)。
-
(2) WriteSet 结构
-
包含:
-
全局事务 ID(GTID):唯一标识事务。
-
变更数据:二进制格式的行级修改。
-
依赖关系:事务的顺序依赖(由全局序列号保证)。
-
3. 全局冲突检测(Certification)
(1) 广播 WriteSet 到集群
-
Node1 通过组通信层(
gcomm
)将 WriteSet 广播到所有节点(Node2
,Node3
)。
(2) 各节点独立验证冲突
-
冲突检测逻辑:
-
检查事务修改的行是否被其他未提交事务锁定。
-
验证主键冲突、外键约束等。
-
-
认证结果:
-
若无冲突,标记事务为 Certified(可提交)。
-
若冲突(如
Node2
已提交一个修改同一行的其他事务),标记事务为 Aborted(需回滚)。
-
4. 全局有序提交
(1) 确定事务提交顺序
-
所有节点通过 全局事务序列(GTID) 商定事务提交顺序。
-
事务按 相同的全局顺序 提交到所有节点。
(2) 同步提交事务
-
所有节点按序提交:
-
各节点将 WriteSet 应用到本地数据库(无需重新执行 SQL,直接应用二进制变更)。
-
提交后的数据在所有节点上完全一致。
-
(3) 客户端确认
-
Node1 收到多数节点(Quorum)的提交确认后,向客户端返回
COMMIT
成功。
5. 异常处理与回滚
(1) 冲突回滚
-
若任意节点检测到冲突,发起事务的节点(
Node1
)会收到Certification Failure
。 -
自动回滚:事务在
Node1
本地回滚,客户端收到错误(需重试事务)。
(2) 网络故障
-
部分节点离线:
-
若 Quorum 存在(多数节点在线),事务在存活节点提交,离线节点恢复后通过 IST/SST 同步。
-
若 Quorum 丢失,存活节点进入
Non-Primary
状态,拒绝写入。
-
6. 关键特性与流程对比
(1) 与传统单机 MySQL 的差异
阶段 | Galera 集群 | 单机 MySQL |
---|---|---|
事务提交 | 同步提交到所有节点 | 仅本地提交 |
冲突解决 | 全局认证阶段检测冲突 | 依赖行锁或 MVCC |
性能影响 | 延迟取决于最慢节点的响应 | 仅本地磁盘/内存速度 |
(2) 多语句事务的原子性保证
-
全有或全无:所有语句的变更要么全部提交到所有节点,要么全部回滚。
-
全局锁协调:事务涉及的锁信息通过 WriteSet 传递,确保全局一致性。
7. 监控与日志
(1) 关键监控指标
-
SHOW STATUS LIKE 'wsrep_%';
:-
wsrep_local_state_comment
:节点状态(Synced
/Donor
/Joiner
)。 -
wsrep_last_committed
:最后提交的 GTID。 -
wsrep_cert_deps_distance
:事务依赖的间隔(反映冲突频率)。
-
(2) 日志分析
-
错误日志(
/var/log/mariadb/mariadb.log
):-
查找
Certification failed
或WSREP: Transaction cancelled
。
-
-
Galera 调试日志:
ini
复制
[galera] wsrep_debug = ON # 启用详细日志
8. 性能优化建议
-
减少冲突:
-
设计事务时避免热点行(如批量更新改为分散操作)。
-
使用乐观锁机制(如版本号字段)。
-
-
调整参数:
-
增加
wsrep_slave_threads
提升并发应用 WriteSet 的能力。 -
优化
innodb_flush_log_at_trx_commit = 2
(牺牲部分持久性换取性能)。
-
-
网络优化:
-
使用低延迟、高带宽的专用网络。
-
启用 TCP 快速打开(
tcp_fastopen
)。
-
总结
MariaDB Galera 集群中,多语句更新事务的完整执行流程通过 本地执行、全局认证、有序提交 实现强一致性。其核心是通过牺牲部分写延迟(等待多数节点确认)换取多主架构下的数据一致性。理解这一流程有助于:
-
设计低冲突的分布式事务逻辑。
-
快速定位事务失败原因(如认证冲突、网络分区)。
-
合理优化集群参数与架构(如控制事务粒度、提升网络性能)。
三、常见问题
- 每个pod节点队列容量设置过少,导致频繁限流,从流控dashboard能够看到限流时机,增大队列容量。
- 队列容量加大,就会有db延迟,导致多节点数据无法强一致,在发生宕机故障时候,有部分不一致数据丢失风险。
相关文章:

MariaDB Galera 原理及用例说明
一、底层原理 MariaDB Galera 集群是一种基于同步多主架构的高可用数据库解决方案,适合需要高并发、低延迟和数据强一致性的场景。以下是部署和配置 MariaDB Galera 集群的简明步骤: 1. 环境准备 节点要求:至少 3 个节点(奇数节点…...

【RAG 篇】万字长文:向量数据库选型指南 —— Milvus 与 FAISS/Pinecone/Weaviate 等工具深度对比
大家好,我是大 F,深耕AI算法十余年,互联网大厂技术岗。分享AI算法干货、技术心得。 欢迎关注《大模型理论和实战》、《DeepSeek技术解析和实战》,一起探索技术的无限可能! 文章目录 向量数据库的核心价值主流工具横向对比 FAISS:Meta 的高效检索引擎Pinecone:全托管商业…...

关于服务器cpu过高的问题排查
1.定位是哪个程序造成的cpu过高 如果有云服务器,就用云服务器自带的监控功能,查时间段 如果没有,则使用: ps -eo pid,comm,pcpu,pmem,cputime --sort-cputime | head -n 100 2.定位到问题 发现是uwsgi的cpu消耗过高࿰…...

Gpt翻译完整版
上一篇文章收到了很多小伙伴的反馈,总结了一下主要以下几点: 1. 说不知道怎么调api 2. 目前只是把所有的中文变成了英文,如果想要做多语言还需要把这些关键字提炼出来成放到message_zh.properties和message_en.properties文件中,…...

雷池WAF的为什么选择基于Docker
Docker 是一种开源的容器化平台,可以帮助开发人员将应用程序及其所有依赖项打包到一个称为容器的独立、可移植的环境中。Docker 的核心概念包括以下几点: 容器:Docker 使用容器来封装应用程序及其依赖项,使其能够在任何环境中都能…...

美股回测:历史高频分钟数据的分享下载与策略解析20250305
美股回测:历史高频分钟数据的分享下载与策略解析20250305 在金融分析和投资决策的精细化过程中,美股历史分钟高频数据发挥着至关重要的作用。这些数据以其详尽性和精确性,记录了股票每分钟的价格波动和成交量变化,为投资者提供了…...

【文生图】windows 部署stable-diffusion-webui
windows 部署stable-diffusion-webui AUTOMATIC1111 stable-diffusion-webui Detailed feature showcase with images: 带图片的详细功能展示: Original txt2img and img2img modes 原始的 txt2img 和 img2img 模式 One click install and run script (but you still must i…...

[Python入门学习记录(小甲鱼)]第3章 Python基础知识
第3章 基础知识 前面三章都没啥用,这一章开始进入主题。 3.1 变量 变量顾名思义就是一个可变的量,但Python的变量更像是一个名字,通过这个名字可以找到我们想要的值。注意点如下: Python不需要显式声明,但使用之前…...

某系统webpack接口泄露引发的一系列漏洞
视频教程在我主页简介或专栏里 (不懂都可以来问我 专栏找我哦) 目录: 信息搜集 未授权敏感信息泄露越权任意用户密码重置 1.越权访问 2.大量敏感信息 越权 任意用户密码重置 信息搜集 这里找到从小穿一条裤子长大的兄弟,要挟他交…...

【计算机网络入门】初学计算机网络(十一)重要
目录 1. CIDR无分类编址 1.1 CIDR的子网划分 1.1.1 定长子网划分 1.1.2 变长子网划分 2. 路由聚合 2.1 最长前缀匹配原则 3. 网络地址转换NAT 3.1 端口号 3.2 IP地址不够用? 3.3 公网IP和内网IP 3.4 NAT作用 4. ARP协议 4.1 如何利用IP地址找到MAC地址…...

决策树(Decision Tree)基础知识
目录 一、回忆1、*机器学习的三要素:1)*函数族2)*目标函数2.1)*模型的其他复杂度参数 3)*优化算法 2、*前处理/后处理1)前处理:特征工程2)后处理:模型选择和模型评估 3、…...

Nat Mach Intell | AI分子对接算法评测
《Nature Machine Intelligence》发表重磅评测,系统评估AI与物理方法在虚拟筛选(VS)中的表现,突破药物发现效率瓶颈。 核心评测体系:三大数据集 研究团队构建了三个新型测试集: TrueDecoy:含14…...

【自学笔记】Hadoop基础知识点总览-持续更新
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 Hadoop基础知识点总览1. Hadoop简介2. Hadoop生态系统3. HDFS(Hadoop Distributed File System)HDFS基本命令 4. MapReduceWordCount示例&am…...

【Linux】使用问题汇总
#1 ssh连接的时候报Key exchange failed 原因:服务端版本高,抛弃了一些不安全的交换密钥算法,且客户端版本比较旧,不支持安全性较高的密钥交换算法。 解决方案: 如果是内网应用,安全要求不这么高…...

(二 十 二)趣学设计模式 之 备忘录模式!
目录 一、 啥是备忘录模式?二、 为什么要用备忘录模式?三、 备忘录模式的实现方式四、 备忘录模式的优缺点五、 备忘录模式的应用场景六、 总结 🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,…...

交叉编译openssl及curl
操作环境:Ubuntu20.04 IDE工具:Clion2020.2 curl下载地址:https://curl.se/download/ openssl下载地址:https://openssl-library.org/source/old/index.html 直接交叉编译curl会报错找不到openssl,所以需要先交叉编…...

【每日八股】计算机网络篇(三):IP
目录 DNS 查询服务器的基本流程DNS 采用 TCP 还是 UDP,为什么?默认使用 UDP 的原因需要使用 TCP 的场景?总结 DNS 劫持是什么?解决办法?浏览器输入一个 URL 到显示器显示的过程?URL 解析TCP 连接HTTP 请求页…...

Gartner:数据安全平台DSP提升数据流转及使用安全
2025 年 1 月 7 日,Gartner 发布“China Context:Market Guide for Data Security Platforms”(《数据安全平台市场指南——中国篇》,以下简称指南),报告主要聚焦中国数据安全平台(Data Securit…...

从vue源码解析Vue.set()和this.$set()
前言 最近死磕了一段时间vue源码,想想觉得还是要输出点东西,我们先来从Vue提供的Vue.set()和this.$set()这两个api看看它内部是怎么实现的。 Vue.set()和this.$set()应用的场景 平时做项目的时候难免不会对 数组或者对象 进行这样的骚操作操作ÿ…...

深入浅出:UniApp 从入门到精通全指南
https://juejin.cn/post/7440119937644101684 uni-app官网 uniapp安卓离线打包流程_uniapp离线打包-CSDN博客 本文是关于 UniApp 从入门到精通的全指南,涵盖基础入门(环境搭建、创建项目、项目结构、编写运行)、核心概念与进阶知识&#x…...

DeepSeek未来发展趋势:开创智能时代的新风口
DeepSeek未来发展趋势:开创智能时代的新风口 随着人工智能(AI)、深度学习(DL)和大数据的飞速发展,众多创新型技术已经逐渐走向成熟,而DeepSeek作为这一领域的新兴力量,正逐步吸引越…...

阻塞队列的实现(线程案例)
一.什么是阻塞队列? 1.如果对于一个满的队列,还要把元素入队列,此时这个队列就会阻塞等待,一直阻塞到这个队列不满为止,从而把这个元素入队列! 2.如果对于一个空的队列,还要从队列拿出元素&…...

http status是什么?常见的http状态码指的是什么意思?
HTTP 状态码 HTTP 状态码(HTTP Status Code)是服务器在响应客户端请求时返回的一个三位数字代码,用于表示请求的处理结果。HTTP 状态码是 HTTP 协议的一部分,帮助客户端(如浏览器或应用程序)了解请求是否成…...

react组件分离,降低耦合
分离前 分离后...

【AI】AI白日梦+ChatGPT 三分钟生成爆款短视频
引言 随着人工智能(AI)技术的快速发展,AI在各个领域都展现出了强大的应用潜力。其中,自然语言处理技术的进步使得智能对话系统得以实现,而ChatGPT作为其中的代表之一,具有自动生成文本的能力,为…...

MYSQL的安装教程
mysql安装分为:普通安装和压缩包安装 压缩包安装很多会存在安装失败的情况,所以我这里就用了普通安装 一、官网下载安装包 www.mysql.com 点击DOWNLOADS: 进入社区版本下载: 点击最下面一行进行下载: 选择第二个离…...

深入解析 C# 中的泛型:概念、用法与最佳实践
C# 中的 泛型(Generics) 是一种强大的编程特性,允许开发者在不预先指定具体数据类型的情况下编写代码。通过泛型,C# 能够让我们编写更灵活、可重用、类型安全且性能优良的代码。泛型广泛应用于类、方法、接口、委托、集合等多个方…...

NUMA架构介绍
NUMA 架构详解 NUMA(Non-Uniform Memory Access,非统一内存访问) 是一种多处理器系统的内存设计架构,旨在解决多处理器系统中内存访问延迟不一致的问题。与传统的 UMA(Uniform Memory Access,统一内存访问…...

数据安全VS创作自由:ChatGPT与国产AI工具隐私管理对比——论文党程序员必看的避坑指南
文章目录 数据安全VS创作自由:ChatGPT与国产AI工具隐私管理对比——论文党程序员必看的避坑指南ChatGPTKimi腾讯元宝DeepSeek 数据安全VS创作自由:ChatGPT与国产AI工具隐私管理对比——论文党程序员必看的避坑指南 产品隐私设置操作路径隐私协议ChatGPT…...

python爬虫:python中使用多进程、多线程和协程对比和采集实践
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 1. 多进程爬虫1.1 python多进程样例1.2 实现多进程爬虫2. 多线程爬虫2.1 python多线程样例2.2 实现多线程爬虫3. 协程爬虫3.1 python协程样例3.2 实现协程爬虫在网络爬虫中,为了提高抓取效率,常常需要使用多进程、多线…...