在Web应用程序中管理执行优先级并请求到期时间

时间:2010-03-16 12:57:09

标签: web-applications httpwebrequest

运行我们的应用程序的某些安装在忙碌的一天可能会承受巨大的压力。我们的客户问我们是否有办法管理我们的应用程序中的优先级。例如,在典型的网上银行应用程序中,银行有兴趣采用“转账”形式的响应,而“声明”页面则不那么重要。无法转账是银行的直接损失,而无法发表声明或类似的东西可以通过道歉来解决。 AFAIK,您既不能在典型的Web应用程序中管理不同的请求或会话超时,也是整个Web应用程序的一个值。

管理邮件优先级和到期时间是许多中间件平台的典型功能。这样的东西对于Web前端也很有用。任何Web服务器(java或.net)或Web框架都提供这些功能吗?如果你不得不自己动手,你将如何实施呢?

2 个答案:

答案 0 :(得分:1)

这是一个非常广泛的主题(可能也适用于ServerFault),并且在您的应用程序以及运行它的平台和网络环境中都有许多选项需要考虑。要考虑的变量很多(例如,CPU,内存,带宽和数据库访问),根据您的问题提出确定的答案几乎是不可能的。但是,这里有一些您可能采用的策略示例,它们都假设您的应用程序是无状态的,并且您可以将其功能分为多个部分(无论是物理的还是虚拟的)(在您的情况下将事务与语句隔离)。如果这些假设不成立,请澄清问题。

  • 您可以在其中实现此行为 IIS。你需要拆分 应用到多个站点(或 通过创建多个来实现这一点 申请副本)。一个 域/子域模型是理想的。 您的交易可能会发生 www.mysite.com,而声明是 在docs.mysite.com上生成。您 然后可以limit connectionsthrottle bandwidth位于下方 优先申请。如果你是 使用ASP.NET,你也可以restrict the lower priority app to specific CPU cores,而另一个不受限制。

  • 因为你处理的很高 批量申请,你很可能 使用负载均衡器进行传播 跨多个Web服务器的流量。如果你的申请是真的 无国籍(也就是说,没有使用令人讨厌的 会话变量等),你可以 可能会利用你的负担 平衡器来执行流量 在一个或多个中为您确定优先级 方法。例如,让我们说你 有N个前端Web服务器(其中N> 2)。您 可以运行两个独立的池 负载均衡器以分散负载 超过2/3的交易和 其他1/3的陈述 在它们之间配置故障转移。 (根据您的负载均衡器,您可以基于路径或HTTP标头执行此操作,例如,即使不拆分应用程序也是如此。) 这为您提供了容错功能 和优先次序。还有其他 选择取决于负载 平衡器就业,但希望如此 足以引起你的兴趣 将问题转移到基础设施 而不只是呆在墙内 应用程序服务器。

答案 1 :(得分:0)

Coldfusion允许基于每个请求设置请求超时。

Apache允许根据任意条件(如访问过的URL)设置expires标头。

您可以运行多个Web服务器并为每个Web服务器设置不同的CPU优先级,或者为一个给定应用程序提供比一般使用节点更多节点的负载平衡群集。

如果你知道如何设置线程优先级和一些基本的HTTP头文件(如Expires),那么滚动你自己就很简单。

如果你不那么模糊,你会得到更好的答案。你问这是否可以在.net或java中完成,但是你已经开始讨论你的应用程序了,那么它是用.net还是用java编写的?您很难假设一个解决方案适用于另一个解决方案,或者我们假设您要重写整个应用程序?您使用的是哪种Web服务器,这与该问题同样相关?

您是否考虑过购买更多资源?对于实施和维护优先级方案的成本,您可能会购买足够的额外资源来使其冗余。除非你每隔一天得到一次平衡,否则你应该总是有足够的资源来处理至少两倍的峰值负荷,或者你只是在寻找麻烦。