论文部分内容阅读
随着信息技术的迅猛发展,互联网应用和服务的流量与用户规模与日剧增,巨大的网络流量给在网络上提供各种服务的服务器提出了前所未有的挑战。虽然计算机硬件的发展在一定程度上提升了服务器的性能,但其仍然难以满足要求。具体表现在服务平台缺乏对高并发、动态内容、连续的高可用性和对突发时变负载的自适应调节能力等需求的综合考虑。传统的服务器应用程序主要使用阻塞的多线程并发控制,即网络IO的读写是通过线程轮询来完成,服务端通过多线程并发来响应客户端请求的网络通信机制。这种网络通信机制存在性能低下、并发量小等缺点。基于非阻塞事件驱动的网络通信机制能够很好的解决上述问题。然而,纯事件驱动模型在程序结构上以事件监听器和分派机制为中心,缺乏构造模块化程序的灵活性,不利于构造复杂的服务器应用程序,也很难发挥多处理器并行处理的优势。分阶段的事件驱动体系架构(Stage Event-Driven Architecture SEDA)在事件驱动体系架构中引入模块化思想,它通过将代码组织成模块或对象化组件,使用显式事件队列进行模块间通信,引入资源的动态管理机制来管理线程池,动态的改变不同阶段的工作线程设置或设置高的优先权,从而减少瓶颈。本文结合实际应用的需求,对SEDA进行了深入的研究。SEDA提出的分“阶段”的思想,能够很好的解决上述采用事件驱动网络通信模型时所出现的问题。建立在这种体系结构的服务器应用程序具有良好的可伸缩性、较低的资源消耗、易编程使用等优点。由于SEDA是一种较新的软件体系架构,基于此架构构建的现代服务器应用程序还很少,目前仅有少量的开源的框架mule、mina使用了SEDA技术。显示SEDA在实际应用中还不够成熟,并且SEDA在应用中存在各功能模块划分粒度过粗,模块间耦合度过高等问题。针对上述问题,重庆民航凯亚公司民航机票分销代理服务系统(以下简称:案例系统)开发项目,结合该项目中对代理服务器需求的具体情况并针对高性能服务器应用软件所要求的大并发量、较低的资源消耗及良好的资源负载调节能力等特点,在原有SEDA模型的基础上进行了改进,改进后的模型使得对SEDA中的阶段构建和管理更加灵活,整体结构更加简单、程序的模块化和代码的复用度更高,并且基于改进后的模型设计开发了案例系统中的SEDA组件,给出了代理服务应用程序组件的详细设计方案和具体的实现过程,并对所开发的代理服务应用程序进行了测试。并将改进后的模型成功地应用在案例系统中。本文中提出的SEDA改进模型,在案例系统中的设计和实现证实了该方案原理的正确性以及实践的可行性。本文所提出的设计和实现方案对其它类似的服务器应用程序的设计也具有一定的参考价值。