自己开发的一个线上认证系统,最高的时候,单台服务器高峰可以达到 5000QPS(总共 4 台服务器)。前一段一直不稳定,到用户高峰的时候就出问题,遇到了各式各样的坑,折磨的快崩溃了,弄了半个月,现在才稳定了。
想问问大家的实际产品中,最大的 QPS 是多少?QPS 一高,发现各种各样的瓶颈都出来了
你能把高峰时期遇到的问题还解决办法写一下吗?
20000 QPS 的系统,的确不算小了,楼主分享一下遇到的问题吧
1 尽可能多的 cache 业务请求 2 日志放到一个线程来写(减少锁竞争),日志消息过快时丢弃 3 系统全异步处理消息,用队列控制请求过快 4 通过把绑定中断到不同 cpu,分摊中断压力 5 消息处理分组,减少锁竞争 6 后台业务系统连接,采用自己写的连接池 7 优化 linux 系统上关于网络配置内核参数 8 避免了 linux 上一个 OOM 坑,解决了一个非常诡异的 bug
补充,其他的还有:挂住快速重复请求的客户端,预分配消息内存池等
#3 楼 @limpid 2 日志放到一个线程来写(减少锁竞争),日志消息过快时丢弃 5 消息处理分组,减少锁竞争
这 2 个是怎么做到的?
@kingwkb 2 要写的日志,塞入到一个日志 buffer 队列,达到队列最大长度时,丢弃日志消息。日志线程取消息写日志。 5 根据 id 的模分发到对应组中,这样保证了同样 id 的分到同一个线程,同时做到了消息分组,减少锁竞争