背景
如今的游戏服务器运营策略一般采用“滚服模式”。简单来说,就是运营商不停的开新区,不活跃的旧区就进行合区。这样一来,运营商既可以降低服务器硬件配置,缓解大服人数压力,也可以利用新区拉活跃猛赚一笔。
“滚服模式”免不了对旧服务器进行合区,今天我们就来介绍下游戏服务器的合区工程。
需要先说明的是,由于服务器不同,选择的数据库实现也有多种。游戏数据库最常用的选择方案是mysql,或者Mongodb。
合区对运营商的意义
运营意义
符合“滚服盈利模式”,把各个不活跃的大区里可怜的几个活跃人数聚合在一起,提高玩家在线率,拉活跃才可以盈利。
运维意义
部分老区活跃玩家非常少,但却占用独立的游戏服务器资源,浪费硬件资源。合区可以减少机器成本。
技术理论基础
合区的本质,其实是把归属于不同数据库的所有数据表进行整表合并。数据库间的schema是完全一样的,只是表数据内容不同。表数据能够进行合并,前提条件需要满足表主键id互不重合。
一般地,我们以区服id进行划分,实现分布式id生成策略。
打个比方,我们id使用64位的long类型。将long型数据的高16位表示区服ID,可以容纳2^16=65536个区服容量;将long型的低48位用于id的自增长,