概述
skynet 本身只解决"单机多核",集群是后来补的基础设施。两套方案是前后代关系,harbor 是早期的 master/slave 模式,cluster 是后来推荐的替代。
模式
harbor(老方案,master/slave)
-
每个 skynet 进程是一个 slave,其中一个配 standalone多启一个 cmaster 做协调
-
每个 slave 内有个 harbor 服务 负责和其他 slave 通信
-
服务地址是 32bit,高 8bit = harbor id,所以最多 255 个节点(id 0 保留)
-
节点内/节点间消息投递对业务透明------skynet 根据地址高 8bit 决定直投还是转 harbor
服务地址: [harbor_id:8bit][service_handle:24bit]
优点:C 层转发,开销极小;地址透明,业务代码不用感知跨节点
缺点:
-
≤255 节点
-
静态配置,启动时定死
-
无容错------任意节点挂了整个网络视为异常,只能同机房局域网用,不能跨机房
cluster(新方案,推荐)
-
用字符串 node 名标识节点(如 "game1"、"gate"),节点数无上限
-
Lua 层 RPC(cluster.call/ cluster.send),走二进制协议
-
支持 cluster.reload()运行时更新配置,节点可动态增删
-
每个节点独立注册自己提供的服务,查询靠 cluster.proxy