我们先从一个需求入手:需要实现一个游戏好友系统。
比较常规的做法:
(为了更清晰讲述,这里屏蔽了一些模块细节:比如接入层、服务器框架、储存读写分离、分表、分桶、集群模式等,也未考虑异地互备与大陆外数据等细节)
简单的名词解释:
- GameServer:用来接收、处理客户端常规请求的模块(根据游戏是否分区部署策略会有所不同,这里简化成单分区);
- FriendServer:用来处理所有和好友相关内容的模块,可以多进程部署进行负载均衡;
- RoleBaseInfo:用来储存用户简要信息;(这里可以简单理解成需要在好友列表上展示的信息)
那么整个处理流程如下:请求从GameServer转发至FriendServer,FriendServer根据好友列表信息拉取对应好友的RoleBaseInfo返回至客户端显示。

将来会引发的问题:
随着用户的增多,每次请求通过FriendServer去DB实时拉取系统整体负载会加大。
解决方案:所以为了成本考虑增加缓存,牺牲一定的实时性,空间换时间的策略。
新流程接入了缓存机制会把好友数据做缓存,分钟级定期更新(缓存也可以放GameServer,可以减少内网带宽消耗,但是造成模块边界模糊)。
Read More →