#####2015-3版
本文是心动对于网络游戏后端设计的要求和 Guide Line 意见,供心动内和心动关联项目参考。
本 Guide Line 中的意见分为“推荐”、“强烈推荐”、“要求”、“强烈要求”、“不推荐”、“强烈不推荐” 六个优先级别,大部分不是强制性的,但是非常建议开发侧尽量多的考虑,以便保证业务上线过程稳定高效。
注:本意见内容会不定期更新,建议随时关注最新版本
一、强烈要求
使用 Docker 作为开发和部署方案的基础。基于Docker方案可以大幅降低成本。心动会推动2015年底前所有现存项目和新项目都使用基于Docker的方案进行部署。
二、要求
客户端与服务端之间的通讯内容有加密
客户端与服务端之间的 通讯协议 能够防止重发(例如加入类似nonce参数)
整体架构对公网暴露的IP控制在2-5个(可以自己开发网关,也可以使用负载均衡通用件例如 HAProxy )
后端游戏逻辑处理进程如果自建内存数据库,数据库事务要能保证 ACID 即原子性、一致性、隔离性、持久性
使用64位编译
日志系统同时使用fluentd(接入心动日志平台)
默认服支持在多组服中随机或 轮询
具备 容灾 能力,重启容器可保证继续提供服务
三、强烈推荐
整个架构中无单点故障源,或单点故障不影响全局用户
SQL 语句有缓写机制(先写入本地存储落地,后写入数据库)
使用 MySQL 或 MariaDB 做数据固化存储的主要方案
使用 Redis 做为高IO内存数据库方案(如有需求)
四、推荐
推荐使用Golang
推荐使用数据模型驱动的开发模式(Model-driven),根据通讯协议 Schema 同步生成前端和后端代码,保证前端和后端协议的高一致性
通讯协议推荐使用 Cap ‘n Proto (高性能) 或 Protocol Buffers(高通用性)
有Profile机制可以跟踪性能瓶颈
有Dump机制可以分析Crash故障点
有机制可以发现Racing Condition
游戏进程可平行扩展,支持运维根据压力自动部署扩张游戏服最好
区服配置平台化中心化,对多区多服的架构,开服仅需修改平台参数,而不需要逐服配置
有提供中心化接口在被调用时会回报各模块的健康状态
五、不推荐
不推荐使用memcache (该类需求建议使用redis)
不推荐过于复杂的架构方案(例如超过2种数据库引擎,或超过3种进程提供服务)
六、强烈不推荐
强烈不推荐使用memcache和redis中的全局锁例如cas的指令或类似功能(d)