开服涌入的问题

之前我们向运营要求更多的导入,运营说每每开服导入流量,我们的留存并不高,拒绝更多流量导入。

刚刚完成的压力测试,我发现大量用户在集中时间内涌入服务器,创角进入游戏占用了90%的cpu时间,服务器基本没有cpu资源响应其他。


这是个很严重的问题,第一次的体验决定了这个玩家的感受,决定了游戏的留存。

阅读代码,创角和进入游戏的代码含有不少的同步数据库操作。怎么破?


我的想法是,开服前提前创建5000个角色和相应的玩法数据。创建时,系统分配一个角色数据,进入游戏,服务器仅仅需要一步数据库操作,更新此角色数据和帐号的关系。


开服,进入游戏效率低下解决
1思路
    不要让多个用户进入游戏循环这个同步操作,产生竞争条件,延伸就是不使用一个线程一个世界,一个服务区多个线程分多个世界线的概念,使用一个线程几个场景,一个服务区一个世界。还是那么多用户,那是那么多线程,进入不同场景的用户进入不同的线程,争夺互斥资源的机率大大减小。

    不在游戏循环内加载用户数据,或者保存用户数据
    对于进入游戏不使用进入场景算法。单独设计,并增强为进入计算展开,一次计算多个用户进入(扫描在场用户针对多个进场用户)
 

2方案
    0 账号的状态设置为 logining , login , logouting , logout 。
    1 用户数据库读写分离,假设单独的用户数据加载服务器SERVERusrdata。登录授权完成后,在此加载用户数据。
    2 SERVERusrdata上用户数据加载完成后,向客户端发送信号SINGALusrdata。
    3 客户端接收信号SINGALusrdata,登录游戏服务器SERVERgame。
        检查账号的状态,
            logining ,logouting ,返回SINGALretry 3次后间隔更长时间
            login ,不用拉取数据,切换账号会话,旧链接丢弃即可。
            none , logout ,向SERVERusrdata拉取用户数据,设置为 logining

    4 SERVERgame向SERVERusrdata拉取用户数据(保存在游戏同步循环外LOOP的内存区),
        成功向客户端发送SINGALgameok,并安排LOOP内的任务,
        失败向客户端发送SINGALgamefailse,

    5 客户端收到SINGALgameok,do something;收到SINGALgamefailse,重复3,4,5
    6 不同的LOOP执行step4安排的任务
        计算位置和属性和战斗的同步
        同一场景可以一次计算多个进入
        设置状态为 login
    7 loop
    8 设置账号的状态为 logouting ,安排LOOP外的任务
    9 保存用户数据结束,设置账号的状态为 logout

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章