在IIS中的多租户Url的可伸缩解决scheme

我们开发了一个多租户ASP.NET应用程序。 当客户注册时,他们得到自己的子域名用于他们的网站(例如tenant1.ourapp.com)。

设置客户站点的过程需要无configuration。

目前我们有这样的设置:

  • 1个网站的专用IP地址
  • DNSlogging* .ourapp.com到专用IP
  • IIS中的单个网站(7.5)处理所有请求到专用IP

其余的由我们的应用程序处理(检查URL和加载租户特定configuration等)。

最大的问题是这个规模如何? 假设我只想在IIS中为每个物理网站托pipe50个租户实例。 我现在有问题,原来的网站正在处理ourapp.com的所有请求(感谢通配符DNSlogging)。

我们也在研究Azure,因此,适用于独立服务器和Azure的解决scheme将是最好的解决scheme。

我会稍微改变你的架构:

Windows Azure带有一个内置的负载均衡器。 将所有网站安装到可以跨多个实例分布的单个Webrole上。 configuration您的多租户应用程序以根据源/客户/url在内部路由请求。

如果你是真正的多租户,你将有一个单一的代码库。 用户看到的内容取决于他们的上下文/用户ID /等。 这样,你有一个应用程序,每个人都以循环的方式共享你的实例的资源,没有一个服务器可以站在一个失败的方式。

把一个服务器上的50个站点,另一个服务器上的另外50个站点等放在一起,就是处理事物的“旧”非云方式。 您的服务器熄灭,50个客户closures。 当一个客户对于单个服务器变得“太热”时,不具有敏捷性/可扩展性。

一般情况下,如果我正确理解你的问题,你会想看看一个负载均衡器来分散负载跨多个Web服务器。 您可以将所有请求发送到负载均衡器,然后将请求转发到您的Web服务器。

你可以用很多方法做到这一点,你总是可以将tenant1.ourapp.com发送到同一台服务器,或者你可以在所有服务器或一组服务器之间进行传播。

我个人非常喜欢在Linux上使用HAProxy作为负载平衡器,还有其他软件负载平衡器和硬件选项。