3 ms·
Most of the ability to get throughput is based on not blocking a request on network or other IO and also not doing writes in band of request. I think it's less
by jerrygenser 3y ago
Most of the ability to get throughput is based on not blocking a request on network or other IO and also not doing writes in band of request.
I think it's less about the web server choice and more about the architecture around pre-computing and caching certain results in memory and then asynchronously writing via a queue.
- rcme 3y agoFor certain web servers that utilize an event loop instead of threading, it becomes very easy to accidentally block the event loop with synchronous work, so the choice of server does matter.
- jerrygenser 3y agoYes it's easy to block the event loop. I agree that it matters in that you're much more likely or even able to hit this throughput by using an event loop runtime. In other words, having 32/64 concurrent threads you won't get the throughput you want so agree there. However, I'll elaborate on my point and why it's not just "use event loop". If you block the event loop you can get catastrophic behavior, like your entire server acts as if it's a single threaded synchronous runtime. However, even with not blocking the event loop, you need to have optimal IO __given a coroutine__. If you are waiting a bunch of ms for multiple network calls and also a db write within a coroutine, your latency is going to go up and you might not hit your latency requirements. I was specifying that the architecture was taking these concepts into account and getting low latency on each request in a high throughput way by not blocking on writes, precaching info in server memory, etc. If they had to go to a db and/or do other calculations per query instead of pre-caching regardless of 32/64 or using an event loop, it likely would have either created another bottleneck or the web server would bottleneck and they would not hit their RPS
- 10000truths 3y agoYou can maintain high throughput while performing in-band I/O as long as the requests are pipelined and the I/O is batched. What gets affected is the request latency.