服务端节点与分布式协调 private

服务端节点与分布式协调

回答“每类服务节点做什么、ZooKeeper 如何发现节点、Manager 如何按负载分配 Worker”。

返回技术文档目录

5. 服务端节点与分布式协调

5.1 节点职责

节点主要职责关键协作者
Login登录入口、平台认证、战区校验、登录令牌Redis、PlayerMgr
PlayerMgr会话分配、角色装载/保存、Lobby 负载选择Lobby、Redis、MySQL
Lobby玩家 Actor、养成/背包/任务、组队和战斗入口PlayerMgr、TeamMgr、BattleMgr
TeamMgr / Team队伍节点分配、队伍 Actor、准备和开战Lobby、Matching、BattleMgr
Matching匹配队列,成功后创建战斗Team、BattleMgr
BattleMgr管理 Battle 节点连接,按负载选择节点Battle
Battle权威战斗实体、地图、刷怪、结算和状态同步Lobby、Ranking、Agent
ChannelMgr / Channel频道分配、世界/公会聊天Lobby、Redis
Ranking排行榜和房间令牌索引Redis
Agent定时任务、赛季/活动、运维辅助Redis、各业务节点
Gateway网关能力,是否进入链路取决于部署下游节点
IdipFcm / IdipWeb运营管理、战区数据维护Redis、MySQL、ZooKeeper

5.2 服务发现与负载

  • ZooKeeper 用临时节点表示进程存活,连接消失后节点会自动删除。
  • ZKClient 管理 Watch,并每 60 秒刷新监控项,减少漏事件风险。
  • Lobby/Battle/Team/Channel Worker 连接对应 Manager 并持续上报能力值。
  • NodeMgr -> ZoneMgr 按负载比把节点放入 Low/Middle/High/Full 区。
  • GetFreeNode() 优先取低负载节点;GetFreeNodeEx() 必要时也检查 Full 区。
sequenceDiagram
    participant Caller as Lobby/Team/Matching
    participant BM as BattleMgr
    participant NM as NodeMgr/ZoneMgr
    participant BN as Battle Node
    participant BA as Battle Actor
    Caller->>BM: TaskBattleMgr_CreateBattle
    BM->>NM: GetFreeNodeEx()
    NM-->>BM: 低负载 Battle 节点
    BM->>BN: TaskRequest(CreateBattle)
    BN->>BA: ActorOf + CreateRequest
    BN->>BN: DicBattles[battleId] = actor
    BN-->>BM: BattleId
    BN->>BM: SetParam(当前战斗数)
    BM-->>Caller: BattleId

每场战斗是一个独立 Actor。Battle 节点用当前战斗数量作为 Ability 上报,因此可以横向扩容;带 BattleId 的请求必须路由回持有该 Actor 的节点。

5.3 Redis、MySQL 与内存状态

  • Redis:登录令牌、战区列表、在线会话、排行、房间索引、离线消息、全局活动状态。
  • MySQL:账号、角色、充值和日志等长期数据。
  • Lobby Player Actor:玩家在线期间的内存工作副本。
  • PlayerMgr:协调缓存读取、Lobby 归属和保存;角色数据由 Protobuf 对象承载。

MySQL 使用 DbShardAuth、DbShardPlayer 等按 key 选分片。新增持久字段不能只改 Lobby 对象,还要检查 proto、EF Entity/Context、旧数据兼容、Redis 缓存和保存时机。

现有 YAML 含敏感配置。不要把密码、平台密钥复制进文档或提交记录;隔离配置应由本地文件或环境注入维护。


上一篇:Unity 客户端运行架构 下一篇:网络、登录与协议