近几年,游戏算是互联网热门,大规模多人在线游戏出来的很多,但死的也很多。
大多数都死在技术上。死在哪些技术上?今天我就想把自己的感受分享一下:
服务器端从资源的角度来看,大体分为:CPU,带宽,数据库。
特点:
1.因为游戏服务业务比较复杂,所以一般都采用分布式的方法。
2. 因为mmorpg对实时性要求比较高,所以线程模型比较复杂。
bug出现在哪?
1. 分布式结点通信是不稳定的,但是很多后端程序员都没有这种意识,一旦分布式数据不一致,一定要想办法去修复。其实对于分布式一致性修复,可以放在玩家生存期(也就是玩家上下线)上。就是因为出现分布式结点通信不稳定的几率非常小,所以在压力测试时也未必发现的了。但是当游戏上线,游戏环境混乱起来,这个时候压力测试发现不了的问题都出来了。
2. 为了提高实时性,一般数据都需要缓冲,而在分布式架构上数据缓冲就会存在一致性问题。一致性问题可以表现为:进程A与进程B数据的不一致,内存与DB的不一致。一致性问题是非常致命的,这需要后端有很强的意识,比如公会系统,我们一般都会内存中有公会数据,而DB会对应公会的多条记录。我们必须要关注内存对象与DB记录的生存期一致性。这种可以通过专项的压力测试分析避免。其实说白了,就是碰到内存与DB数据创建释放,就要考虑专项压力测试。
3. 为了提高实时性,游戏系统会进行各种复杂的进程间,进程内的异步操作,这些异步操作如果不返回怎么办?期间还要考虑协议的重入,因为你没有立马给返回,同样的协议再次发来,你如何在可重入、代码简洁与高可用做好权衡。同时还会因为线程模型的复杂出现一些千万不遇,一遇奔溃的数据竞争问题,也许这些问题一辈子都没办法解决,所以清晰的内存模型,线程模型是一个后端程序员的基本功(学习数据结构不是为了应付面试的)。
阅读(2563) | 评论(0) | 转发(0) |