I thought it was terrific that you did this - I emailed the answer to myself so I can read it on the bus...
It looked like you did a lot of research into it based on the sources you posted.
How long did it take you to create that post?
What is your primary area of interest -- If I post a question about some other infrastructure, would you give such a detailed response, or was this a one-off?
It took maybe 4 hours, but it was fun and I learned a lot (not just about Heroku).
I've been using Heroku since near the beginning (we were in YC W08 together) so I was already vaguely familiar with the architecture. It was mostly filling in the details.
Infrastructure is a side interest that I'm trying to learn more about, so I can't guarantee I'll be able to answer your questions, but it's worth posting them anyway. Hopefully other people can answer as well (of course that's what I thought when I posted the Heroku question... I ended up answering it myself)
Rather than directing the question at me, just post a normal question on Quora, and post the link here or message me.
It looks like they have about 6 total. Plus some customers pay $100/month for their own front-end proxy server so they can use SSL on a custom domain name.
Of the domains I checked (a few hundred found through the "Find Subdomains" tool here: http://www.magic-net.info/), appname.heroku.com (including proxy.heroku.com) will return 3 of these:
It's possible Heroku's DNS is returning different IPs based the load of the reverse proxies, but when querying heroku.com's 4 nameservers directly I got different subsets of those 5 IPs. A random distribution of IPs probably gives good enough load distribution.
And Heroku's documentation says to point A records to these three:
75.101.163.44
75.101.145.87
174.129.212.2
It's also interesting to note that apps aren't tied to specific proxy servers. If you set the "Host" header to your app's subdomain, a request to any one of those IPs will work.
Exactly - its a common practice to use DNS servers to spread load across backend instances. Example djbdns/tinydns by default "only" returns up to 8 IP addresses so if you setup more then that those IPs will be randomly returned.