在服务器端运行相同Web应用程序的许多计算机之间的并发

时间:2011-10-01 16:14:14

标签: asp.net web-applications concurrency

这是一个非常开放的问题。我想知道:如果你有一个托管在服务器端的许多计算机上的Web应用程序,你怎么能处理并发?例如,如果在不同的计算机上运行ASP .NET应用程序并且每个计算机都有自己的内存,那么如何管理一个简单的堆栈呢?有什么我想念的吗?

由于

3 个答案:

答案 0 :(得分:4)

如果我正确理解了这个问题:多个Web服务器如何协调以返回响应?

通常,当特定请求到达时,Web服务器场将向客户端提供完全相同的HTML。如果需要存储状态 - 假设用户使用数据回发表单,或者使用会话状态来跟踪购物车 - 那么您将需要一些共享机制来执行此操作。

有很多方法可以在多个Web服务器实例之间共享状态:

  • 数据库可以存储需要无限期保留的数据,例如用户个人资料信息
  • 同样,键值存储(如Windows Azure表存储)可用于永久存储,在查询时性能优于灵活性较低
  • 共享会话状态(使用数据库或中央会话状态服务器)可以存储当前会话本地的中等持久数据

事情可能会变得复杂:

  • 如果缓存了数据,则可能需要一种机制来使每个Web服务器上的缓存失效
  • 最终,争用共享会话存储或数据库存储可能会抵消多个Web服务器的优势

为了解决这个问题,一些系统使用“最终一致性”原则,例如,配置文件更新可能不会立即复制到群集中的每个服务器。不太新鲜的数据有时被认为是足够好的。

正如你所知道的那样,这是一个复杂的主题,我只是真的滑过它的边缘。

好消息是 通常您不需要打扰 ,除非您创建非常大型或复杂网站现代服务器硬件每秒可以处理数十个请求而不会出汗。只有当您开始每秒移动几十个同时请求时,才开始需要Web场。

答案 1 :(得分:1)

Jeremy McGee's answer涵盖了大部分要点。另一个角度是许多Web场设置使用“粘性会话”,其中一个会话与特定服务器保持一致。在允许扩展和在Web服务器池中构建,购买或配置大量状态管理之间,这是一个很好的折衷方案。

当您必须扩展基础数据存储时,最大的问题就出现了。有龙。

答案 2 :(得分:0)

您在不同的渠道中使用反向ajax(Comet),例如使用网络服务器Meteor。 Facebook和Twitter使用相同的异步事件方法。