Asp.net 一个大型应用程序实例,还是多个中型应用程序实例?

Asp.net 一个大型应用程序实例,还是多个中型应用程序实例?,asp.net,scaling,multi-tenant,Asp.net,Scaling,Multi Tenant,我们为一个客户编写的web应用程序将被产品化并出售给几十家公司,我们将进行托管 对于为每个客户推出单独实例与使用单个(或极少量)多租户实例的利弊,我可以提供一些指导 首先,随着我们的发展,我将不得不为每个新客户推出一个单独的应用程序实例(他们将一次一个上线),因为这是唯一直接的选择。我想,就维护而言,这将不能很好地扩展-一旦有4到5个以上的实例,推出更改将变得非常乏味,并且可能容易出错。除非我们以某种方式实现自动化 此外,如果人们需要定制,单实例哲学似乎可能会导致一堆叉子。避免这种情况会很好 那

我们为一个客户编写的web应用程序将被产品化并出售给几十家公司,我们将进行托管

对于为每个客户推出单独实例与使用单个(或极少量)多租户实例的利弊,我可以提供一些指导

首先,随着我们的发展,我将不得不为每个新客户推出一个单独的应用程序实例(他们将一次一个上线),因为这是唯一直接的选择。我想,就维护而言,这将不能很好地扩展-一旦有4到5个以上的实例,推出更改将变得非常乏味,并且可能容易出错。除非我们以某种方式实现自动化

此外,如果人们需要定制,单实例哲学似乎可能会导致一堆叉子。避免这种情况会很好

那么,你对此有何经验

奖金问题#1:10台SQL Server(每台记录200万条)与一台大型SQL Server(每台记录2000万条)的性能有什么不同?假设它们都在一个表中,我们主要对单个记录进行插入和选择。有时选择在索引的varchar(12)或日期字段上

额外问题#2:我想,为了避免分叉,我们必须使定制可配置,或者构建一个插件体系结构。然而,这可能会增加定制的成本,我不想成为那些花一周时间调整文本框大小的商店之一,我也不想在基础设施上过度投资。有什么想法吗

比例细节

每个客户都将拥有相当数量的数据——多达数百万条记录

将有非常少的并发用户,每个客户只有几个,加上我们端的几个内部代表


目前还不清楚每个客户是否都需要定制,但我想说,其中一些客户可能会需要定制,而其中一些更改可能是其他客户不希望看到的

随着每个客户需求的增加,单个实例的最大优势将逐渐缩小。例如,如果您在一台服务器上运行,而一个客户突然需要更多性能,那么您就满足了。但如果他们都是独立的,那么将客户转移到一个全新的服务器上就相对容易了

最大的缺点是单独管理所有实例。(不管它们是否都在同一台服务器上运行)


无论如何,您应该只有一个代码库实例。定制应该通过插件和配置来控制。前端应该自然地与内容分开。虽然进行更改的成本可能会更高,但我相信,您可以为其他客户提供的功能(这只是要求您进行的定制)方面的好处会得到回报。也就是说,管理单个代码库要比管理多个代码库容易得多。我认为这两种选择都没有充分的理由。我认为真正的答案就在中间:拥有多个实例,每个实例承载多个客户端

这增加了另一层自动化处理,但这意味着您可以保持托管成本低廉(您不需要马上出去买Cray),而且(希望如此)这种心态意味着您可以相当轻松地进行故障切换备份

但我们不要超越自己。。。我们说的是网络应用,对吧?在不同的计算机上获取数据库和aspnet。对数据库进行集群,您将有更愉快的时间来处理各种前端场景。无论哪一个区域的烟量先用完,你都可以将其升级

听上去,你最终会得到一个集群数据库超过一半,如果不是十几个数据库机器,只有几个前端设备

至于定制,你已经做到了。您要么提供一组完全由数据库托管的可编辑模板,要么必须自定义who实例。我完全赞成第一个。这是大量的工作(没有太多的回报),但它是非常值得的,因为您应该只需要在(您愿意!)进行升级时更改核心代码搜索100个客户的自定义实例以确保他们安全升级将杀死一个开发人员模板就是答案。至少,您可以允许定制CSS,而不需要太多的麻烦(但是他们需要了解他们的东西的人)

编辑:我已经看到一些帖子采用了一体化的方法。将实例拆分到多台机器上,可以使您与以下几件事情隔离开来:

  • 如果您引入了一个测试中没有发现的bug,那么一次只会影响几个客户端

  • 硬件故障。一台超级服务器倒下会立刻让很多人恼火。拥有一台故障转移巨型服务器的成本非常昂贵。每三台或四台正在运行的服务器配备一个备用故障切换箱的成本要低得多,而且麻烦的人也更少

  • 性能可以在一个客户机一个客户机的基础上平衡,因此您可以将一些轻使用的客户机与一个重使用的客户机放在一起,或者只将一些中等使用的客户机放在一个盒子中,等等

  • 基于同样的想法,使用高峰或其他减速只会影响同一机箱上的客户端。当然,这对数据库来说并不意味着相同,但是当您到达那里时,您可以将其拆分为一个集群


我强烈建议使用贵公司托管的单一实例。这有以下优点:

  • 您可以物理访问所有代码 和数据库进行更改和 更新
  • 你可以控制产品的质量 它正在运行的硬件
  • 当您修复公共代码中的错误时, 你已经把它修好了 顾客