从物理层次上分析,按照Web应用中组件划分来说,主要分为三层,三层结构如下图所示:
对于该系统的三层结构,我用下面这个图进行详细的表示:
1.Client端需用的是Web浏览器,其作用是跟后端 Web 服务器交互,呈现 Web 应用;解析并渲染服务端输出的 HTML/CSS;提供丰富的 API,供超文本内嵌的 JavaScript 调用以实现各种交互效果;浏览器 API == 下一代 Win32 API ;
2.网页源码自然是来自HTTP,HTTP是Web 应用程序的基石;是浏览器与 Web 服务器交互的唯一“语言”;TCP 可靠通信、无状态、请求/响应式;简单易读,定义明确;pipeline 等特性进一步加速;
3.Server端有Web服务器服务于浏览器、Web 蜘蛛等客户端;对静态文件请求,直接发送文件(sendfile);对动态程序请求,通常转发(FastCGI, uwsgi, SCGI, AJP, ...)给应用服务器;大量扩展模块,支持各种功能和特性定制(rewrite,headers,proxy,cache...);
4.而Server段同时还有应用服务器,其接收 Web 服务器转发过来的动态程序请求,实现服务端程序逻辑;与后端数据服务器和远程服务交互;PHP 大展身手的主战场;Python, Ruby, Java, C#, Perl, C, C++ ... 各种技术势力割据着这块市场;
5.对于存储数据而言数据服务器也是不可或缺的一部分,数据存储器是Web 应用数据的最终归宿;包括关系型、键值型、文档型、列型;会话存储服务器存放着各浏览器会话数据;搜索引擎存放着关键字倒排索引数据;分布式缓存存放着需要加速访问的数据;
6.还有一种就是调度服务器,它用来监视、管理服务器群的状态运行后台持久任务进程,诸如数据挖掘,会话清扫,缓存数据预生成,等等。