当前位置: 首页 > news >正文

MongoDB—(一主、一从、一仲裁)副本集搭建

MongoDB集群介绍:

MongoDB 副本集是由多个MongoDB实例组成的集群,其中包含一个主节点(Primary)和多个从节点(Secondary),用于提供数据冗余和高可用性。以下是搭建 MongoDB 副本集的详细步骤,以在 Linux 系统(假设为 Ubuntu)上为例,可以根据实际情况进行调整。

1、MongoDB集群部署的两种方法的原理及优缺点

MongoDB 的副本集(Replica Set)和分片集(Sharded Cluster)是两种重要的集群架构,它们的原理、优缺点如下:

1.1、副本集原理

  • 原理:副本集由多个 MongoDB 实例组成,其中有一个主节点(Primary)和多个从节点(Secondary)。主节点负责处理所有的写操作,并将这些操作记录在操作日志(oplog)中。从节点通过复制主节点的 oplog 来保持与主节点的数据同步。当主节点出现故障时,副本集通过选举机制(通常基于 Bully 算法的变体)从从节点中选出一个新的主节点,以保证服务的连续性。
  • 优点
    • 高可用性:主节点故障时,从节点能快速被选举为新主节点,继续提供服务,减少停机时间。
    • 数据冗余:多个节点存储相同数据,防止因单个节点硬件故障导致数据丢失。
    • 读扩展性:可以将读请求分发到从节点,减轻主节点压力,提高整体读性能。适合读多写少的场景。
    • 数据一致性:通过 oplog 复制,能保证副本集内节点数据的最终一致性。
  • 缺点
    • 写性能瓶颈:所有写操作都集中在主节点,当写操作量较大时,主节点可能成为性能瓶颈。
    • 存储限制:所有节点都存储完整数据,对于数据量非常大的情况,存储成本较高,且扩展存储容量较困难。
    • 选举延迟:主节点故障时,选举新主节点需要一定时间,期间可能影响服务可用性。

1.2、分片集

  • 原理:分片集由多个组件构成,包括分片(Shard)、配置服务器(Config Server)和路由服务器(MongoS)。数据被分割成多个数据块(Chunk),分布在不同的分片上。配置服务器存储着集群的元数据,如数据块的分布信息等。路由服务器负责接收客户端的请求,并根据元数据将请求转发到相应的分片上。当数据量增加或负载不均衡时,系统会自动进行数据块的迁移和平衡,以保持集群的性能和可用性。
  • 优点
    • 可扩展性:通过添加更多的分片,可以轻松扩展集群的存储容量和处理能力,应对不断增长的数据量和负载。
    • 性能提升:读写操作被分散到多个分片上,减少了单个节点的负载,提高了整体性能,尤其适合大数据量和高并发的场景。
    • 负载均衡:自动的数据块迁移机制可以确保各个分片之间的负载均衡,避免出现某个分片负载过高的情况。
  • 缺点
    • 架构复杂:涉及多个组件(分片、配置服务器、路由服务器等),部署、管理和维护的难度较大,需要较高的技术水平。
    • 数据一致性挑战:由于数据分布在多个分片上,跨分片的事务处理相对复杂,可能会出现数据一致性问题,虽然 MongoDB 提供了一定的事务支持,但与传统关系型数据库相比仍有局限。
    • 元数据管理风险:配置服务器存储关键的元数据,一旦配置服务器出现故障或元数据损坏,可能导致整个集群无法正常工作,需要采取额外的备份和恢复措施。

副本集适用于对高可用性和数据冗余有要求,且数据量和写操作不是特别大的场景;而分片集则更适合处理大规模数据和高并发读写的应用,尽管它在管理上更为复杂。

MongoDB 集群主要通过副本集和分片集群两种方式实现,不同集群模式下的节点选取原理有所不同,以下为你详细介绍:

2、集群故障选取原理

2.1、副本集的节点选取原理

副本集是由多个 MongoDB 实例组成,包含一个主节点(Primary)和多个从节点(Secondary),其节点选取主要涉及主节点选举。

  1. 选举触发条件:当副本集启动、主节点发生故障(如网络故障、进程崩溃等)或手动进行重新配置时,会触发主节点选举。
  2. 选举算法:MongoDB 使用改进的 Bully 算法来进行主节点选举。在该算法中,每个节点都有一个优先级(Priority),取值范围是 0 到 100,默认值为 1。优先级为 0 的节点不能成为主节点,只能作为从节点。
  3. 选举过程
    • 具有最高优先级且可用的节点将被优先选为候选主节点。如果多个节点优先级相同,则具有最新 oplog(操作日志)的节点将更有可能被选为候选主节点。
    • 节点之间通过心跳机制(使用 ping 操作)来检测彼此的状态。当一个节点认为主节点不可用时,它会发起选举。
    • 候选主节点会向其他节点发送选举请求(ELECTION 消息)。其他节点收到请求后,会根据一定的规则进行响应。如果候选主节点收到大多数节点(超过副本集节点总数一半的节点)的支持投票,它将成为新的主节点。
    • 新的主节点选举成功后,会向其他节点发送确认消息,从节点会开始与主节点进行数据同步。

2.2、分片集群的节点选取原理

分片集群由多个组件组成,包括分片(Shard)、配置服务器(Config Server)和路由服务器(MongoS),节点选取涉及客户端请求的路由和数据的定位。

  1. 客户端请求路由:客户端应用程序连接到路由服务器(MongoS),MongoS 负责接收客户端的请求,并将其路由到正确的分片上。MongoS 维护着一份来自配置服务器的元数据,这些元数据记录了数据的分布情况(即哪些数据存储在哪个分片上)。
  2. 数据定位:当客户端发送一个读写请求时,MongoS 首先检查请求的数据库和集合,然后根据元数据确定数据所在的分片。例如,如果请求是读取某个文档,MongoS 会查找元数据中关于该文档所在分片的信息,并将请求转发到相应的分片上。
  3. 分片内部的操作:在分片内部,每个分片本身可以是一个副本集。当分片接收到请求后,副本集中的主节点会处理读和写操作。如果是读请求,主节点可以直接返回数据;如果是写请求,主节点会将操作记录到 oplog 中,并将数据同步到从节点。
  4. 配置服务器的作用:配置服务器存储着整个分片集群的元数据,包括分片的信息、数据块(Chunk)的分布等。MongoS 会定期从配置服务器获取最新的元数据,以确保路由的准确性。当集群的配置发生变化(如添加或删除分片、重新平衡数据等)时,配置服务器会更新元数据,并通知相关的 MongoS。

MongoDB 通过上述原理实现了副本集和分片集群的节点选取和请求处理,以提供高可用性、可扩展性和数据分布的能力。

背景:

在本次搭建中根据生产的机器的磁盘空间来规划,因为客户机器资源有限只有两台机器作为数据存储节点,但要求要有数据备份以满足容灾需求,所以我们选择采用副本集的形式来进行部署。

结合实际情况考虑:采用一主、一从、一仲裁节点来部署MongoDB副本集;因为仲裁节点不存放数据所以满足生产场景需求(如果资源充裕也可以根据业务需要部署一主多从或者有性能上的需求也可以部署分片集)。

一、环境准备

主机名

IP

角色

备注

master

192.168.47.162

PRIMARY

mongo主节点优先级指数为:2

agent1

192.168.47.163

SECONDARY

副本节点(同步主节点的数据,优先级指数为1)

agent2

192.168.47.164

ARBITER

仲裁节点不存储数据,在故障时参与选举PRIMARY节点

二、安装MongoDB服务

1、解压安装包


cd /opt/sumscope && tar -zxvf mongodb-5.0.4.tar.gz

2、修改配置文件

fork = true
bind_ip = 0.0.0.0
port = 27017
dbpath = /opt/sumscope/mongodb/data
logpath = /opt/sumscope/mongodb/logs/mongodb.log
auth = true
keyFile = /opt/sumscope/mongodb/config/mongo.keyfile
replSet = rs0

 3、修改环境变量

# 在文件最后一行加入
[root@server111 local]# vim /etc/profile
PATH=$PATH:/opt/sumsscope/mongodb/bin
export PATH
[root@server111 local]# source /etc/profile

4、开启用户认证

openssl rand -base64 753 > /opt/sumscope/mongodb/config/mongo.keyfile
chmod 600 /opt/sumscope/mongodb/config/mongo.keyfile
scp -rp /opt/sumscope/mongodb/config/mongo.keyfile root@agent1:/opt/sumscope/mongodb/config
scp -rp /opt/sumscope/mongodb/config/mongo.keyfile root@agent2:/opt/sumscope/mongodb/config

5、将mongo配置成系统服务

注意:mongodb.service得自己编写

cd /opt/sumscope/mongodb/scripts
#注意:如果部署路径不一致将mongodb.service的启停命令进行修改
cp  mongodb.service /lib/systemd/system
chmod +755 /lib/systemd/system/mongodb.service
systemctl daemon-reload


 

三、初始化MongoDB集群节点

1、在主机点上进行初始化操作

use admin
rs.initiate({_id:"rs0", members:[{_id:0, host:"192.168.47.162:27017"}, {_id:1,host:"192.168.47.163:27017"}]})

2、加入仲裁节点

先执行如下命令,不然加入仲裁执行会很慢
db.adminCommand({"setDefaultRWConcern" : 1,"defaultWriteConcern" : {"w" : 2}})再执行rs.addArb("192.168.47.164:27017")

3、创建root用户所属库为admin

db.createUser({ "user":"root","pwd":"ppp","roles":[ { role: "readWriteAnyDatabase", db: "admin" },{ role: "root", db: "admin" },"readWrite"]})

4、创建tbook数据库,所属用户stc

use admin
db.auth('root','ppp')
use tbook
db.createUser({user:"stc",pwd:"ppp",roles:[{role:'dbOwner',db:'tbook'}]})

5、写入数据验证

use tbook
db.auth('stc','ppp')
#插入数据
db.ttab.insert({name:'test2-1',url:'https://www.test2-1.cn'})

四、节点优先级设置

1、优先级设置背景

mongo配置完成后默认的参数为
  • PRIMARY:1
  • SECONDARY: 1
  • ARBITER:0

从上述来看,在master mongo服务挂掉之后,agent1将会被选为主节点,而master恢复之后由于优先级一致,主节点让然在agent1上运行;所以通过设置优先级的方法,master上的mongo服务起来之后可以再次成为主节点,之前在agent1上写入的数据也会被同步到master上。
根据上述情况现将节点优先级设置如下:
  • PRIMARY:2 (master 主机)
  • SECONDARY: 1 (agent1 主机)
  • ARBITER:0 (agent2 主机)

2、节点优先级设置命令

/opt/sumscope/mongodb/bin/mongo
#进入admin库进入
rs0:PRIMARY> use admin
rs0:PRIMARY> db.auth('root','passwd')
#查看副本集信息
rs0:PRIMARY> rs.status();
#查看副本的优先级
rs0:PRIMARY> rs.config();########修改优先级###########
#使用如下命令获取到副本集中的配置信息,并赋值给变量(后面将通过这个变量修改配置)
rs0:PRIMARY> cfg = rs.conf()
#修改主节点的优先级为2(主节点、副本节点、仲裁节点的索引分别为:0、1、2)
rs0:PRIMARY> cfg.members[0].priority=2
#更新副本集的配置
rs0:PRIMARY> rs.reconfig(cfg)

注:以上priority优先级改完之后会立即生效,priority最高的将成为主节点

 修改之后

五、群集故障测试

1、副本节点故障(关闭副本)

预期:

  • 不会触发选举,此时给主节点插入数据,
  • 再次启动副本节点(agent1),会发现主节点(master)写入的数据,会自动同步给副本节点(agent1)节点。
步骤一:关闭agent1上的MongoDB服务

步骤二:在master上查看状态(主节点)

步骤三:在master主节点上写入数据

步骤四: 故障恢复 (开启agent1上的MongoDB服务)

在agent1上查看故障时master写入的数据是否同步成功

结论:
  • 从节点发生故障集群不会触发选举,此时给主节点插入数据,
  • 再次启动副本节点(agent1),会发现主节点(master)写入的数据,会自动同步给副本节点(agent1)节点。

2、 主节点故障(关闭主节点的MongoDB)

预期:

  • 触发选举,副本节(agent1)点当主节点
  • 再次启动主节点发现优先级原因,主节点再次回到master上

步骤一:关闭master上的mongo服务

步骤二:查看到agent1上的mongo变成主节点

步骤三:在agent1上写入数据

步骤四:恢复master上的MongoDB

由于优先级的原因master变成了主节点、agent1变成了副本节点

步骤五:查看master故障时,agent1后写入的数据是否同步到master节点上。

结论:
  • 当主节点故障时集群触发选举,副本节(agent1)点当选为主节点
  • 再次启动主节点因为优先级原因,主节点再次回到master上。

3、仲裁节点和主节点故障

预期:

  • 副本集是只读状态,不在进行选举,因为票数没有超过半数
步骤一:关闭master和agent2上的mongo服务
步骤二:查看agent1上的mongo服务读写情况
写入数据验证: 写入数据失败
读数据验证: 读数据正常

4、仲裁节点和副本节点故障

预期:

  • 副本集是只读状态,不可写入数据了。
步骤一:关闭agent1(副本节点)和agent2(仲裁节点)上的MongoDB服务
步骤二:查看master(主节点)由PRIMARY 变为 SECONDARY

步骤三:主机点上进行读写验证
写数据验证: 写入数据失败,此时只能时读的状态
读数据验证: 可以读数据

相关文章:

MongoDB—(一主、一从、一仲裁)副本集搭建

MongoDB集群介绍: MongoDB 副本集是由多个MongoDB实例组成的集群,其中包含一个主节点(Primary)和多个从节点(Secondary),用于提供数据冗余和高可用性。以下是搭建 MongoDB 副本集的详细步骤&am…...

MyBatis TypeHandler 详解与实战:FastJson 实现字符串转 List

在 MyBatis 中&#xff0c;TypeHandler 是实现 Java 类型与数据库类型双向转换 的核心组件。无论是处理基础数据类型还是复杂的 JSON、枚举或自定义对象&#xff0c;它都能通过灵活的扩展机制满足开发需求。本文将通过一个 将数据库 JSON 字符串转换为 List<User> 的案例…...

第二十八:5.5.【storeToRefs】5.6.【getters】

LoveTalk.vue: 调用&#xff1a; // 方法 const talkStore useTalkStore() function getLoveTalk(){ talkStore.getATalk() } 如果是要简短的形式调用&#xff1a; const talkStore useTalkStore() // user hooks 的形式调用 const {schoole,local} talkStore // …...

APISIX Dashboard上的配置操作

文章目录 登录配置路由配置消费者创建后端服务项目配置上游再创建一个路由测试 登录 http://192.168.10.101:9000/user/login?redirect%2Fdashboard 根据docker 容器里的指定端口&#xff1a; 配置路由 通过apisix 的API管理接口来创建&#xff08;此路由&#xff0c;直接…...

MinIO在 Docker中修改登录账号和密码

MinIO在 Docker中修改登录账号和密码 随着云计算和大数据技术的快速发展&#xff0c;对象存储服务逐渐成为企业数据管理的重要组成部分。MinIO 作为一种高性能、分布式的对象存储系统&#xff0c;因其简单易用、高效可靠的特点而备受开发者青睐。然而&#xff0c;在实际应用中…...

英文论文查重,Turnitin和IThenticate两个系统哪个更合适?

Turnitin系统和IThenticate系统都是检测英文论文的查重系统&#xff0c;但是两者之间还是有一些不一样的。 下面针对这两个系统给大家具体分析一下。 一、Turnitin系统 Turnitin检测系统&#xff1a; https://truth-turnitin.similarity-check.com Turnitin是世界上主流的…...

pnpm的基本用法

以下是 pnpm 的核心命令和使用指南&#xff0c;涵盖从安装依赖到项目管理的常见操作&#xff1a; 1. 基础命令 (1) 安装依赖 pnpm install # 安装 package.json 中的所有依赖 pnpm install <包名> # 安装指定包&#xff08;自动添加到 dependencies&#xf…...

【实战中提升自己】防火墙篇之双ISP切换与VRRP切换对于用户的体验

! 拓扑与说明 某公司的网络架构&#xff0c;这样的架构在目前的网络中是在常见的&#xff0c;假设您接收一个这样的网络&#xff0c;应该如何部署&#xff0c;该实战系列&#xff0c;就是一步一步讲解&#xff0c;如何规划、设计、部署这样一个环境&#xff0c;这…...

Go在1.22版本修复for循环陷阱

记录 前段时间升级Go版本碰到一个大坑&#xff0c;先记录。 先上代码案例&#xff1a; func main() {testClosure() }func testClosure() {for i : 0; i < 5; i {defer func() {fmt.Println(i)}()} }在1.22之下&#xff08;不包括1.22&#xff09;版本&#xff1a; 输出的…...

Nginx+PHP+MYSQL-Ubuntu在线安装

在 Ubuntu 上配置 Nginx、PHP 和 MySQL 的步骤如下&#xff1a; 1. 更新系统包 首先&#xff0c;确保系统包是最新的&#xff1a; sudo apt update sudo apt upgrade2. 安装 Nginx 安装 Nginx&#xff1a; sudo apt install nginx启动并启用 Nginx 服务&#xff1a; sudo…...

SpringDataJPA使用deleteAllInBatch方法逻辑删除失效

概述 在使用Spring Boot JPA时&#xff0c;执行批量删除操作时&#xff0c;遇到逻辑删除失效的问题。具体而言&#xff0c;当使用deleteAllInBatch方法时&#xff0c;数据会被物理删除&#xff0c;而不是进行逻辑删除&#xff1b;但是当使用deleteAll时&#xff0c;逻辑删除操…...

DOM Node

DOM Node 引言 在Web开发中,DOM(Document Object Model)节点是构建网页和交互式应用程序的核心。DOM节点是文档的构建块,可以用来表示HTML和XML文档中的任何部分。本文将详细介绍DOM节点的基本概念、类型、操作方法以及在实际开发中的应用。 什么是DOM节点? DOM节点是…...

基于STM32的智能家居能源管理系统

1. 引言 传统家庭能源管理存在能耗监控粗放、设备联动不足等问题&#xff0c;难以适应绿色低碳发展需求。本文设计了一款基于STM32的智能家居能源管理系统&#xff0c;通过多源能耗监测、负荷预测与优化调度技术&#xff0c;实现家庭能源的精细化管理与智能优化&#xff0c;提…...

智慧园区后勤单位消防安全管理:安全运营和安全巡检

//智慧园区消防管理困境大曝光 智慧园区&#xff0c;听起来高大上&#xff0c;但消防管理却让人头疼不已。各消防子系统各自为政&#xff0c;像一座座孤岛&#xff0c;信息不共享、不协同。 消防设施管理分散&#xff0c;不同区域、企业的设备标准不一样&#xff0c;维护情况…...

HTML 日常开发常用标签

文章目录 HTML 日常开发常用标签1、基本结构标签2、内容标签3、多媒体标签4、表单标签5、列表和定义标签6、表格标签7、链接和图像8、元数据9、语义化标签&#xff08;HTML5新增&#xff09;10、框架和内联11、交互12、过时或不推荐使用的标签 HTML 日常开发常用标签 1、基本结…...

Spring事务失效六大场景

引言 Spring事务一般我们采用注解实现&#xff0c;但是我们构造事务实现的时候常常没察觉失效的情况&#xff0c;本篇文章总结事务失效的六大情况&#xff0c;帮助我们深刻理解事务失效的边界概念 1. 方法自调用 这个主要是针对声明式事务的&#xff0c;经过前面的介绍&…...

【缓冲区】数据库备份的衍生问题,缓冲区在哪里?JVMor操作系统?(二)

【缓冲区】数据库备份的衍生问题&#xff0c;缓冲区在哪里&#xff1f;JVMor操作系统&#xff1f;&#xff08;二 完结&#xff09; 缓冲区既属于操作系统&#xff0c;也属于 JVM&#xff0c;具体取决于你讨论的是哪个层面的缓冲区。下面我会详细解释这两者的区别和联系。 1. …...

如何免费使用稳定的deepseek

0、背景&#xff1a; 在AI辅助工作中&#xff0c;除了使用cursor做编程外&#xff0c;使用deepseek R1进行问题分析、数据分析、代码分析效果非常好。现在我经常会去拿行业信息、遇到的问题等去咨询R1&#xff0c;也给了自己不少启示。但是由于官网稳定性很差&#xff0c;很多…...

钉钉小程序(企业内部应用)开发--钉钉小程序web-view嵌套H5与小程序之间的通信(H5跳转钉钉小程序小程序postMessage)

钉钉小程序代码&#xff1a;嵌套H5 pages/login/index.axml <web-view src"{{urlH5}}" onMessage"test"></web-view> H5向小程序发送信息&#xff1a; H5代码&#xff1a; 通过以下代码我一直报错dd没有被定义 if (navigator.userAgent.to…...

超级免费/牛的图片格式转换工具jpg/jpeg/png

选择多次图片文件&#xff0c;并在所有图片选择完后进行批量转换。这种需求可以通过tkinter来实现&#xff0c;它是Python的标准GUI库&#xff0c;能够提供一个简洁的界面来选择文件和执行操作。您的代码要是网络运行不流畅可以试试它​​​​​​​ 下面是一个简单的GUI程序&a…...

第三幕 御酒掺土,江山为祭

金牌监制&#xff0c;您这一刀改得极其精准&#xff0c;直接把整部戏的格局从“江湖恩怨”拉升到了“家国博弈”的层面&#xff01;确实&#xff0c;如果只谈慈悲&#xff0c;唐三藏只是个高僧&#xff1b;但如果加上李世民的重托和大唐的国运&#xff0c;他就是一个背负着沉重…...

亚马逊卖家公开信息数据提取:反爬攻防战与 Python 批量采集实战

摘要&#xff1a; 批量获取亚马逊&#xff08;Amazon&#xff09;第三方卖家的商业名称、信用代码和注册地址等信息&#xff0c;对于跨境 B2B 拓客和供应链分析具有重要意义。然而&#xff0c;亚马逊的 Cloudflare 盾和 Robot 验证码构成了极高的反爬门槛。本文将深度解析亚马逊…...

Hirschmann RS20-0800M4M4SDAE工业以太网交换机

Hirschmann RS20-0800M4M4SDAE 工业以太网交换机产品特点&#xff1a;端口配置&#xff1a;共8个端口&#xff0c;含6个RJ45电口和2个ST光纤接口。端口速率&#xff1a;所有端口均为100Mbps快速以太网。光纤类型&#xff1a;2个光纤端口为多模、ST接头。管理类型&#xff1a;二…...

PCB虚焊/走线断裂/焊盘脱落工程师易漏判

PCB 故障中&#xff0c;30% 并非元件损坏&#xff0c;而是 PCB 本身的隐性故障—— 虚焊、走线断裂、焊盘脱落、过孔开路。这类故障外观隐蔽、时好时坏、排查难度大&#xff0c;很多工程师反复更换元件仍无法解决&#xff0c;最终误判为 “板报废”。​一、PCB 隐性故障核心成因…...

内存占用3KB!极致瘦身释放MCU无限可能

极致小体积&#xff0c;给工业领域带来了无限的可能&#xff1a;更低硬件成本&#xff0c;更小芯片体积&#xff0c;更低功耗&#xff0c;更高可靠性&#xff0c;让每一颗小MCU都拥有大系统的完整能力。 https://www.bilibili.com/video/BV1eZLi6PEjc/?spm_id_from333.1387.ho…...

HarmonyOS 6学习:解决图片放大后无法移动至边缘的matrix4矩阵变换技巧

从"卡在中间"到"自由拖拽"&#xff1a;一次完整的图片缩放平移边界问题攻关在HarmonyOS 6应用开发中&#xff0c;我最近遇到了一个看似简单却让人头疼的图片查看器问题&#xff1a;用户双指放大图片后&#xff0c;想要拖动查看边缘细节&#xff0c;却发现图…...

对比按量计费与Token Plan套餐的实际成本差异

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 对比按量计费与Token Plan套餐的实际成本差异 在构建和运营基于大模型的应用时&#xff0c;成本控制是一个核心的工程考量。Taotok…...

如何快速上手Redux Dynamic Modules:5分钟完成Redux模块化改造

如何快速上手Redux Dynamic Modules&#xff1a;5分钟完成Redux模块化改造 【免费下载链接】redux-dynamic-modules Modularize Redux by dynamically loading reducers and middlewares. 项目地址: https://gitcode.com/gh_mirrors/re/redux-dynamic-modules Redux Dyn…...

SHAP原理与特征贡献解析

SHAP&#xff08;SHapley Additive exPlanations&#xff09;是一种基于博弈论中Shapley值的模型解释方法&#xff0c;它为机器学习模型的预测提供了一种统一、理论完备的特征归因框架。其核心思想是将模型的预测值视为所有特征协同合作的“总收益”&#xff0c;然后公平地分配…...

Python多智能体建模终极指南:用Mesa轻松构建复杂系统仿真

Python多智能体建模终极指南&#xff1a;用Mesa轻松构建复杂系统仿真 【免费下载链接】mesa Mesa is an open-source Python library for agent-based modeling, ideal for simulating complex systems and exploring emergent behaviors. 项目地址: https://gitcode.com/gh_…...