扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:Snehal Antani 来源:论坛整理 2007年12月15日
关键字:
在本页阅读全文(共3页)
应用程序服务器在 SOA 领域中扮演者不可或缺的角色。作为平台,它们允许应用程序开发人员将重点放在业务逻辑的开发上,而将基础硬件和软件相关细节抽象出来。它们提供安全性、事务完整性、高可用性等服务。作为部署业务服务的平台,应用程序服务器可以发展为 SOA 的基础。因此,务必理解可能会极大影响应用程序服务器的稳定性的一些细节。
应用程序服务器由两个基本线程组件组成:托管线程和非托管线程。
托管线程 是重量级的,与元数据相关联,如事务上下文和安全上下文等。这些线程是执行业务应用程序的事务工作的实体。托管线程由工作负载管理器监视,用于确定是否需要更多的资源来满足所定义的服务级别策略。出现错误时,它们将回滚所执行的事务。它们通常在服务器进程中形成资源池,以便对其进行高效利用。应用程序服务器内的托管线程直接影响和决定服务器处理工作的容量(图 2 演示了此场景)。
图 2. WebSphere Application Server z/OS 线程概览
非托管线程 缺乏与托管线程关联的元数据。这些线程通常都是轻量级的,用于执行缓存清理和对象清理之类的事务。它们的失败并不会直接影响事务的完成,安全需求最小。
应用程序服务器中的托管线程执行事务工作负载,因此会直接影响服务器的总体容量和吞吐量。单个工作线程并不会并行执行两个事务,因此,单个事务完成所需的时间越长,工作线程用于处理此事务所花费的时间越多。在工作线程完成其事务并释放以执行下一个事务前,无法处理任何新工作(图 3 给出了此场景的图释)。应用程序服务器的吞吐量可以通过将单个事务处理的速率乘以服务器内的托管工作线程数量得到。
图 3. 存在错误的示例拓扑
以同步方式调用服务(如远程 Web 服务、EJB 服务或从数据库检索数据)时,工作线程将被阻塞,必须等待从该服务返回的响应,然后才能继续处理正在进行的事务。图 4 显示了服务的多个层次同步连接的场景。在图 4 中,数据库服务是“中枢”,其中存在某种类型的延迟,如数据库中的锁定争用或网络问题。在此场景中,工作流是同步的,例如,服务器 4 在从数据库接收到响应之前无法继续处理,服务器 3 在从服务器 4 中接收到响应之前无法继续处理,如此形成了一个链。延迟存在时间越长,服务器 1、2 和 3 就可能会随着应用程序服务器中越来越多的工作线程被阻塞而变得不可用。实际上,处理此类同步连接过程中的任何延迟都会影响依赖服务,从而最终对承载这些依赖服务的应用程序服务器造成影响。
图 4. 同步服务及其被阻塞的工作线程
如果阻塞工作线程,则需要确保仅在合理的时间内阻塞线程。正如前面提到的,单个工作线程无法并行处理多个事务。因此,由于阻塞工作线程会等待某个远程服务发送的响应,因此无法继续处理当前事务,也无法开始处理新事务。对于存在很多阻塞工作线程的情况,在完成正在处理的事务之前,新工作将无法执行,而这意味着新工作必须排队,等待有可用资源时处理。
WebSphere Application Server for z/OS 之类的产品提供了某种排队机制,能够尝试消除阻塞线程的一些影响。这些队列用于在线程不可用时临时接收请求。在工作线程完成其事务后,将会执行队列中的下一个工作项目。
被阻塞的应用程序服务器工作线程可能会对服务器的容量和吞吐量造成负面影响。由于单个托管线程在一次只能执行一个事务,阻塞线程会导致当前线程无法完成,从而使得工作线程无法执行下一个工作单元。
图 5 显示了一个客户体系结构,其中远程服务从应用程序服务器通过非托管网络进行调用。对银行设备的每次服务调用都会阻塞服务器内的工作线程。可以使用超时来约束和控制阻塞工作线程的时间量。例如,如果所有远程方法调用(Remote Method Invocation,RMI)调用必须在 120 秒内完成,则对银行设备的每次服务调用最多花费 120 秒时间。
图 5. 示例客户拓扑
假定出现了某个网络问题,例如,靠近设备的路由器出错,或一组设备出错。图 6 显示了应用程序服务器内此类错误的潜在影响。很多工作线程可能会突然阻塞,并等待超时过期,不过同时又有新工作送到服务器。如果服务器的服务处理速率低于传入工作的速率,请求则会在队列中堆积起来。高级应用程序服务器产品(如 WebSphere Application Server for z/OS)会在工作队列过长的情况下采取一些措施。例如,可以执行第二个工作超时,并拒绝为新请求提供服务。
图 6. 网络问题及其对客户拓扑的影响
可以采取称为 EC3 abend 的措施,此方法中将应用程序服务器的部分内容(本例中的 WebSphere Application Server for z/OS 服务区域)认定为挂起,因此将其重新启动。重新启动 WebSphere Application Server 服务区域将导致所有正在进行的事务回滚,从而会给数据库造成额外的负载。根据图 1 中所示,事务回滚可能会影响共享运行时环境中运行的其他工作。形成堆栈的同步服务(例如图 4 中所示的场景)也可能受到影响;位于堆栈服务链靠后位置的服务执行速度可能会比较慢,从而减少了其调用方的吞吐量。在最复杂的环境中,单个服务可能会存在连锁效应,导致不相关的服务和子系统崩溃,如图 7 中所示的场景。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者