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

2020-08-27 20:32:19 +08:00
 noahsophie

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

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

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

就是 mysql 这种,ACID 不开串行异常级别,一致性也不能支撑完全的无脑的开发。
比如扣减余额,转账这种。默认可重复读级别并不能解决并发的问题。只要允许 2 个事务一起操作该数据,一样余额能成负。最终还是需要额外处理。
huangwei1024
2020-09-19 00:32:24 +08:00
独立 db server,介于游戏进程和数据库之间

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/702018

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX