所谓性能就是指cpu和内存使用。cpu和内存使用过度,会使系统变慢,甚至死机。程序无法运行。
部署程序应注意的有:机器,数据库,web server三点:
1).机器过慢或者挂掉全都完蛋,其原因是cpu和内存消耗过高。
2).数据库访问慢或者挂掉,直接造成程序慢或者挂掉。
3).webserver反应慢或者挂掉,直接造成程序慢或者挂掉。2)有可能造成3),也受自身性能影响。
以下是几个解决办法:
1.静态资源
所谓静态资源的集群
访问一个nginx地址,反向分发到多个nginx地址,这些nginx都在不同的机器上,每个nginx都存放相同的静态资源。简言之,访问一个地址,从不同机器上拿静态资源
2.nginx+tomcat
所谓tomcat的集群
访问一个nginx地址,反向分发到多个tomcat地址,每个tomcat里都放有服务端程序。简言之,访问一个地址,调用不同的tomcat。
3.纵向 mina socket
socket分坐标移动socket和聊天socket
坐标移动socket:
可在一个或多个机器上,放多个坐标移动socket。按城镇分类,不同城镇调用不同的socket。
作用是防止大用户访问一个socket,影响socket性能。如果socket出现问题,直接导致游戏不稳定。
聊天socket:
如果要分的话,可以按频道来分。作用同上。
3.数据库的分库分表
分库分表应该结合起来。
3-1分库:mysql+cluster
将数据库分散到多个机子上。避免所有用户访问同一个数据库,给数据库造成过大压力。
3-2分表:
实例表都是和用户相关的,有些实例表,随着用户的增多,会变得非常庞大,在查询和修改的时候很费劲。
对于这些表,要采用分表的方案。将一个表分成多个,每个表的表结构都一样。
可以先建立一个用户总表容纳所有用户,因为数据量巨大,所以要立减字段,只有两个。id , sid。第一个是用户id,第二个是表示id。
sid根据此表中的记录数设置不同的值,如1-1w设置sid为1,1w-2w设置sid为2等。
对于拆分的表,就可以根据这个sid,来判断操作哪一个分表。
比如:表Inst_Things表数据量大,将其拆分为Inst_Things1和Inst_Things2两张表,约定sid=1的时候操作表Inst_Things1,当sid=2的时候操作Inst_Things2这张表。
这种约定可放到一个系统表中统一管理。
另外memchached和索引等对数据库优化也是很好的。