通用游戏服务器架构设计

经过研究多个框架和自己经历的项目,我总结出来一套较为通用的,以8c16g机器来说,如何设计出来一套单进程多线程、分区分服的java游戏服务器框架呢?

1.逻辑层(带养成数据的模块,io密集)

线程池:3*core 这样子的线程数。

功能:进行业务线程的处理,这里主要是一些带有db操作的业务逻辑,比如:任务、背包等,好友,工会,宠物等 。利用事务+锁,遵循按照一致的顺序拿锁,这样子就不会有死锁。

当然了要避免缓存穿透问题,根据功能是否开启去避免这种问题。

2.场景层(实时高的游戏模块,无db之类的阻塞操作,cpu密集)

线程池:10个左右。

功能:主要没有db操作的,比如:进入到mmo中的场景服,打麻将的麻将服,再结算后,将结果post到逻辑层的线程池(完全是异步交互,不会出现等待,因此不会像actor那样子因为相互等待出现死锁)进行发奖计算等,这样子场景层的业务完全不会阻塞。

3.跨服中心服

和上面的服务完全是一套代码,通过config区分到底是跨服服务器,还是游戏服务器。CG、GC这样子命名的类进行通信。

4.战斗校验服   // 其它服务器的一种

GB、BG这样子进行通信,自己创建NettyClient创建连接即可。

总结:

其实java游戏服务器就是这么简单,这种架构适合所有的游戏服务器类型。

虽说是分区分服,其实可以看出来扩展非常容易,比如:棋牌来说,玩家不够多时,搞个32c64g的服务器就能承载非常多玩家了。

如果是玩家持续增长,说明游戏已经发家了,可以进一步引入服务发现,做好消息转发即可。

你可能感兴趣的:(#,游戏服务器业务开发,游戏)