![[z/OS]](../images/ngzos.gif)
HTTP 请求的 WLM 平均分配
z/OS® 工作负载管理 (WLM) 组件支持在服务方之间以循环方式分配没有服务方亲缘关系的入局 HTTP 请求。此功能用于(但并不限于)内存中保存的持续时间较长的 HTTP 会话对象、无状态会话 Enterprise JavaBeans (EJB) 和用于有状态会话企业 Bean 的 create 方法。可以配置本产品来使用此功能,以在当前已绑定到入站请求所在的工作队列的活动服务方之间传播 HTTP 请求。
下图表示一个集群服务器实例。集群 azsr01 包含应用程序服务器实例 azsr01a。应用程序服务器实例中包含控制器、工作负载管理器 (WLM) 队列和运行应用程序的服务方。控制器是 HTTP 和 IIOP 终接点。WLM 队列控制从控制器到服务方的工作流。每个服务方都包含用于从 WLM 队列中选择工具的工作程序线程。
在上图中,应用程序服务器被配置为将服务方的最小数目和最大数目设置为 3。
服务类 Xref 说明 选项 帮助
--------------------------------------------------------------------------
修改服务类 行 1 至 2(共 2 行)
命令 ===> ______________________________________________________________
服务类名 . . . . . : AZAMS1
描述 . . . . . . . . . WAS 相关可调度单元组工作
工作负载名 . . . . . . . . ONL_WKL(名称或 ?) 基本资源组 . . . . . ________ (名称或 ?) Cpu 临界 . . . . . . . . . 否 (是或否)
指定“基本目标”信息。操作码:I=插入新的时段,
E=编辑时段,D=删除时段。
---时段--- ---------------------目标---------------------
操作 # 持续时间 Imp 描述
__
__ 1 1 执行速度 50
******************************* 数据底部 ********************************
子系统类型 Xref 说明 选项 帮助
--------------------------------------------------------------------------
修改子系统类型的规则 行 11 至 20(共 20 行)
命令 ===> ____________________________________________ 滚动 ===> CSR
子系统类型 . : CB 折合限定词名称?Y (Y 或 N)
描述 . . . 组件代理程序请求
操作码: A=之后 C=复制 M=移动 I=插入规则
B=之前 D=删除行 R=重复 IS=插入子规则
更多 ===>
--------限定词-------- -------类--------
操作 类型 名称 开始 服务 报告
缺省值:AZAMS1 RBBDEFLT
____ 1 CN AZSR01 ___ AZAMS1 RAZAMS1
____ 1 CN AZSR02 ___ AZAMS2 RAZAMS2
____ 1 CN AZSR03 ___ AZAMS3 RAZAMS3
****************************** 数据底部 *****************************
产品支持将内存中的 HTTP 会话对象用于具有多个服务方的应用程序服务器,这也称为热服务方策略。在下图中,两个用户访问了 azsr01a 应用程序服务器实例中的一个应用程序。用户 1 在服务 方 3 中建立了一个 HTTP 会话对象。用户 2 在服务方 2 中建立了一个 HTTP 会话对象。
- 配置允许创建新的服务方
- 工作负载管理器逻辑确定系统可以维持一个附加服务方
- 添加另一个服务方导致缩短了队列延迟,并允许在指定目标中完成相关可调度单元组
将多个服务方绑定至同一服务类时,WLM 试图将新的请求分派给热服务方。热服务方具有已分派给它的最新请求并且具有可用线程。如果热服务方有后备工作,那么 WLM 将该工作分派给另一个服务方。
因为热服务方很可能已存储其所有必需的页面、就近保存即时 (JIT) 编译的应用程序方法并高速缓存全部数据以便快速检索数据,所以,通常情况下,运行此热服务方策略是有好处的。但是,在以下情况中,此策略存在一个问题:
- 使用内存中的 HTTP 会话对象,导致分派亲缘关系。
- HTTP 会话对象持续好几小时或好多天。
- 具有必须保持在内存中的 HTTP 会话对象的许多客户机。
- 丢失会话对象破坏了客户机或服务器,而且要求创建 HTTP 会话的请求之间的时间间隔过大。
- 如果应用程序在单个服务方中创建大量对象,那么垃圾回收时间可能会很长。
- 如果将所有 HTTP 会话对象都绑定到一个服务方,那么请求可能会由于 WLM 无法管理工作并且无法在任何服务方中分派工作而被保存在队列中很长一段时间。
- 如果所有 HTTP 会话对象都在一个或两个服务方中,那么与在几个服务方中平均分配 HTTP 会话对象相比,单个服务方中的超时可能会影响更多用户。
如果配置遇到所描述的其中一种情况,这些情况导致热服务方策略产生问题,那么可以将应用程序服务器配置为支持在服务方中分配没有服务方亲缘关系的入局 HTTP 请求。当启用此功能时,应用程序服务器会将 HTTP 请求循环分配给服务方。
在以下示例中,假定将应用程序服务器配置为在服务方中循环分配 HTTP 请求,并且为指定了同一服务类的工作队列请求启动了多个服务方。
当没有亲缘关系的新 HTTP 请求到达工作队列时,WLM 将检查是否有服务方至少有一个工作程序线程在 等待工作。如果任何服务方中都没有可用的工作程序线程,那么 WLM 会将请求放入队列,直到任何服务方中的工作程序线程可用为止。如果有可用的工作程序线程,那么 WLM 将查找亲缘关系最少的服务方。如果存在 亲缘关系数目相同的服务方区域,那么 WLM 会将工作分派给繁忙服务器线程较少的服务方区域。
此算法的目标是,WLM 负责使正在等待的服务方之间没有服务方亲缘关系的入局请求达到平衡,同时又要考虑不断变化的情况。算法不会盲目地将请求以真正的循环方式指定给服务器。下图说明了在服务方之间 平衡分配 HTTP 会话对象。
此分配机制对所有没有亲缘关系的入站请求起作用。在创建 HTTP 会话对象之后,所有客户机请求被都发送至该服务方,直到 HTTP 会话对象被移除为止。
如果决定允许分配没有服务方亲缘关系的入局 HTTP 请求,那么可能需要对分类映射文件进行一些更改。如果已设置 分类映射文件以在本产品提供的受管循环支持的映射规则中指定多个事务类,那么应从分类映射文件中移除此部分内容。