WEB游戏服务器架构(HTTP)

WEB游戏服务器架构(HTTP)。在如今游戏中,越来越多使用WEB架构方式来做游戏,《临兵斗者三国志》也是其中一个。我使用了PHP来做WEB服务器主逻辑语言,原因为他的开发速度快,并且容易招人容易上手。 接下来主要来介绍下WEB服务器游戏架构的方式。(本文以PHP+MYSQL+MEMCACHE+NGINX为例)

PHP可以选用任何你熟悉的框架,能站在别人肩膀上的就站上去吧,自己写时间过长。我们选用的是Yii框架,特点不多没有刻意去挑选。Memcache主要存储数据表的内存,因为PHP没有内存可控制,所以结合Memchache是最好的选择,也可以用Redis,功能上都一样,不过Redis有排序而已。用NGINX主要用来做WEB端的负载平衡,也可以在测试时做IP过滤,以及维护时的IP封锁。

WEB架构图:

----------------------------------------------------------
GAME_DB1(Mysql-master&slave)---|
GAME_DB2(Mysql-master&slave)   |  
GAME_DB3(Mysql-master&slave)   |---------------|
GAME_DB4(Mysql-master&slave)---|               |
                                               |
Memcache1(master&slave)                        |
Memcache2(master&slave)                        |
Memcache3(master&slave)                        |
Memcache4(master&slvae)                        |
/       \                                      |
GameServerPHP1                                 |
GameServerPHP2---------------------------------|
GameServerPHP3  
|     /  
Nginx  
------------------------------------------  
GB_DB(Mysql)  
|  
GM_ADMIN_PHP+(memcache)  
------------------------------------------

描述:

Ngix起负载均衡作用。

Memcache起数据缓冲作用,当PHP从Memcache中读取数据发现Memcache没有,就从MYSQL里读并且存到Memcahe,查看Memcache玩家数据是否大于某个数(主要是限制内存,不能让Memcache内存无限增加最后导致奔溃),当PHP需要更新和插入时,PHP先插入或更新到MYSQL,然后再插入或更新到Memcache,使得两边数据能够同步,抑或只插入或更新到MYSQL,在查询时再进行Memcache加载也可以。 Mysql和Memcache设置为多台,主要是用于当数据过大时的对数据库做的数据散列处理,就是将某块功能数据单独放在某个数据库上,抑或将主键以某种方式分段拆分,例如按每100万主键拆分Mysql,0-100万为1台Mysql,101-200万为另一台Mysql以此类推。

关于PHP框架的改造,我们需要遵循框架的接口,这样我们才能对底层的框架进行改造并且不影响上层的逻辑。例如上面提到的当查询时,先对Memcache进行操作,查看是否有数据,如没有再对Mysql操作,这种写法的基本条件就是接口必须使用框架固有的,而不是直接写sql语句来执行,但凡只用使用sql语句的都需要被改成框架接口,并且尽量不使用合并操作和查询嵌套。

关于数据统计,由于WEB没有逻辑线程,所以我使用Linux的任务或Windows的计划代替,每天执行一次某PHP脚本,每周执行一次某PHP脚本,以达到统计数据的要求。 这个框架是一般游戏服务器的架构,在即时上线时,因为前期人数并不多,服务器的台数可以自由调整,随着人数上线的增多可以动态得进行扩充GameServerPhp服务器的数量,Memcache服务器的数量,最后实在抗不住,也可以增加DB的数量。

转载请注明出处:http://www.luzexi.com