游戏服务器端的最佳实践
在部分字段读写的场景下推荐部分字段读取和更新,减少网络传输大小和磁盘读写次数,避免获取无效数据。
对于写操作时响应包需要返回数据记录的,建议根据实际情况设置 result_flag,例如,update 后需要获取到修改后的数据记录,建议 result_flag 设置为2;如果不需要写操作返回数据记录,则 result_flag 设置为0。
对于批处理的命令字,例如,batchget、listgetall、getbypartkey 等,建议按照 offset 和 limit 获取数据记录,limit 推荐200,gameserver 端开启分包返回。
list 相关的表,listaddafter 时需要注意队列满时配置淘汰规则,推荐采用队头插入、队尾删除或者队头删除、队尾插入的方式。
list 相关的表,例如,listreplace、listdelete、listbatchdelete 时,需要传递正确的 index。
gameserver 在读数据前,需要确保获取的数据记录 value 字段是有值的,例如 value 字段 A、B、C,本次 gameserver 获取的数据记录是A、B,则 C 字段是没有值的,请谨慎使用。
推荐 gameserver 本地做超时控制,不推荐采用按照 gameserver 的回包做超时判断,需要 gameserver 本地主动的做超时判断。
gameserver 在遍历时,推荐从存储层从节点上获取数据,避免影响主节点的性能。
不推荐对大字段进行 memset 操作,耗费更多的 CPU,推荐对大数据结构的部分字段设置为0的方式进行初始化。
gameserver 端在处理发往 Tcaplus 的请求和来自 Tcaplus 的响应时,建议采用分治的方法,处理部分发往 Tcaplus 的请求,再处理来自 Tcaplus 的响应包。
系统设计的最佳实践
高频字段、需要一次性原子性操作的字段推荐独立成表。
游戏服务器端在做数据回写时,建议进行流控、按照时间离散化处理。
建议可以支持动态修改表结构,提供表的数据转换插件。
回档支持全区全服、表级别、记录级别的冷备时间点回档、精确时间点回档。
推荐采用分区分服模型,全区全服和分区分服都可以动态扩展接入层、存储层节点。
具有业务关联的多个内容需要合并在单个表里,避免出现分布式事务问题。
推荐开启压缩功能,包括请求包和响应包压缩、记录压缩功能。