案例1:寝室斗地主
案例2:社区斗地主
什么是服务器架构
案例:MMORPG 轩辕** 服务器架构 分区多世界
MMORPG:大型 多人 在线 角色扮演
分区多世界:运营视角
分区多世界:运维视角
SET部署:每开一组服就增加一组机器、部署一套进程
双通服:世界上最遥远的距离,是从电信到网通的距离。
分区多世界:客户端视角
分区多世界:服务器视角
轩辕服务器为什么要这么多进程和机器 - 多维度切分
初始设计
一个进程包揽所有游戏服务器功能
问题:开第2个服应该怎么做呢?
按世界分离
公共服分离
公共服热备
按功能分离
问题:逻辑处理和持久化数据在一个物理机上
DB的文件IO会拖慢整体系统(百万级玩家,几百个G的数据)、进程运行中每天输出大量日志(几个G数据)、物理机故障时DB可能会丢失
按重要性分离
百万注册 = 10W活跃 = 1W在线,缓存应重点放在活跃身上。
设计演进:分区多世界原型v2
继续分离公共服
分离逻辑部分弱相关的功能,公共服分离服务器列表、版本升级、账号信息等功能。
切分逻辑进程
当前的现状是所有鸡蛋都放在一个篮子里,所有玩家都在一个进程上,好处是一个特性可以方便地操作到所有玩家上,风险是一个特性的bug可能会影响到所有玩家。
所有特性都在一个进程所带来的风险是:特性的不断的引入会使该进程稳定性和服务质量降低。
设计演进:分区多世界原型v3
如何做切分,参考原则如下:
服务器为长线运营的准备
基本原则:可用、可控、可扩展性
接入与负载
可用性
在线控制
GM系统
过载保护
请求频率控制:按功能模块控制如移动、技能...
DB频率控制:按业务模块配额,区分优先级(存盘优先)
边界情况检测:某类内存分配占用量超过阈值,某类请求/timer执行时间过长
DB设计
表格设计:按QQ号分表,简单列+统一blob格式(meta)
数据升级:旁路进程,自动分批升级
服务器中服务介绍
版本升级tcus
目录服务tdir
显示服务器列表,繁忙程度(参照在线人数)。
游戏过程world/scene
运营支持 GM平台/idip