5 ms·
This has absolutely nothing to do with the thundering herd problem. The skype outage probably not. This was in response to the thread going on about overloaded
by moe 16y ago
This has absolutely nothing to do with the thundering herd problem.
The skype outage probably not. This was in response to the thread going on about overloaded webapps - thundering herd is a common issue there.
The GP's question is valid: there's no reason why server software should crash when overloaded instead of simply degrading service.
Nobody used the word "crash" but graceful degradation is quite hard. You have to understand the problems at heart, plan and build for it. That is more than enough reason for most apps to not degrade very gracefully.
- jemfinch 16y agoThundering herd is an efficiency problem on certain implementations of UNIX servers. It's not a common reason why servers crash when overloaded. Graceful degradation is not hard. Serve N clients, and no more. It's an extra conditional in the event loop. Am I serving N or more clients right now? Then don't accept new connections (or accept(2) them and immediately close them to avoid a backup in the listen queue).
- moe 16y agoThundering herd is an efficiency problem on certain implementations of UNIX servers. The accept()-issue you're referring to is merely a popular manifestation of the thundering herd problem. The term is nowadays also used in a broader sense to describe similar situations in distributed systems. It's not a common reason why servers crash when overloaded. Again, nobody is talking about servers crashing here. We are talking about web applications (which usually consist of multiple servers talking to each other) degrading to the point of not serving a meaningful rate of requests anymore. In that context the role of the "thundering herd" is often taken by your own users, who will furiously smash their reload-buttons to get past those 500-errors. It's an extra conditional in the event loop. Am I serving N or more clients right now? You're talking about implementation details of a socket server. I was talking about entire applications.