V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Game Engines
Unreal Engine
MyCryENGINE
noahsophie
V2EX  ›  游戏开发

现在游戏后端是怎么做存储的?

  •  
  •   noahsophie · 2020-08-27 20:32:19 +08:00 · 4023 次点击
    这是一个创建于 1551 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前的做法是玩家数据直接在内存操作,然后定时同步到 mysql (重要数据会实时同步),但是服务器宕机这块要怎么处理?

    11 条回复    2020-09-19 00:32:24 +08:00
    Mutoo
        1
    Mutoo  
       2020-08-27 20:37:55 +08:00   ❤️ 3
    宕机=回档+发玩家补尝邮件
    dabaibai
        2
    dabaibai  
       2020-08-27 21:06:05 +08:00
    宕机无解. 回档是必然
    wysnylc
        3
    wysnylc  
       2020-08-27 21:16:37 +08:00 via iPhone
    双写备份
    feelapi
        4
    feelapi  
       2020-08-27 21:37:21 +08:00
    https://github.com/viabtc/viabtc_exchange_server
    比特币交易所引擎,可以作为参考。
    xuanbg
        5
    xuanbg  
       2020-08-28 08:40:35 +08:00
    @feelapi 用这个方案估计大家都不能愉快滴玩游戏了。。。

    可靠性越高,系统复杂度就越高,可用性也就越低。游戏嘛,还是回档+补偿就完了,最简单。研发满意、策划满意、运营满意、玩家满意,你还有啥不满意的?
    ZSeptember
        6
    ZSeptember  
       2020-08-28 10:09:46 +08:00
    游戏我的理解确实都是在内存中操作的。
    有没有这种玩法:操作日志可以写 kafka,通过 kafka 同步数据到数据库,比定时同步数据要准确点吧。
    如果写 kafka 也影响延迟,可以异步写。
    noahsophie
        7
    noahsophie  
    OP
       2020-08-28 10:16:56 +08:00
    @ZSeptember 我们做的是分区分服的架构,定时同步主要是为了减少 db 的压力,所以你写到 kafka 里然后在写到 db,最终的压力都 db 上,没有必要
    takemeaway
        8
    takemeaway  
       2020-08-28 10:52:55 +08:00
    又要快,又要好,世间事无两全。
    0x49
        9
    0x49  
       2020-08-28 11:47:58 +08:00
    哈哈 是这样
    @xuanbg
    dogfeet
        10
    dogfeet  
       2020-09-10 11:05:27 +08:00
    C++ 的服务端吗?说个非 C++ 的方式,填业务逻辑的地方是框架预留的地方,都做了异常的检测。服务挂掉的时候框架会提供指定的异常回调处理。一般情况下在这里记录日志加回写数据。半年的研发周期本身就应该让宕机的概率变的很低。挂掉还有机会回写将数据丢失的可能性进一步降低(当然,要保证回调里面不再或几乎不会出现异常)。
    但是,这样还是不能解决数据一致性问题,比如修改数据一半挂掉。这种情况下回写的数据是不完整的。这种只能通过业务逻辑中的日志来记录。非极端情况下是能将玩家数据恢复到之前一致的。
    以前特别纠结这种问题,总想为什么没有既能完全保证数据一致性,性能又好,心智包袱又小的方案,让写业务逻辑的时候无脑一点。现在想想真的太难,老老实实做好日志记录,关键数据一致性问题能通过日志追踪复原到比较理想的状态也差不多了。

    就是 mysql 这种,ACID 不开串行异常级别,一致性也不能支撑完全的无脑的开发。
    比如扣减余额,转账这种。默认可重复读级别并不能解决并发的问题。只要允许 2 个事务一起操作该数据,一样余额能成负。最终还是需要额外处理。
    huangwei1024
        11
    huangwei1024  
       2020-09-19 00:32:24 +08:00
    独立 db server,介于游戏进程和数据库之间
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5719 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 03:10 · PVG 11:10 · LAX 19:10 · JFK 22:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.