代码之家  ›  专栏  ›  技术社区  ›  Dan

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

  •  2
  • Dan  · 技术社区  · 14 年前

    在繁忙的一天,一些运行我们应用程序的安装可能会承受巨大的压力。我们的客户问我们,在我们的应用程序中是否有管理优先级的方法。例如,在一个典型的网上银行应用程序中,银行对让转账表单响应感兴趣,而对账单页面则不那么重要。不能转账是银行的直接损失,而不能出示对账单或类似的东西可以通过道歉来弥补。另外,在一个典型的web应用程序中,也不能管理不同的请求或会话超时,它是整个web应用程序的一个值。

    管理消息优先级和到期时间是许多中间件平台的典型特性。类似这样的东西对web前端也很有用。是否有任何Web服务器(Java或.NET)或Web框架提供这些功能?如果你不得不自己动手,你将如何着手实现它?

    2 回复  |  直到 10 年前
        1
  •  1
  •   Community Paul Sweatte    7 年前

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

    • 你可以在 IIS。你需要分开 应用到多个站点(或 通过创建多个 申请的副本)。一 域/子域模型是理想的。 您的交易可能发生在 www.mysite.com,while语句是 在docs.mysite.com上生成。你 才能 limit connections throttle bandwidth 在下面 优先权申请。如果你是 使用asp.net,您还可以 restrict the lower priority app to specific CPU cores 而另一个则不受限制。

    • 因为你在对付一个 批量申请,你很可能 使用负载平衡器扩展 跨多个Web服务器的流量。如果你的申请是真的 无国籍的 会话变量等),您可以 可能会占你的便宜 执行流量的平衡器 在一个或多个方面为您确定优先级 方法。例如,假设你 有n个前端Web服务器(其中n>2个)。你 可以在 负载平衡器以分散 三分之二以上的交易 另1/3的陈述 在它们之间配置故障转移。(根据负载平衡器的不同,您可以根据路径或http报头执行此操作,例如,即使不拆分应用程序也可以。) 这给了你们两个容错能力 以及优先顺序。还有其他的 根据负载选择 使用了平衡器,但希望是这样 足以激发你的兴趣 把问题转移到基础设施上 不只是呆在墙里面 应用服务器。

        2
  •  0
  •   SpliFF    14 年前

    ColdFusion允许根据每个请求设置请求超时。

    apache允许基于任意条件(如访问的url)设置expires头。

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

    如果您知道如何设置线程优先级和一些基本的http头内容(比如expires),那么滚动您自己的线程将非常简单。

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

    你考虑过买更多的资源吗?为了实现和维护您的优先级计划,您可能需要购买足够的额外资源,使其成为多余的。除非你每天都感到懒散,否则你应该总是有足够的资源来应付至少两倍的高峰负荷,或者你只是自找麻烦。