4 ms·
I think this is really a fine response considering the pretty terrible way the original post was written and the community responded. The simulation was a bit o
by ibrahima 14y ago
I think this is really a fine response considering the pretty terrible way the original post was written and the community responded. The simulation was a bit of a stretch because the supposed number of servers you need to achieve "equivalent" performance is highly dependent on how slow your worst case performance is, and if your worst case isn't that bad the numbers look a lot better. Don't remember the precise math, but back when I studied random processes we studied this problem and the conclusion was that randomly routing requests is generally not that much worse than doing the intelligent thing, and doing the intelligent thing is nowhere near as trivial as Rapgenius and random HN posters would have you believe. Given generally well behaved requests he random solution should be maybe 2-3x worse but nothing near 50x worse.
And besides, I really don't see why someone who needs that many dynos is still on Heroku.
- tomlemon 14y agoRap Genius cofounder: > The simulation was a bit of a stretch because the supposed number of servers you need to achieve "equivalent" performance is highly dependent on how slow your worst case performance is, and if your worst case isn't that bad the numbers look a lot better It's still pretty bad. Here's a graph of the relative performances of the different routing strategies when your response times are much better (50%: 50ms, 99%: 537ms, 99.9%: 898ms) http://s3.amazonaws.com/rapgenius/1360871196_routerstyles_fast.png http://s3.amazonaws.com/rapgenius/1360871196_routerstyles_fa... See http://rapgenius.com/1504222 http://rapgenius.com/1504222 for more
- gingerlime 14y agoDisclaimer: I've never used heroku :) if I understand the chart correctly, using unicorn with two workers gets you pretty close to intelligent routing with no intelligence. I imagine adding up to three or four would make things even better... I don't know about puma/thin etc where you can perhaps crank it even further without too much memory tax(?) To me this seems like the easiest approach for everybody concerned. Heroku can keep using random routing without adding complexity, and most users will not get affected if they are able to split the workload on the dyno-level. On a slight tangent: On the rails app I'm working on I'm trying to religiously offload anything that might block or take too long to a resque task. It's not always feasible, but I think it's a good common-sense approach to try to avoid bottlenecks.
- GhotiFish 14y agoI am very interested in hearing the intricacies and gotchas this problem presents. Do you know where I can read up on this topic?
- sophacles 14y agoGenerally, this is a fall out from queueing theory. I don't have access to my library right now, but any decent process simulation text will give you insight into the math of modeling this sort of thing.