聊聊手游服务器从开发到上线

一篇关于手游服务器开发的经验沉淀,围绕项目生命周期顺序展开,比较泛的进行一些重点介绍与列举。

首先,通常来说手游的项目生命周期分为下面几个大步骤:

整个周期少则1~2年,多则3~5年,时长与项目的体量、预期、市场环境都有关系。

那么作为一个服务器开发除开项目常规需求外,还需要做哪些事情,或者要注意哪些事情呢?

一、立项

项目立项成功一般需要能体现核心玩法的demo支撑,这些demo通常是客户端单机,换句话来说无需服务器过多参与立项环节,这是一个好又不好的流程。

好的地方在于在少了服务器这一部分的交互,能极大的提升demo产出效率,快速出原型;

不好的地方在于:若在游戏整体设计上存在服务器难点而在立项的时候没有很好或者成熟解决方案,可能会是一个隐患,严重的话会直接影响项目研发整个周期,甚至会影响项目是否能够上线;

所以说这是一个好又不好的流程。

除了demo参与度的问题外,在立项的时候服务器还需关注哪些事情?

  • 确定开发语言、框架、存储:开发语言和框架一般是项目所在公司祖传的,一些小公司可能会由主程主导(其实也是另一种方式的祖传),所以这里不过多展开;
  • 初步确定分区分服还是全区全服:听游戏设计者的,这里只是初步确定,要留后路
  • 根据游戏类型确定核心机制:比如游戏核心玩法是回合制、MMO、MOBA或者SLG等。涉及到核心玩法采取状态同步还是帧同步,还是客户端计算服务器校验战报等等。(这里多说一句,这个环节也是上面方案服务器不参与的坑点所在:现在很多游戏挂着回合制或者MMO设计说明,但是实际设计上已经脱离了传统回合制或者MMO的范畴,设计人员大概率不懂这个,他们觉得稍微变一些玩法还是回合制或者MMO,且方案业界早已实现过的,但是实际开发方案早已大相径庭);
  • 人员梯队:需要及时和+1、+2对齐,整体HC数量需要结合项目体量和研发期结合来看,低中高的人员梯队尽量存在;

二、研发期

研发期一般来说分为三个子阶段:

  • 研发前期:确定立项后的一个季度左右时间;
  • 研发中期:功能需求铺量的阶段,可能会有对内测试;
  • 研发后期:临近对外测试阶段;

每个阶段需要注意的侧重点不同,有些事项是需要项目内部沟通后确立的。

研发前期

  • 工具链搭建:脚本封装编译步骤、制表、配置加载等工具链的建立;
  • 制定开发、测试环境规则:进行项目组内沟通,综合各方习惯与经验后制定开发环境、测试环境服务器部署规则
  • 代码规范:制定组内大致的代码规范;
  • 统一通用接口:比如发放道具,发放邮件,增加经验等通用接口统一化,这是一个持续工作
  • 服务器进程模块划分:根据游戏玩法与内容合理划分服务器进程模块,若是有状态的模块需要考虑如何平滑更新;
  • 分支管理规范综合各方习惯与经验后制定分支管理规则,大致就是主干开发或者分支开发的区别;

研发中期

  • 代码检查工具介入:常规的静态扫描,内存检查等工具的使用,帮助在开发过程中减少遗留的坑,不留技术债
  • 关注并及时处理程序逻辑风险:除了重难点模块仔细设计,一些日常开发中的程序异常需及时排查,不留技术债
  • 关注存储内容的合理性:定期进行存储内容分析,对于不合理存储项及早优化;
  • 关注安全性:对外暴露的服务,关注协议加密安全性、被攻击后的预案;内部逻辑,关注一些关键领奖、抽奖等关注是否存在逻辑漏洞,防止被刷;
  • 关注服务模块可扩容性:对于各个模块如何扩容进行设计规划;
  • 配置平台化(若需要):各项配置平台化实现,程序能够热加载;

研发后期

  • 监控报警体系:后期随着功能模块收尾,对应的监控体系需要建立,除了机器的常规负载外,业务上敏感的报错、关键统计等都需要纳入监控并梳理报警规则;
  • 压测:对重点模块进行压测,有条件进行全链路压测,尽量提前,需要预留优化时间;(中期也可以持续进行压测,考虑到部分模块可能会由重构或者需求变更,后期在功能稳定后进行统一压测更省人力成本);
  • 灾难预演:对于进程core,服务器宕机,存储失效等严重问题进行模拟评估,给出恢复流程方案;
  • 容量预期:结合测试、上线DAU预期,根据压测数据对服务器进程部署数量进行规划,建议预留30%左右冗余;
  • 确定线上发布流程综合各方习惯与经验后制定线上发布流程
  • 模块开关规则建立:重点模块有开关控制,为程序错误做最后的兜底;

三、测试期

测试期根据项目安排有长有短,又可以分为一测、二测甚至三测(或者说删档测试一、删档测试二、不删档测试等等,叫法不一,本质一样),这里每个测试阶段需要关注的事情差不多,会有一些侧重点的区别。

  • 强调并遵守流程:遵守流程为了保护自己。比如线上账号读写权限操作流程、配置更新流程、进程更新流程等等;
  • 合理安排线上值班:在测试的同时,日常迭代和bug修复也会同时进行,为了让大部分同学专注当前的事情,因此轮流安排有经验的同学进行每日线上值班十分必要。值班内容除了观察线上机器资源、进程运行、各种日志指标是否异常外,还需收集运营、客服报过来的用户问题,经过初步过滤后再将有“意义”的问题分给对应模块的同学解决;
  • 容量校对:收集线上真实数据与压测数据进行容量校对,为后续上线提供更精确容量数据;
  • Bug分级遇见问题不要慌,每个人都会出问题。根据Bug轻重缓急合理安排开发节奏,不是所有的Bug需要立即修,也不是所有Bug都不管。
  • 版本分支规划:大型需求是否需要专属分支开发,版本bug修复分支和主干怎么规划等等;

四、上线

上线和测试期主要区别在于用户量与功能稳定性,各种流程与问题向的内容与测试期基本一致。除此之外还需强调的是:

  • 服务器部署根据测试数据与运营预期导量数据做好服务器部署,包括数量与分布,
  • 合理安排线上值班需要更多关注用户增量,配合运营关注舆论,用户有突然暴涨的可能,做好预期,抓住机会
  • 时间平衡:线上问题有些是不可预期的,若解决问题时间影响到了日常开发,需要根据优先级及时调整

五、迭代期

迭代器与上线会有一些重合,一般上线1个月左右进入平稳的迭代期,需要重视的:

  • 注意需求前后兼容:上线后不像测试期有删档重来的机会,对于一些老需求的优化或者改造在需求实现的基础上,还需要进行对过往数据和逻辑兼容的评估;
  • 更细致的新需求或新机制评估:除了正常开发外,负载压力以及部署都需要考虑的更加细致(特别是大型需求),因为这个时候篮子里面已经有鸡蛋,丢一块石头进去可能整个篮子都翻了;

一些其他

对于服务器团队来说,别人给予较高的评价是“稳”。它有二层意思:一、能平稳攻克重难点内容;二、对问题快速响应,快速解决,心中有数。

第一层意思和成员能力与经验相关,这里想聊一下第二层核心内容:问题。

一般来说问题根据时间轴可以拆解成问题发生前,发生时,发生后:

问题发生前:在问题完全爆发前,我们通过一些手段发现问题(而不是等用户投诉)并修复问题,这样做极大降低损失。

这些手段主要围绕各种监控告警、代码Review、压测展开。

问题发生时:第一时间定位问题,若有功能开关,先关闭功能开关降低损失(需要根据问题严重性来评估);若没有开关,借助工具、日志、经验等等进行更精准的定位与问题修复。后者更依赖个人能力。

所以重点功能的开关十分重要,往往在关键时候极大降低损失,以及对问题产生者的心理压力。

问题发生后:除了积极配合做损失、影响评估外,对于一些共性问题积极总结,让更多人知道这个问题。还是那句话:遇见问题不要慌,每个人都会出问题,不要压力过重。

其实我们所做的风险评估、规避、预警等措施都是围绕这三个阶段展开,将这三个阶段把握好问题也没那么多问题。

(全文结束)


转载文章请注明出处:漫漫路 - lanindex.com

Leave a Comment

Your email address will not be published.