使用Azure云服务时,asp.net中的单个和多个实例站点之间有什么区别?
答案 0 :(得分:5)
好的 - 这里有一些概念你需要回答你的问题。
// Arrange.
首先,我将主要基于link to documentation对您的问题做出一些假设,因此我的答案不那么含糊。
Session
对象的内容(即:State
数据)。注意:我的答案适用于运行IIS的网站,网络角色和Windows VM ......但我只是希望能够清楚地了解问题。
// Act.
当您创建网站(在WebSite,Web角色或带IIS的自定义Windows服务器中)时,网站会有一些已定义的内存边界/空间/花园/墙/魔术泡泡,称为App Pool
。这意味着您的网站与单一服务器上的其他网站100%隔离。你做的事情不好,也不会弄乱别人的网站。
因此,安装在该单个服务器上的网站称为实例。
接下来,我们决定我们需要处理这么多人访问我们的网站,因此我们需要向外扩展。这意味着,制作本网站的副本/克隆,具有分割负载的效果。如果您扩展到3个副本,那么每个网络服务器应该(为简单起见)将工作负荷分成3 - 所以每个处理大约33%的负载***。
现在,您在3台服务器上拥有1个网站,这称为多个实例。
因此,实例是一个术语,用于描述网站安装的服务器数量。
好的 - 那么为什么这很重要?这与State
有什么关系(正如您正在阅读/引用的那篇文章所建议的那样)?
还记得我说过一个实例是一个服务器吗?如果你有多个实例你有多个服务器?好吧..既然网站存在于不同的服务器上 - 除非你做一些特殊的东西,否则他们不能在他们之间共享他们的State
数据。这个特殊的东西就是那个文档正在聊天的内容,有许多时髦的术语,如Inproc
,OutProc
,Distributed caching
等。
// Assert.
TL; DR;是你现在知道当你扩展并在不同的硬件上拥有你网站的多个副本时,这就是所谓的多实例,当你这样做时(有多个副本),那么你需要考虑一些特殊代码来处理这些多个服务器之间State
的共享 - 如果你需要共享状态。
现在 - 有一张美丽的Mola Mola照片阅读所有这些:)
***
是,是的。有许多算法可以处理扩展站点的负载平衡,例如循环法等。让我们保持这个问题非常简单。 K + thxgoodbai。
答案 1 :(得分:0)
"多个实例"意味着它所说的 - 不仅仅是在两个IIS实例上托管的网站的单个实例。如果您使用进程内状态跟踪,则无法平衡两个Web服务器之间的流量(通常使用粘性会话来解决此问题,但这不是Azure的负载平衡功能的选项。)