数据存储服务器
一开始没有考虑多线程并发因素,在DAL层直接对DB进行CURD操作,看上去没问题,而且也能实时的查询,检索效率也很快,但是当成百上千,甚至上万的线程同时访问时,会导致CPU直奔100,我做了压力测试,1500个线程并发的时候执行完db操作(加了一些简单的业务逻辑处理流程,可忽略)大概要21秒左右,服务器也是I3和8G内存,硬件还勉强,原因是db操作同时访问同
一数据库的同一张表的时候,会锁住这张表,而且服务器用的mysql,能支撑500左右的链接,这个也和自身的硬件有关系,所以说服务器根本承受不了这样的压力,之前考虑说用NOSQL来解决这个问题,可是NOSQL不能及时的查询出数据。 最后考虑用数据缓存来解决,把所有的数据放到内存中,凌晨的时候统一写入到数据库,备份,测试了大概3千万的数据占了大约1G的内存,我们可以加大内存容量,毕竟内存比较廉价,老板就喜欢用便宜的,免费的更好(真心话,MB压力测试工具都没有,好一点的工具又要收费,还老子自己写脚本来测试,真NM的不专业啊),反正要尽量避免内存溢出的问题。 但是这样做还有两个问题,第一就是可能服务器出现故障,这个时候缓存没了,只能游戏回档,如果运营得好,重启后给玩家一点系统补偿也可以降低玩家流失率。 还有一点就是查询内存数据的时候,用LINQ检索肯定没有数据库专门的引擎快,毕竟是松散列的数据,能很快的定位,但是一切用数据说话,压力测试了大概3千万的数据查询出来也是1.5秒的时间,还是可以接受的。
有技术大牛能提供更好的意见或者解决方案的的欢迎指点一二,小弟愿受教!
浙公网安备 33010602011771号