张宴运维博客

2020年07月11日 星期六 新站及个人站网址收录导航

 

张宴的博客
张宴是一名系统开发工程师,从事于移动互联网领域,专注于高性能后端技术、平台架构与数据挖掘。曾任金山游戏运营技术中心开发经理/架构师、赶集网架构师、新浪播客系统开发工程师。
相信很多人都遇到过这种情况:在一个老项目上修改、增加一些新功能所花费的时间,不比重新来做一个包含所有功能的新项目时间用得少。一个需要长期维护的项目,不可避免地会面临老员工的离职、新员工的接手,很多时候,项目代码的可维护性将决定一个项目的生存周期。让一个新员工在规定开发时间的压力下,去面对一个文档不够详细、陌生的、功能复杂的庞大项目,短时间弄明白所有功能逻辑不是一件容易的事。所以,任务需要切分,将一个大的任务切分成一个个小模块之后,各模块之间可以做到代码独立,互不影响,可维护性也大大增强。
 
关于任务切分,我以本人今年负责的两个重要项目架构设计为例来介绍一下。在第一个项目:金山游戏官网的《用户行为分析系统》中,由于数据挖掘计算需要消耗较高的内存、CPU资源,一台服务器的处理能力不够,而商业的分布式数据仓库价格又太贵,所以,只有从程序应用中下手,进行任务切分。我们先按需要挖掘的数据指标,将整个数据挖掘任务切分成多个数据挖掘插件,每个插件可以在不同的服务器上运行,多个插件可以同时在多台服务器上。多个数据挖掘插件之间,如果用到相同的某项数据,那么,就将该项数据以冗余方式,复制几份提供给需要的插件,从而实现插件之间无交互、无关联,保证了超大数据量下插件的运算速度。
 
在第二个项目:金山游戏新版运营管理系统中,则将整个任务切分成了PHP Web管理界面、PHP Web API功能接口、C/C++中间件引擎三部分。这是一种分层结构切分,最上层的“PHP Web管理界面”调用“PHP Web API功能接口”,“PHP Web API功能接口”调用运行在游戏服务器端的“C/C++中间件引擎”,“C/C++中间件引擎”与“游戏服务器端进程”通过TCP、UDP二进制协议、信号、命令行等多种方式通信。四者之间相对独立,代码无关联,通过一层层API接口实现交互。“PHP Web管理界面”负责通用界面实现。“PHP Web API功能接口”内部,又按接入的游戏模块、子功能模块进行了更细的切分,各功能模块之间通过内部API交互。“C/C++中间件引擎”大而全,不处理具体指令,但兼容TCP、UDP、HTTP、HTTPS/SSL、信号、命令行等大多数通信方式,负责和各种类型的游戏服务端交互。这是一套完全由API接口驱动的系统架构,一款新游戏接入运营管理系统时,只需在“PHP Web API功能接口”中增加一个模块;一个游戏新管理功能的增加,只需要在“PHP Web API功能接口”中增加一个子模块。通过任务切分,将复杂功能简单化,也将原来接入一款新游戏所需要的几个月时间,缩短为1~2周。
许式伟:您在面试时,通常关注应聘者的哪些方面?哪些问题经常会问呢?
 
张宴:第一,需要具备岗位要求的基础技能知识,这方面我不再详述。
 
第二,注重项目经验与积累,不看重学历与工作年限。做一个项目,犹如打一场战役,身经百战,积累下来的成功经验可以让工作更得心应手,失败经验可以避免走很多弯路。
 
第三,能够在1~2个以上技术领域精通。所谓术业有专攻,能够在某几项技术领域做到精通的人,相信对于新的技术领域或者从未有过相关经验的新项目,也能够轻松胜任,做到尽善尽美。
 
第四,关注应聘者的知识广度。如今的项目,已经告别个人英雄时代,讲究团队的协作。知识面越广,尽管在非专攻领域的深度可能不够,但是,知己知彼,可以站在一个更高的角度上看问题,这对于团队协作开发、项目融合的益处是显而易见的。
 
第五,具备良好的领悟能力、思考能力、设计能力、创新能力。基础技能知识不够可以学习,经验不足可以积累,技术不精通可以钻研,知识面不广可以开拓,但要培养这四项能力,是一件非常困难的事。要打造一支优秀的团队,这四项能力不可缺少,它们的重要度甚至超过以上的四方面要求。
 
我不会经常去问固定的问题,但所问的问题,几乎都跟以上的这些方面相关。
 
许式伟:您曾尝试开放自己的程序代码吗?您对中国国内开源社区的现状有何看法?
 
张宴:是否开源自己的程序代码,跟所在公司或部门的性质有着密切的关系。如果是在研发驱动型企业或部门,程序代码是公司生存的命脉,需要与竞争对手拼技术和保持技术领先的优势,因此,很难支持开源事业。反之,如果是在运营驱动型企业或部门,技术是用来提高运营质量、运营水平的工具之一。将纯粹的技术代码或产品,从公司的业务产品中提取出来,进行开
源,可以按照开源产品的要求,提高公司内部技术产品的规范化、标准化,还可以引用更广大用户的使用、反馈和意见,解决未发现的潜在Bug,改进代码质量,提升技术水平。对于提高运营质量、运营水平来说,益处多多。我也尝试开源自己的一些代码,例如简单消息队列服务HTTPSQS(http://code.google.com/p/httpsqs/)、MySQL HTTP/REST客户端MySQL-UDF-HTTP(http://code.google.com/p/mysql-udf-http/),同时,也鼓励团队成员尝试开源,例如刚才提到的自动同步软件Sersync。
 
国内的开源社区在不断壮大,很多知名互联网公司都开源了自己的一些产品,但大多数还只停留在开源产品的使用、技术交流、汉化层面,真正参与到开源产品编码中的人还是较少,很多开源产品最终还是由原作者或原公司团队维护。国内开源社区的道路仍然漫长。

您可能也喜欢