游戏分服
分服的核心是数据不同,一般说来分服会在数据库层面划分用户
为什么早期需要分服
游戏网络延迟要求高,需要就近接入,所以每个区域给配一个db
另外还有一些运营层面的原因,每个服一个榜更方便调动用户积极性
如何分服
物理分服
一个服务器对应一个数据库,通过物理上划分db来划分数据
逻辑分服
只要数据库存在多个,在合服/分服的时候就一定面临数据分合的麻烦
那么,我们干脆直接使用一个db,在应用层建立db内部不同data的route,在逻辑上将同一db内的数据划分成若干相互隔离的部分
如按id取模、一致性哈希等来划分“每个服”可以访问的数据范围
不停服/停服更新
本质问题是新的代码如何丝滑接入正在运行的服务
1)资源热加载。顾名思义,只面向只有资源变更的场景,只加载配置/so,整个过程很快,玩家几乎无感知;
2)swap/resume。面向只有纯逻辑变更的更新需求,老的进程退出后,保留状态在共享内存,新进程启动后重新attach到共享内存上。因为不用执行资源全量加载、db数据加载、进程系统等步骤,这种更新方式也很快,并且因为运行时状态几乎全保留,玩家的体验损失很小;
3)服务级更新,解决前两类方法都不能解决的剩余问题,过程最长,最复杂,玩家也最有感,基本上就要踢人停服了
网友评论