https://wenfh2020.com/2021/09/25/thundering-herd/
惊群比较抽象,类似于抢红包 😁。它多出现在高性能的多进程/多线程服务中,例如:nginx。
探索惊群
系列文章将深入 Linux (5.0.1) 内核,透过 多进程模型
去剖析惊群现象、惊群原理、惊群的解决方案。
多进程睡眠等待 共享
资源,当资源到来时,多个进程被 无差别
唤醒,争抢处理资源。
惊群导致软件系统工作效率低下:
进程睡眠 唤醒
时机问题,详细请参考:探索惊群 ③ - nginx 惊群现象
需要围绕两个方面去展开。
换个角度去思考,如果红包私发,而不是扔进群组里… 这个思路应该是解决惊群问题的关键。😎
我们可以参考 nginx 解决惊群问题的经典方案:
内核解决惊群问题,目前 nginx 最好的惊群解决方案,基于 linux 内核 so_reuseport
端口重用网络特性。
内核解决惊群问题,基于 linux 4.5+ 内核增加的 epoll 属性 EPOLLEXCLUSIVE 独占资源属性。
原理非常简单,只唤醒一个睡眠等待的进程处理资源。避免无差别地唤醒多个进程,尽量使得各个进程忙碌起来。
缺点:
应用层解决惊群问题,多个子进程通过应用层抢锁,成功者可以独占 listen socket 获取资源的权利。
优点:有效地避免了惊群。
缺点: