论文部分内容阅读
作为一种新的软件范型,网构软件所面临的一个关键挑战来自于开放、动态和多变的网络环境所带来的负载动态性。在动态、多变的Internet环境中,用户的行为难以预测,其具体表现为用户的请求数量通常因为各种外界因素的影响而以极不规律的方式随时间动态变化,从而导致网构软件的系统负载呈现出明显的动态性。当这种负载的变化超出软件自身的承载能力时,就可能会导致拒绝服务、系统宕机等严重的系统错误。因此,负载管理是保证软件可用性和可靠性的一类重要技术,它们在运行时刻根据软件系统的负载情况变化对系统的计算资源和/或系统的计算逻辑进行适当调整,从而避免软件系统因负载变化而无法向用户提供正确的服务。 从抽象的角度来看,软件应用的运行可以看作是计算逻辑运行在计算资源之上。行之有效的负载管理技术需要至少具备以下两个条件之一:一,采用合理有效的计算资源的分配方法;二,计算逻辑能够适应请求变化。然而,现有研究与实践在这两方面仍存在不足,主要表现为:首先,现有的负载均衡机制在计算资源动态变化时,集群视图和负载均衡策略难以适应动态变化;其次,现有的提供计算逻辑适应性的负载管理技术通常大多仅限于应用级,无法准确的定位导致应用发生过载的原因和位置,在解决过载问题时针对性和适应性有所不足;最后,已有的服务降级机制在很大程度上或者取决于管理员经验或者静态固化,适应性和自动化程度有所不足。 为了解决上述问题,本文建立了一套网构软件的负载管理技术框架,并通过扩展Java EE应用服务器实现了相应的原型系统,其主要特色和贡献包括: (1)提出了一种动态的客户端负载均衡机制。该机制的基本思想是基于集群技术常用的客户端负载均衡方法,在保持其良好的可伸缩性的同时,通过引入分布式的集群视图更新、控制流等技术增进了它对动态性的支持。该机制可以有效的支持集群节点的动态加入和退出,并能够较好的支持负载均衡策略的运行时刻重配置。 (2)提出了一种基于细粒度监控的服务降级机制。该机制的核心思想是可以对应用中优先级较低且占用了较多瓶颈计算资源的服务进行降级,释放资源以帮助应用提供关键服务。因为综合考虑了细粒度的资源监控和业务逻辑两方面的关键因素,所以该机制可以较好地定位系统瓶颈。同时,它还能够支持对选定的服务进行多种服务降级操作。 (3)提出了两种服务降级决策算法,该降级决策算法是在系统检测到过载时自动触发并根据系统当前的实时监控数据产生出最终的降级方案,整个过程中无论降级策略的生成还是降级策略的实施都避免了管理人员的手工介入,很大程度上避免了由于操作延时等原因引起的系统长时间过载问题。 (4)对Java EE应用服务器进行了多种扩展,实现了一个支持本文提出的负载管理技术框架的原型系统。Java EE应用服务器是目前主流的网络应用运行平台之一,基于已有的应用服务器平台实现本文提出的负载管理技术可以为众多的Java EE应用提供负载管理支持。原型系统的实现验证了整套技术框架的可行性,即在负载情况发生变化以及过载发生时,本文提出的技术框架能够迅速作出应对操作。此外,原型系统的实现也为应用服务器中负载管理机制的后续研究提供了平台支持。