请选择 进入手机版 | 继续访问电脑版

NoahFrame

 找回密码
 Register Now
搜索
热搜: redis mysql tutorial
查看: 879|回复: 7

框架无单点?请管理员回答

[复制链接]

1

主题

4

帖子

25

积分

Newbie

Rank: 1

积分
25
发表于 2017-10-26 20:27:43 | 显示全部楼层 |阅读模式
维护一个游戏世界玩家列表是一个游戏服务器的基本需求,文档说该框架任意节点都可扩展,请问我的全局玩家列表这个东西在worldserver上如果扩展成两个如何维持唯一性呢。还有就是工会数据怎么处理呢
回复

使用道具 举报

30

主题

111

帖子

652

积分

Administrator

Rank: 9Rank: 9Rank: 9

积分
652
发表于 2017-10-27 05:20:47 | 显示全部楼层
游戏数据分为2种:
1)游戏数据为游戏对象数据,比如player,对象上线后把数据加载到当前进程内存中
2)游戏数据存储在数据库中,比如存储在redis中,每次处理业务,直接获取出来然后处理再存储进入数据库

针对1:
扩展节点,其实就是在player上线的时候根据某种分配算法,将他们分配到不同的业务处理服务器上,比如根据gameserver权重或者在线数量或者一致性哈希等

针对2:
数据存储在数据库中,因此不在服务器进程中不存在数据的状态和数据上下文等信息,服务器比如worldserver内存中并不存储数据,只单纯处理业务,因此是可以随意水平扩展的。

明显的,你说的这个列表数据,应该属于2类,因此可以随意扩展。

工会数据,和你的策划需求有关系,你可以直接存储在数据库中,也可以在进程内存中和玩家一样处理。
回复 支持 反对

使用道具 举报

1

主题

4

帖子

25

积分

Newbie

Rank: 1

积分
25
 楼主| 发表于 2017-10-27 10:48:58 | 显示全部楼层
一般的服务器结构是 一个worldserver 下面管辖几个gameserver,同一个工会的人会在不同的gameserver上,工会的操作一般都会放在worldserver不会放到gameserver上,因为那样实现不了功能,如果把工会数据放到redis里面操作,不说你开一个异步线程去操作这些数据有多复杂,就拿并发操作同一个工会数据这点来说,就是一个很难控制的点了。需要对redis数据进行各种锁操作,这个不是很好处理。所以不太好把这部分数据放redis里面。这个做的话这个worldserver就很难扩展了,基本就是一个单点了。
回复 支持 反对

使用道具 举报

1

主题

4

帖子

25

积分

Newbie

Rank: 1

积分
25
 楼主| 发表于 2017-10-27 10:57:06 | 显示全部楼层
Ketoo 发表于 2017-10-27 05:20
游戏数据分为2种:
1)游戏数据为游戏对象数据,比如player,对象上线后把数据加载到当前进程内存中
2)游 ...


一般的服务器结构是 一个worldserver 下面管辖几个gameserver,同一个工会的人会在不同的gameserver上,工会的操作一般都会放在worldserver不会放到gameserver上,因为那样实现不了功能,如果把工会数据放到redis里面操作,不说你开一个异步线程去操作这些数据有多复杂,就拿并发操作同一个工会数据这点来说,就是一个很难控制的点了。需要对redis数据进行各种锁操作,这个不是很好处理。所以不太好把这部分数据放redis里面。这个做的话这个worldserver就很难扩展了,基本就是一个单点了。
回复 支持 反对

使用道具 举报

30

主题

111

帖子

652

积分

Administrator

Rank: 9Rank: 9Rank: 9

积分
652
发表于 2017-10-27 16:15:22 | 显示全部楼层
robot 发表于 2017-10-27 10:57
一般的服务器结构是 一个worldserver 下面管辖几个gameserver,同一个工会的人会在不同的gameserver上, ...

1:redis并不需要开异步, 在world可以直接撸,那怕gs,加入协程也足够了
2:并发同一个工会并不需要上锁,请看proxy路由消息的那一部分,有类似的功能。
回复 支持 反对

使用道具 举报

1

主题

4

帖子

25

积分

Newbie

Rank: 1

积分
25
 楼主| 发表于 2017-10-27 16:49:18 | 显示全部楼层
Ketoo 发表于 2017-10-27 16:15
1:redis并不需要开异步, 在world可以直接撸,那怕gs,加入协程也足够了
2:并发同一个工会并不需要上锁 ...

我在两个不同的服务器共同操作一份redis数据不需要锁?
回复 支持 反对

使用道具 举报

0

主题

1

帖子

14

积分

Newbie

Rank: 1

积分
14
发表于 2017-10-27 17:04:58 | 显示全部楼层
本帖最后由 junyius 于 2017-10-27 17:07 编辑

通过proxy把 对工会的所有写消息都路由到同一个worldserver
回复 支持 反对

使用道具 举报

30

主题

111

帖子

652

积分

Administrator

Rank: 9Rank: 9Rank: 9

积分
652
发表于 2017-10-27 19:02:59 | 显示全部楼层
robot 发表于 2017-10-27 16:49
我在两个不同的服务器共同操作一份redis数据不需要锁?

操作数据库用锁是下下策,通过设计,直接在设计层面避免掉锁。

路有消息,同一个工会会路由到同一个服务器处理,因此不需要
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | Register Now

本版积分规则

 

GMT+8, 2018-10-21 07:36 , Processed in 0.077869 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表