在我公司,我们的主要产品是基于网络的,我们的每个客户都有自己的网站。每个客户都去 customer.domain.com 访问他们的网站。目前,在 IIS 中,每个客户都有自己的网站设置,并为该网站中的所有应用程序提供 1 个应用程序池。我们的许多客户都使用相同的代码库,但有些客户使用的是更新版本(beta 测试人员)。
我们还使用负载平衡,以便每个请求都可以访问任何 X 服务器。
这是最理想的设置吗?主要问题之一是我们在服务器上只有大约 8 GB 的内存,还有大约 200 个客户端,所以对于每个应用程序池,我们必须将它可以使用的内存量限制在 300MB 这样我们就不会内存不足,但这也会导致应用程序池频繁回收。
我们希望向外扩展,而不是向上扩展,但是随着我们添加越来越多的客户端,我们将拥有越来越少的可用 RAM,或者我们将不得不开始向服务器添加大量 RAM。
如果您有类似的设置,您是如何解决问题的?
我们为不同的客户在不同的域名下的同一个盒子上设置了几个不同的站点。我们从一个文件夹和一个应用程序池运行它们,因为它们都共享一个代码库。
对于想要查看 beta 代码的客户,我们还有一个登台站点设置,他们可以登录并查看(如果已在该站点上为他们设置了帐户),该站点具有一组不同的 FQDN。所以我们最终得到了两个网站和两个应用程序池。
基本上,您需要做的就是设置 IIS 来监听多个 IP,并根据需要为每个 IP 设置证书。这样数据只缓存一次。
这将取决于您的环境,特别是我们正在谈论的服务器数量、服务器是否为 64 位以及应用程序的稳定性。
我看到三个选项:
优点:坚固。
缺点:成本(但现在 ram 变得相当便宜)
缺点:如果应用程序存在稳定性问题,将 200 个客户端整合到 2 或 3 个应用程序池中可能会导致灾难。如果您的负载均衡器可以正确检测应用程序的可用性并将状态更改应用于所有 URL,则可以减轻此风险。此外,如果这些机器是 32 位的,在单个应用程序池中运行 100 多个客户端可能会使您危险地接近进程内存限制。
优点:强大,无需额外费用(只要您有足够的服务器!)。
缺点:如果您没有至少 4 台服务器,这将是一个昂贵/没有吸引力的选择。此外,您还引入了新问题,例如必须跟踪哪些特定客户端的使用率很高,并在多个场中平衡这些客户端。
最简单的解决方案是首先将您的 Beta 站点移动到自己的一组服务器上,然后看看如何将您的当前用户分成组。
客户 1、2、3、4 都在服务器 a、b、c 上 客户 5、6、7、8 都在服务器 d、e、f 上
依此类推,这样你就有了冗余并且你的客户是负载平衡的
如果您想使用vmware esx之类的工具更详细地了解可视化,因此您在一个集群中有 3 个服务器,然后根据需要构建尽可能多的 Web 服务器,您甚至可以为每个服务器创建一个专用的虚拟服务器客户,但这更像是一种向上扩展的解决方案