Web 开发程序员谈网游服务器开发
今天参加了一个和某网游开发团队的交流, 感受到了网游开发和 Web 开发之间的巨大差异, 所以我写了本篇博文.
传统的网游开发者可能由于更大的精力放在游戏逻辑上面, 并且因为游戏客户端是一个高度内聚逻辑复杂的终端程序, 所以网游开发者在开发服务器端的时候, 也容易把客户端的经验放在服务器端, 很少考虑动态可扩展性和服务容灾性.
Web 开发的一些经验对网游服务器开发是非常有用的:
1. 服务(子系统)无状态化,
2. 所以服务可以采用 Web 模式来开发, 也即 Web Server + 脚本语言 + 存储
服务(子系统)无状态化是整个系统动态可扩展性和服务容灾性的保证. 例如在 Web 系统中, 一个全静态内容的网站是无状态的, 只要部署了多个服务器, 那么用户访问任何一台服务器都 OK. 这个例子说明了服务无状态化是系统可扩展性和容灾性的保证, 同时也隐含了一个要求: 数据是同步的.
网游程序员会立即提出疑问, 你举的例子是静态网站, 但网游服务器的子系统可不是那样的, 能实现无状态化吗? 比如, 用户连接到了某台网游服务器, 这台服务器上面会保存有这个用户的很多信息数据, 如果用户断开连接再连到另一台服务器, 那他的数据不是全丢了吗?
其实, 如果把服务分成逻辑(指令)+存储/状态(数据), 那就可以把有状态的服务改造成无状态的服务. 因为一般的网游服务器把逻辑和存储绑在一起, 所以做不到无状态化, 所以, 也就无法动态地增加了减少服务器.
一旦把逻辑和存储分开(如 PHP + MySQL), 就可以使用 Web 技术来开发网络游戏服务器. 逻辑本身肯定是无状态的, 所以可以任意添加和减少服务器和实例. 而存储本身经过开发, 也可以做到无状态, 如 MySQL 集群和其它的存储群集. 把一个有状态的服务改成无状态的服务, 可以通过简单地把逻辑和存储分离即可.
建议继续学习:
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:ideawu 来源: idea's blog
- 标签: 网游
- 发布时间:2013-10-29 23:02:33
- [219] WEB系统需要关注的一些点
- [12] 一次神奇的MySQL优化
- [12] InnoDB insert性能拐点测试
- [12] Spark性能优化——和shuffle搏斗
- [12] 我的git笔记
- [11] 深入剖析 redis replication
- [10] Python 代码规范小结
- [10] Android设计中的.9.png
- [10] 浏览器的工作原理:新式网络浏览器幕后揭秘
- [10] Python程序的执行原理