heroku 是如何添加这么多子域的?

How does heroku add so many subdomains?

所以我想弄清楚 Heroku 是如何创建这么多子域的 http://social-login-in-rails.herokuapp.com。我知道他们是 AWS 的经销商,所以每次有人创建应用程序时,他们只是添加一个 route53 条目吗?这是可扩展的吗?或者他们是否有某种系统,可以通过某种数据库查找来路由所有子域?

一般来说,by default you can put 10,000 'subdomains' in a route53 zone ('heroku.com')。正如 FAQ 所示,这不是硬性限制。

对于 Heroku,他们的域不使用 Route53:

$ dig +nocmd heroku.com any +multiline +noall +answer
;; Truncated, retrying in TCP mode.
heroku.com.     449 IN SOA ns1.p19.dynect.net. admin.easydns.com.
heroku.com.     21599 IN NS ns3.p19.dynect.net.
heroku.com.     21599 IN NS ns4.p19.dynect.net.
heroku.com.     21599 IN NS ns2.p19.dynect.net.
heroku.com.     21599 IN NS ns1.p19.dynect.net.

(为清楚起见,上面的一些行被剪掉了)

Heroku 似乎对所有子域都使用通配符条目。第一个应用程序肯定存在,而第二个应用程序肯定不存在(截至撰写本文时)。

$ dig +nocmd httpcats.herokuapp.com any +multiline +noall +answer 
httpcats.herokuapp.com. 299 IN CNAME us-east-1-a.route.herokuapp.com.
$ dig +nocmd cowcowcow.herokuapp.com any +multiline +noall +answer 
cowcowcow.herokuapp.com.    299 IN CNAME us-east-1-a.route.herokuapp.com.

命中 cowcowcow.herokuapp.com 的端点会返回 404。这一切都是有道理的,因为 Heroku 讨论了他们如何使用“web router”,这是一个 fancy/intelligent 负载平衡器。