目前项目里有一个日志接口写入非常频繁,目前自己做过 AB 压力测试,在请求数为 10000,并发数为 100 的情况下,Requests per second 只能达到 36/s,期望能达到 100/s 以上。
这种情况下如果把这个接口的请求送入队列,比如 sidekiq,然后用队列的多线程去写入是不是一个可行的方案?有没有什么弊端?
或者有没有更好的方法去优化?
具体问题具体分析,可以先分析一下 qps 这么低的瓶颈是什么。
请问用什么方法具体去分析?
可以找个 apm 工具
好的,我来找个试试,在这之前我先优化一下表的索引,把不必要的去掉,多谢。
异步批量写入。弊端是自己要做校验,处理一些失败或者异常情况
不要用 active record 就可以快很多了,或者现写到内存里,到一定量再倒入数据库
为什么不直接塞到 redis 呢
描述还是不够详细,决定你插入并发的有很多原因:
日志可以先写内存再 bulk insert
多谢,我本来还打算用队列,看来还是要手动处理比较好,bulk insert 肯定比队列还要快,感觉这样可行,我先试试这样,再次感谢。
这个表比较独立,除了查询时有关联(比如关联用户),没有涉及到 回调 或者 更新 Counter Cache 字段 这样的动作,我先按 @hooopo 的方案改一下试试,多谢。