第 2 章 JAWS:高性能 Web 服务器构架
James C. Hu Douglas C. Schmidt
摘要
通信软件的开发者面临着许多挑战。通信软件包含固有的复杂性,比如错误检测和恢
复;以及随机的复杂性,比如关键概念和组件的持续的重新发现和发明。应对这些挑战需
要对面向对象应用构架和模式有全面的了解。本论文阐释我们是怎样将通信软件的构架和
模式应用于开发称为
JAWS
的高性能
Web
服务器的。
JAWS
是一种面向对象的构架,支持多种
Web
服务器策略的配置,比如使用异步
I/O
和
LRU
缓存的线程池并发模型
vs.
使用同步
I/O
和
LFU
缓存的
Thread-per-Request
并发模型。
因为
JAWS
是一个构架,可以系统地对这些策略进行定制,独立地或协作地进行评估,以
决定最佳的策略方案。使用这些方案,
JAWS
可以静态地和动态地改变自己的行为,以为给
定的软件
/
硬件平台和工作负载采用最为有效的策略。
JAWS
的自适配软件特性使其成为用
于构造高性能
Web
服务器的强大应用构架。
2.1 介绍
在过去的几年中,万维网(Web)上的通信流量发生了戏剧性的增长。流量的增长在
很 大 程 度 上 应 归 于 廉 价 的 和 无 处 不 在 的 Web 浏 览 器 ( 比 如 NCSA Mosaic 、 Netscape
Navigator 和 Internet Explorer)的激增。同样地,Web 协议和浏览器也正日益被应用于专门
而昂贵的计算任务,比如西门子[1]和柯达[2]所用的图像处理服务器和像 AltaVista 和 Lexis-
Nexis 这样的数据库搜索引擎。
要跟上需求增长的步伐,必须开发高性能 Web 服务器。但是,在开发者配置和优化
Web 服务器时,他们面对的是一组异常丰富的设计策略。例如,开发者必须在广泛的并发
模型(比如 Thread-per-Request vs.线程池)、分派模型(比如同步 vs.异步分派)、文件缓
存模型(比如 LRU vs. LFU),以及协议处理模型(比如 HTTP/1.0 vs. HTTP/1.1)中进行
选择。没有哪种配置对于所有硬件/软件平台和工作负载来说都是最佳的[1, 3]。