通配DNS,托pipeDNS或DNS服务器

我正在build立一个网站,用户可以build立自己的网站。 用户input一个网站名称(比如站点1),该站点使用子站点site1.example.com创build。 目前,我已经将通配符DNS设置到站点创build的单个服务器。 这工作正常,但不足以将来使用的可扩展性。

我希望能够控制该网站创build的服务器。 例如,site1在server1上创build,site2在server2上创build。 我一直在寻找一些解决scheme。

  1. build立我自己的DNS服务器,并在网站创build之前创build子域。
  2. 使用某种具有API的托pipeDNS服务器来创build域。
  3. 以某种方式使用IIS,以便我可以将通配符DNSredirect到托pipe在服务器上的子域。

我更喜欢IIS的解决scheme,但没有find任何设置这个例子,如果这甚至是可能的。

也许有一些开源或付费解决scheme可用。

有很多方法可以解决这个问题,但最好的解决scheme取决于您的局限性,环境,网站types等。例如:

  • 由于每个站点上的内容大小,或者由于生成的负载/stream量,单个服务器是否无法处理所有站点?
  • 内容存储为文件还是数据库?
  • 网站是否运行需要共享状态的应用程序? 共享状态是否保存在内存或其他服务器或服务器群集上?
  • 每个站点是否需要自己部署应用程序,或者应用程序是否支持多租户(基本上,它可以查看请求的主机名,并将其用作其站点 – 这是大多数多客户端托pipe的CMS / e – 商业应用程序工作)
  • 单个网站可能变得如此之大以至于无法由单个服务器来处理?

我假设你有一个“典型的”Web应用程序,应用程序托pipe在一个Web服务器中,会话状态存储在本地存储器中(许多平台默认)和一个数据库。 我将假定存储位于数据库中,并且您的应用程序支持多租户。

设置这个“典型”的方法是有多个层次:

  • 数据库层(非常强大的故障转移对,主/从系统或集群,取决于您的数据库平台)
  • 会话状态层(可以存储在数据库层,单独的数据库,IIS会话状态服务器,memcached或类似的东西)
  • 应用程序层(您的应用程序服务器 – IIS)
  • 负载平衡层(专用硬件,nginx,HAproxy等)

有几个关键点:

  • 任何应用程序服务器都能够处理任何“站点”的请求(因为它们都是相同的应用程序,并且它们都连接到相同的数据库)
  • 您的会话状态必须共享并可供所有应用程序服务器使用
  • 您的数据库层必须能够处理来自所有应用程序服务器的同时访问的负载。 大多数人在各个不同的地方使用大量的caching来完成这项工作。
  • 如果您的目标是实现高可用性,则需要具有N + 1容量:例如,如果您的高峰负载需要10台应用程序服务器,那么您至less应该有11台。
  • 很多时候,在一个大的网站,人们将他们的静态内容(图像,CSS等)卸载到另一台服务器,甚至像Akami或Amazon CloudFront的CDN。

该设置非常灵活。 您可以添加大量的应用程序服务器。 您可以独立更改任何teir的设置。 你没有单点故障(例如,你可以容忍失去一个或两个服务器,没有人注意到)。


即使你的应用不支持多租户,你也有几个select:

  • 将每个站点部署到每个服务器(注意:这要求您有一种方法,即将所有文件保持同步以进行安装/更新,并且不要在本地存储任何内容)
  • 将每个站点部署到每个服务器,但将内容存储在集中(冗余)的NAS或SAN上
  • 有select地部署站点,然后使用您的负载平衡器根据主机名将stream量定向到相应的服务器。

看看StackExchange的设置 ,这实际上非常接近我刚刚描述的:

在这里输入图像说明

有多种解决scheme。 那么静态决定基于域的服务器目的地呢? 例如,在创build“site12”之后,如果“site12”的散列是偶数,那么它到达server1,否则到达server2。

您的问题是以编程方式创buildDNSlogging?

如果是这样,你可以使用NicTool。 它有一个用于pipe理你的DNS的广泛的API,可以和许多名字服务器一起工作。

免责声明:我在工作中使用NicTool,并且设置了自动化,为我们节省了大量成本。