《棋牌游戏服务器》总体架构设计

目前几个产品在服务端的总体架构都是类似的,如下图;由于历史原因,在不同的产品里面,各类服务器具体的名字可以有所差异:

  

 

主站和榜单

左上方是http通信的服务器,有两个服务,一个是主站(承载的客户端登录、支付,以及部分运营推广的功能);一个是榜单服务器,不断刷新各类榜单,并直接为客户端提供服务。

网关和玩法

左下方是网关服务器,负责与客户端的socket通信,背后是各种玩法服务器,以及大厅。 玩法服务器就是提供给类玩法的,比如斗地主、捕鱼、炸金花等;在老的棋牌产品里面,每个玩法会独占一台服务器;在新的麻将产品里面,已经改造成插件式的。

大厅

大厅服务器是从主站里面剥离出来的,把和游戏主体部分,和玩法无关的功能放到了大厅里面,比如用户的信息、签到、邮件等等;一方面简化主站,另一方面通过socket通信速度也更快一些。

大厅是一个“半有状态”服务,一方面大厅会在内存里面缓存一些用户信息,另一方面也可以随时重启,能够自动重建这些缓存。

存储

右侧是我们目前使用的两种存储方式,数据库mysql,缓存redis;持久化数据都是放在mysql里面的,redis是一个高速缓存备份。

目前我们没有独立的存储服务,各个功能模块会直接访问redis和mysql,并负责两者之间的同步,这可以算是当前架构的一个缺陷,所以开发人员要特别注意这一点,做好redis数据的过期以及读写优化。

但是建立独立的存储服务器,也有一个隐患,因为棋牌是不分服,一旦用户量多了,redis可以扩展为集群,存储服务器要自建集群的话,难度可能较大。

总体上存储这块的设计目前可用,但不够好。

 

 

 
posted on 2019-02-23 17:54  longhuihu  阅读(2316)  评论(1编辑  收藏  举报