背景
- 使用goroutine 轻轻松松高并发
- 使用nats互连所有server进程,所有消息通过nats中转
- 可扩展:升级nats集群,实现全区全服,动态负载
gated
- 处理客户端连接、交互的服务器
- 每一个session分配一个goroutine
- 可以部署多个进程,客户端随机连接其中一个(或者加一个动态负载,控制客户端连接哪个gated)
- 与游戏项目无关
- 连接加一个握手策略,防止ddos攻击
gameserver(type1 — typeN)
- 按具体游戏内容功能区分不同的server类型,如登录、普通逻辑、地图逻辑、联盟逻辑,各自实现不同的gameserver
- 可根据server不同选择合适的goroutine策略,如下有两种策略:
- 每个roleid分配一个goroutine执行逻辑
- 定义一组goroutine,将roleid哈希一下,分配到固定的goroutine执行逻辑
logserver
- 记录日志,与游戏项目无关
- 与各个server直连,提高效率
DB
dbproxy + redis + mysql,实现数据集群模式
- 对于开发者,只与dbproxy交互,写数据/读数据都是调用dbproxy接口
- dbproxy根据请求,将roleid哈希一个值,根据hash值丢到一个redis,读/写redis数据
- redis将数据写入mysql,持久化存储
注意点:
- dbproxy使用的是豌豆荚的一个redis集群方案Codis
- dbproxy 最后执行写操作时,是使用mset,对于一个mset是原子操作,同时成功或者同时失败,但是一批mset,会存在部分失败,部分成功的可能。可以考虑在执行一批mset前,读出数据,然后当某一个mset失败后,将写成功的数据回滚