培训班的学员问,后端的数据缓存部分看不懂
我会用一个故事讲清楚
小明的独立游戏1.0
小明开发了一个独立网游,涉及到的数据保存和读取部分
他使用了数据库mysql,增删改查都是使用sql查询语句
经过几个月后,他努力的把这个游戏做上线
并且游戏反应也不错,上线几天玩家同时在线就达到了好几千
从此,小明的收入有了一定的保障
小明的独立游戏2.0
游戏因为玩法有创意,经过口碑发酵之后,用户数几何激增
每天日活从几千,增加到了几十,几百,几千万之后
游戏出现了明显的卡顿,游戏服务器经常崩溃
这是因为用户数据改变时,mysql的增删改等操作,是直接访问硬盘的
硬件有性能上限,单位时间内写入数据有最大值
当超过最大值时,各种问题就迎面而来
困恼之际他报名了培训班,经过3天针对性一对一指导
项目增加了缓存数据方案
用户的操作不会直接访问硬盘上的数据,而是访问内存数据
缓存数据会所有操作放到队列
每隔5秒把缓存数据库分批次同步到硬盘
避免了高并发访问的问题
内存缓存也有管理业务
比如玩家不在线了,则从缓存中移除,释放内存
玩家登录时,优先从缓存读取数据,没有再把数据库同步到缓存
但缓存数据毕竟是内存数据,目前(2022.5.20)我们电脑能装的内存最大也就128G
当用户数接近几何数字的时候,单台很难撑住
这就要多台电脑联合工作,1台电脑128G,2台就有256
只要小明的钱包跟得上,他可以无限扩容他的服务器内存,从而应对更多的人数
最终也就是当下的商业后端模式
网关服(N)+数据服(N)+游戏服(N)+聊天服(N)。。。。。
核心代码领读:
缓存数据库保存到硬盘
缓存数据内存的释放管理->避免内存保留了太多不在线的玩家数据
玩家数据的查找从缓存,或从硬盘中查找
缓存查询核心