前阵子为爱发电,一边学习layUI框架,一边搭建了一个对接了官方API的游戏后台管理系统,用来记录玩家的游戏内数据,服务器由另一个为爱发电的小伙伴提供,我负责前端/后台/数据库以及服务器环境的部署。
(为爱发电的意思就是——没钱。)
服务器是1核2G内存的虚拟空间,然而这个游戏的API架构又导致了项目是IO密集型,请求并记录一个玩家的数据需要进行上百次的HTTP请求,这对单核服务器压力实在是过于巨大,我经过多次优化目前可以承受多人同时请求数据服务器不至于无响应。在此记录一下我在各方面的优化,后台和服务器运维实在是超出我的专业范围,如果有小伙伴有更好的优化方案请指点一二~
优化
禁止用户重复提交
通过检查日志,发现有人会在短时间内重复提交数据,于是在servlet中增加了IP检查,并且设置了30分钟内只能提交一次,防止重复提交导致的重复数据和无效的服务器资源占用。
使用队列
将HTTP请求量最大的逻辑放到队列中处理,由子线程进行循环处理,每次处理完成后手动休眠1000毫秒。这一步主要是为了给强行暂停服务器数据的处理,可以把新来的处理请求添加到队列中去。
优化MySql
1.需要插入多行数据的,尽量拼接成一条sql语句,减少对数据库的操作次数。
2.对数据库操作的方法放在子线程中,每次操作数据库以后手动让线程休眠。这是由于监控cpu占用时发现cpu使用率不高,但是wa值非常高,就是说CPU空闲且系统没有未完成的磁盘I/O请求的时间百分比非常高,我们项目只涉及到了数据库的写入ÿ