29
PHP在金山游戏运营中的应用 张宴 张宴 张宴 张宴 30 30 30 30分钟 分钟 分钟 分钟

2011 PHP技术高峰论坛演讲 张宴

Embed Size (px)

Citation preview

Page 1: 2011 PHP技术高峰论坛演讲 张宴

PHP在金山游戏运营中的应用

张宴张宴张宴张宴 30303030分钟分钟分钟分钟

Page 2: 2011 PHP技术高峰论坛演讲 张宴

议 题

►►►►PHPPHPPHPPHP在金山游戏官方网站(在金山游戏官方网站(在金山游戏官方网站(在金山游戏官方网站(www.xoyo.comwww.xoyo.comwww.xoyo.comwww.xoyo.com)中的应用:)中的应用:)中的应用:)中的应用:

①、PHP团队协作开发; ②、PHP系统架构应用。

►►►►PHPPHPPHPPHP在金山游戏运营系统在金山游戏运营系统在金山游戏运营系统在金山游戏运营系统 Keyes Keyes Keyes Keyes 中的应用:中的应用:中的应用:中的应用:

①、分层架构设计模型; ②、通用性API接口设计。

PHP在金山游戏运营中的应用

Page 3: 2011 PHP技术高峰论坛演讲 张宴

PHPPHPPHPPHP在金山游戏官方网站(在金山游戏官方网站(在金山游戏官方网站(在金山游戏官方网站(www.xoyo.comwww.xoyo.comwww.xoyo.comwww.xoyo.com)中的应用)中的应用)中的应用)中的应用

PHP在金山游戏运营中的应用

Page 4: 2011 PHP技术高峰论坛演讲 张宴

PHP团队协作开发环境

►团队协作,多人同时开发一个PHP项目时,开发环境、测试环境,如何即满足每位程序员的快速调试需求,又做到版本控制?

PHP在金山游戏运营中的应用

Page 5: 2011 PHP技术高峰论坛演讲 张宴

PHP团队协作开发环境

PHP在金山游戏运营中的应用

Page 6: 2011 PHP技术高峰论坛演讲 张宴

PHP团队协作开发环境

PHP在金山游戏运营中的应用

开发了协作开发环境配置工具:XDevelop

Page 7: 2011 PHP技术高峰论坛演讲 张宴

PHP团队协作开发环境

►在自己的电脑上,修改完一个文件(例如:phpinfo.php),即可马上用浏览器运行、调试;

PHP在金山游戏运营中的应用

►设置“C:\WINDOWS\system32\drivers\etc\hosts ”为本机IP: 127.0.0.1 test.xoyo.com

►本地调试没问题后,再提交SVN;

►提交到SVN后,自动同步到Linux测试服务器,供后续测试。

Page 8: 2011 PHP技术高峰论坛演讲 张宴

PHP团队协作开发环境

PHP在金山游戏运营中的应用

►在Windows上编写的PHP代码文件,用Linux环境的PHP(FastCGI)来调试,保证了开发环境、测试环境、生成环境的统一;

►整个PHP开发环境、测试环境,即保证了程序员的快速修改、调试代码需求,又保证了整个代码都在SVN版本控制之中。

Page 9: 2011 PHP技术高峰论坛演讲 张宴

PHP代码的统一性保证

PHP在金山游戏运营中的应用

►“开发环境→线下测试环境→线上测试环境→线上正式环境”,连接的MySQL、Memcached、接口IP、端口各不同,程序员一头雾水,经常改错配置文件或忘记修改,如何解决?

►谁最了解各种服务器环境的配置?──系统工程师。

►那么,为什么不分离?

Page 10: 2011 PHP技术高峰论坛演讲 张宴

PHP代码的统一性保证

PHP在金山游戏运营中的应用

►解决方案:自行开发“配置管理后台+PHP扩展”,通过实现一

个函数kae_config(),在不同的服务器环境,可以获取到不同的配置信息,保证PHP配置文件不用因环境不同而修改。<?php$mysql_name_master = kae_config("name","mysql","master"); // 主库$mysql_name_slave = kae_config("name","mysql","slave"); // 从库

$config['db'] = array('master' => array ( 'host' => mysql_name_master['host'].":".$mysql_name_master['port'], 'username' => $mysql_name_master['user'], 'password' => $mysql_name_master['pass'], ), 'slave' => array ( 'host' => $mysql_name_slave['host'].":".$mysql_name_slave['port'], 'username' => $mysql_name_slave['user'], 'password' => $mysql_name_slave['pass'], ),);?>

Page 11: 2011 PHP技术高峰论坛演讲 张宴

PHP代码的上线发布与回滚

PHP在金山游戏运营中的应用

►将上线发布的版本号(例如:2.1.46),与SVN版本号(例如:r21909)相对应,建立拥有Web界面的《PHP代码发布系统》。

►代码的发布上线,可由项目负责人(工程师)自行完成,一般无需系统工程师的协助。

Page 12: 2011 PHP技术高峰论坛演讲 张宴

PHP代码发布系统

PHP在金山游戏运营中的应用

Page 13: 2011 PHP技术高峰论坛演讲 张宴

PHP代码发布系统

PHP在金山游戏运营中的应用

Page 14: 2011 PHP技术高峰论坛演讲 张宴

PHP与开源产品、C/C++程序的结合

PHP在金山游戏运营中的应用

►方式一:利用PHP客户端扩展,通过TCP协议与C/C++开源程序进行通讯(例如,与

Sphinx搜索、分布式图片处理系统、TT、Memcached通讯);

Page 15: 2011 PHP技术高峰论坛演讲 张宴

PHP与开源产品、C/C++程序的结合

PHP在金山游戏运营中的应用

►方式二:利用fsocketopen()、file_get_contents()、cURL等函数,通过HTTP协议与C/C++开源程序进行通讯。(例如,与我们自行开发的开源简单消息队列软件:HTTPSQS【http://code.google.com/p/httpsqs】进行通讯。)

Page 16: 2011 PHP技术高峰论坛演讲 张宴

PHP Web程序中的异步处理

PHP在金山游戏运营中的应用

►在PHP Web程序中,发送手机短信、电子邮件、转换视频格式、记录日志、数据挖掘采集等,都是比较耗时的操作。

►为了增强用户体验,需要将这些操作转为异步执行。

Page 17: 2011 PHP技术高峰论坛演讲 张宴

PHP Web程序中的短耗时异步处理

PHP在金山游戏运营中的应用

►前提:使用Nginx+PHP(php-fpm FastCGI)架构。

►PHP-FPM 提供了fastcgi_finish_reques()函数。

<?phpecho '输出内容给用户 ';

fastcgi_finish_request();/* 用户访问完成,不会等待下面的操作。 */

sleep(5); //假设一个耗时的处理过程

file_put_contents('/tmp/logs.txt', '记录日志 ');?>

Page 18: 2011 PHP技术高峰论坛演讲 张宴

PHP Web程序中的短耗时异步处理

PHP在金山游戏运营中的应用

►fastcgi_finish_reques()函数的缺点:

►PHP FastCGI 进程数有限,正在处理异步操作的php-cgi进程,无法处理新请求;

►如果并发访问量较大,php-cgi进程数用满,新访问请求,将没有php-cgi去处理。Nginx服务器会出现:502 Bad Gateway。

Page 19: 2011 PHP技术高峰论坛演讲 张宴

PHP Web程序中的长耗时异步处理

PHP在金山游戏运营中的应用

►使用简单消息队列,来解决长耗时异步处理:

Page 20: 2011 PHP技术高峰论坛演讲 张宴

PHP在负载均衡架构中的约束

PHP在金山游戏运营中的应用

Page 21: 2011 PHP技术高峰论坛演讲 张宴

PHP在Web服务器负载均衡架构中的约束

PHP在金山游戏运营中的应用

►数据对象的缓存,用APC、Memcached代替;

►PHP Web程序,不在Web服务器上生成html静态文件、PHP文件、缓存文件;

►HTML输出网页的缓存,用前端的Nginx负载均衡软件,来实现;

►优点:①Web服务器上,PHP文件能够通过代码发布系统统一管理,增、删Web服务器,非常快捷;清除缓存,能够由系统工程师去统一管理。②不经过《代码发布系统》生成、修改的PHP文件,Web服务器自动禁止执行,做到防篡改、防挂马。

Page 22: 2011 PHP技术高峰论坛演讲 张宴

PHP在Web服务器负载均衡架构中的约束

PHP在金山游戏运营中的应用

►如果需要记录Session会话,在负载均衡服务器上做IP哈希,或在PHP Web服务器上做Session共享,必不可少。

Page 23: 2011 PHP技术高峰论坛演讲 张宴

PHPPHPPHPPHP在金山游戏运营系统在金山游戏运营系统在金山游戏运营系统在金山游戏运营系统 Keyes Keyes Keyes Keyes 中的应用中的应用中的应用中的应用

PHP在金山游戏运营中的应用

Page 24: 2011 PHP技术高峰论坛演讲 张宴

界面、接口、支撑,分层架构设计

PHP在金山游戏运营中的应用

PHP、C程序的交互

Page 25: 2011 PHP技术高峰论坛演讲 张宴

PHP在金山游戏运营中的应用

数据交互设计

• 运营指令(修改经验倍数、踢人、发消息广播、启动游戏、停止游戏、更新游戏程序、更新配置文件、并服)

– 步骤:①②③④⑤⑥⑦

• 服务器监控(CPU、磁盘、内存、进程数、系统负载、游戏服务端进程是否存在等)

– 步骤:⑤⑥⑦

• 游戏心跳检测(Ping包检测,确定游戏是否正常运行)

– 步骤:③④⑤⑥⑦

• 游戏在线人数(查看游戏总在线人数、各地图在线人数)

– 步骤:③④⑤⑥⑦

⑥⑦两个步骤表示KingEyes“管理界面”通过AJAX轮询请求“功能接口”获取返回信息。

Page 26: 2011 PHP技术高峰论坛演讲 张宴

一套程序兼容不同游戏的服务端架构

PHP在金山游戏运营中的应用

甲:甲:甲:甲:我从不坐大巴,我要开自己的奥迪车过来

(不满意)

乙:乙:乙:乙:奥拓车虽烂,我仍然原意自己开车,而不是坐大巴(不满意)

丙:丙:丙:丙:我喜欢骑摩托车过来(不满意)

丁:丁:丁:丁:有大巴车接?太好了。(满意)

派大巴车来接啦!KE游戏运营平台

与游戏进程交互的初期接口设计方案

Page 27: 2011 PHP技术高峰论坛演讲 张宴

一套程序兼容不同游戏的服务端架构

与游戏进程交互的正式接口设计方案

KE游戏运营平台

接口犹如道路。

不限制交通工具,但需要受交通规则的约束。

(满意)

(满意)

(满意)

(满意)

Page 28: 2011 PHP技术高峰论坛演讲 张宴

一套程序兼容不同游戏的服务端架构

PHP在金山游戏运营中的应用

►以游戏服务端程序的每一个进程为单位,进行通讯。

Page 29: 2011 PHP技术高峰论坛演讲 张宴