Skip to content

分片运行时

字数
626 字
阅读时间
3 分钟

分片编码合同。部署与启停见 分片部署

何时用分片

单进程承载十余只及以上账号、事件循环或连接池压力明显时,在共享同一 data/ 的前提下拆为 1 hub + N worker。仅 1~2 只账号时继续单进程即可。

进程职责
HubWebUI、协议端管理、注册表、AI/MAA 回调入口;不接牛牛反向 WebSocket
Worker群消息与玩法主路径;每进程约 PALLAS_SHARD_BOTS_PER 只账号

跨进程 claim 依赖 Redis(REDIS_URL / PALLAS_COORD_REDIS_URL);与 AI 仓可共用。详见 分片部署

拓扑

角色

角色职责代码锚点
Hub协调、控制台聚合、部分入口;非主要消息处理is_sharded_hub / is_hub_role
Worker插件与群消息主路径is_sharded_worker
Redis分片协调事实源(非可丢弃缓存)分片 coord / presence
Protocol账号接入,连到 worker协议扩展

角色探测:from pallas.api.platform import is_sharded_hub, is_sharded_worker, is_sharding_active

编码约束

MUST NOTMUST
假设 hub 本地已加载全部运行中插件需要全局视图时走 worker 聚合 / registry
把进程内状态当集群全局状态跨 worker 用 Redis / 共享注册表
在 async 热路径做阻塞轮询用既有 listener / pubsub 模式

高频能力

能力合同API(pallas.api.platform
消息去重 / claim同条消息不可多 worker 重复响应try_claim_group_message_onceclaim_group_message_eventclaim_group_handler
群独占活动同群同时一场begin_group_exclusive_activitytry_begin_group_owned_gate
Fanout / host gateingress 策略与主持牛text_matches_plugin_fanoutdream_session_ingress_passes
跨分片发送指定 bot 代发send_group_message_as_botinvoke_bot_action
Hub-only 启动逻辑勿在 worker 重复挂载startup.pyis_sharded_worker() 守卫

触发分片设计的改动

涉及任一项即按分片设计:

  • 同群多牛
  • 跨 worker 去重
  • 指定某 bot 执行动作
  • 群级独占活动
  • AI callback 回到发起 worker
  • WebUI 展示 worker 实时态

禁止

禁止原因
仅在单进程验证上述能力分片下会重复响应 / 丢状态
hub 读本地插件态做全局结论遗漏 worker 专属插件
把 Redis 当可丢弃缓存协调层事实源

相关