登录服务做压测。。性能太差,求大神帮忙分析下
发布于 7 个月前 作者 weierbufan 1039 次浏览 来自 问答

我们的登录服务描述如下: 首先游戏服把登录消息推送到redis,我这边使用node开启了一个服务不停的从redis拉取登录消息,然后调用MySQL操作做验证。验证通过后把登录消息广播出去。。做压测的时候发现性能不好,分析发现从redis中取数据很快,而MySQL的异步处理很慢,大量SQL处理阻塞。。MySQL连接池10个,确认操作完之后释放了链接。。。不知道大神们有什么好的解决问题的方法。说出来大家讨论讨论。。

来自酷炫的 CNodeMD

14 回复

有没有那个兄弟能帮我分析下啊。。不胜感谢。。

来自酷炫的 CNodeMD

你既然是从redis取了,能不能取一批再查询?

@captainblue2013 现在就是改成了,取一批然后做操作。但是好像性能也没有什么提升。。真不知道怎么搞了。。

性能差到什么程度,是在哪个步骤出现瓶颈?消息广播是不是瓶颈?

先优化业务,逻辑,最后再考虑技术优化。。。。

@coordcn 单进程情况下,每条处理请求400多。看了下主要是mysql处理操作堆积。。导致消息广播变慢

@i5ting 狼叔。。业务逻辑已经做了优化了。。。现在就是考虑这种技术是不是不行。。还是什么请他原因。。求狼叔给提点建议啊。。

@weierbufan 先测试MySQL看看吧,混在一起是没法确定的瓶颈的

本来你这样做就奇奇怪怪的

@captainblue2013 上面老大决定的。。本来一次登录,现在多加了两次网络IO。。那您有没有更好的解决办法呢???在做登录服务这块

@weierbufan 登录这块不要和你的核心一起,抽出来,随便他慢慢登,登进来了再进你的主业务。

然后一门心思优化那个登录服务就行了

首先你要有压力测试的数据,

你的性能瓶颈明显是mysql 连接查询压力导致的;可以做mysql集群主从等;提高qps

缓存三部曲,

  • 第一步 整个执行流程都用的不变的数据尽量取出来,放在内存变量中,只需要从 资源(缓存,或者数据库,文件)一次就可以了; node可以使用Buffer
  • 第二步 缓存(redis,memcach)
  • 第三步 数据库,文件,网络资源 (集群优化,数据库主从;)

或者是分布式多实例服务 多服务器等; mysql一般并发相应很少的;

另外一点。你从mysql取出验证的时候,也放在缓存一份,根据token做为key下一次验证不也就从缓存验证了吗;缓存记得都加上 expire延时时间设置; 延时多少根据自己需求来;这样能快不少吧

@slclub 经过排查是mysql的原因,有一个存储过程处理时间太长,加了索引就好多了。效率提升很多。谢谢啊亲。

回到顶部