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

Posted

技术标签:

【中文标题】在您的 Web 应用程序中管理执行优先级和请求到期时间【英文标题】:Managing execution priorities and request expiry time in your web application 【发布时间】:2011-01-28 02:34:48 【问题描述】:

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

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

【问题讨论】:

我的一些问题是“开放式”问题。另外,即使问题创建者不接受答案,是否也不会自动分配赏金? 请参阅这篇元文章:meta.stackexchange.com/questions/16065/…。 “得票最多的答案会在 7 天后自动接受。赏金将从您的声望中扣除。回答者将获得一半的赏金。如果多个答案与最多票数并列,则第一个答案将获得奖励。” 【参考方案1】:

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

您可以在 IIS。你需要拆分 应用到多个站点(或 通过创建多个虚拟地做到这一点 申请书副本)。一种 域/子域模型是理想的。 您的交易可能发生在 www.mysite.com,而声明是 在 docs.mysite.com 上生成。你 然后可以limit connections 和 throttle bandwidth 在下方 优先申请。如果你是 使用 ASP.NET,您也可以restrict the lower priority app to specific CPU cores,而其他不受限制。

由于您正在处理高 批量申请,你很可能 使用负载均衡器传播 跨多个 Web 服务器的流量。如果你的申请是真的 stateless(即不使用 nasty 会话变量等),您可以 可能会利用您的负载 执行流量的平衡器 在一项或多项中为您确定优先级 方法。例如,假设你 有 N 个前端 Web 服务器(其中 N > 2)。你 可以在 负载均衡器来分散负载 超过 2/3 的交易和 其他 1/3 的陈述与 在它们之间配置故障转移。 (根据您的负载均衡器,您可以根据路径或 HTTP 标头执行此操作,例如,即使不拆分您的应用程序。) 这为您提供了容错能力 和优先级。还有其他 根据负载选择 使用平衡器,但希望这个 足以激发你的兴趣 将问题转移到基础设施 而不仅仅是呆在墙内 应用服务器。

【讨论】:

【参考方案2】:

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

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

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

如果您知道如何设置线程优先级和一些基本的 HTTP 标头内容(如 Expires),那么您自己的操作会很简单。

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

您是否考虑过购买更多资源?对于实施和维护您的优先计划的成本,您可能可以购买足够的额外资源以使其变得多余。除非您每隔一天就会被打乱,否则您应该始终有足够的资源来处理至少两倍的峰值负载,否则您只是在自找麻烦。

【讨论】:

我们在 J2EE 中构建应用程序。这些是银行应用程序,它们通常每月达到一次高峰(当人们获得报酬时)。试图覆盖那些最繁忙的日子将是对硬件的巨大投资,与平均一天相比,这些日子的需求可能高达 10*。 这听起来仍然是一项合理的投资。如果我的银行网站在我检查我的报表时反复踢我,我不会对那家银行评价太高。您的问题可以写成“拒绝为我们的大多数客户提供服务的最佳方式是什么?”

以上是关于在您的 Web 应用程序中管理执行优先级和请求到期时间的主要内容,如果未能解决你的问题,请参考以下文章

在您的应用程序和源代码管理中存储 SASS 生成的 CSS 的最佳方法是啥?

如何在您的应用中禁用 HealthKit 集成?

如何在您的应用中禁用 HealthKit 集成?

如何解决“您需要安装 Ruby 和 Sass 并在您的 PATH 中才能执行此任务”警告?

如何在React中处理REST API请求

从 mssql 触发器运行 php 脚本