我公司现在在做款小游戏,现在同时在线人数只有几百人,运行起来没什么问题,但现在数据量增长很大,性能有点下降,急需优化框架,准备缓存用redis,但如何架构才能支持万人同时在线呢?现在是只有一台服务器,什么东西都在上面,登录、游戏都在一起。我要如何架构呢?游戏架构性能优化

解决方案 »

  1.   

    性能瓶颈应该不是在mina上吧,毕竟类似mina,netty的框架已经将java网络上的性能挖掘的差不多了,给你服务器弄集群吧。
      

  2.   

    我没有这方面的经验。倒是可以和楼主讨论讨论。
    最简单的方案是,游戏分区。每个大区,同时在线人数在三千人左右,多余这个数的,拒绝访问。
    以为,一台服务器,一般也就能抗得住三千人左右的同时在线,要是能上七千,那就已经算是奇迹了。
    你玩玩其他网游,也都几乎差不多的样子,分线路、分大区。
    牛B一点的,每个大区后面是一个集群;或者,多个大区之间用分布式数据库连接起来。每个大区一个集群的方案,关键是要负载均衡。如果是HTTP协议的,就好办多了,和网站的应该差不多。如果是TCP协议的,就不知道怎么搞了。数据库一般也要分开部署,底下盘阵要挂个牛B点的。
    这个方案中的用户,在这个大区注册之后,只能在这个大区登录。多个大区分布式数据库的方案,是说用户可以登录这个线路下的任意大区进行游戏,用户信息会在各大区之间相互穿梭(通过分布式数据库),但是,在线人数等游戏信息,还是在本地服务器(所属的数据库)进行处理。这样,虽然能够肆意登录,但是,要组队、组团,必须是同时登录同一大区的人,才能进行。具体怎么弄,还是需要请教一下系统架构师,他们有具体的理论和经验。
      

  3.   

    问了一个在腾讯做游戏的同学,他们的一台server一般处理3-4000同时在线的人,这个可能要看具体业务需求,一台机器上支持1万个人同时在线理论上应该不是什么问题(逻辑没问题的话,就考虑内存CPU的消耗了)。7楼说的东西基本都比较有道理吧