web server模型

1、web server主要操作:(不会处理动态内容,也就是不会执行脚本)
(1)建立连接:接收或者拒绝客户端的连接请求
(2)接收请求:通过网络读取http请求报文
(3)处理请求:解析请求报文并做出相应的动作
(4)访问资源:访问请求报文中的相关资源
(5)构建响应:使用正确的首部生成http响应报文
(6)发送响应:向客户端发送生成的响应报文
(7)记录日志:已经完成http事务记录进日志

2、web server模型:
mpm模型,也叫多道处理模块,定义apache服务器在响应多个用户请求时所采用的的模型。分三种:
(1)prefork:在apache启动之初,就会预派生一些子进程,然后等待连接。每个子进程只有一个线程,可以兼容新老模块,也不需要担心线程安全问题。但是一个进程相对的占用更多的资源,消耗大量内存,不擅长处理高并发的场景。
备注:
a、查看当前使用的mpm:/usr/local/apache24/bin/httpd -V 或者apachectl -V
b、MaxClients的设置值:设定Apache可同时处理的请求数量,默认的150远远不能满足一般站点,超过这个数量的请求需要排队,直到前面的请求处理完毕。如果我们发现系统资源还剩很多,但是HTTP访问却很缓慢,大多数时候增加这个值可以得到缓解。
c、MaxRequestsPerChild的设置值:设定处理多少个请求后该进程自动销毁,默认值为0表示永不销毁。当负载较高时,为了使每个进程处理更多的请求,避免销毁、创建进程的开销,一般建议设置为0或者较大的数字。但是也要注意可能会造成进程占用的内存不能得到释放,所以这个值不能设置得太大,也不能太小,大了会影响资源的释放,小了会导致apache不断fork进程。
(2)worker:与prefork的工作模式相比,worker使用了多进程和多线程的混合模式,worker模式也会预派生一些子进程,然后每个子进程创建一些线程,同时包括一个监听线程,每个请求过来会被分配到一个线程来服务。线程比进程更加轻量级,因为线程通常会共享父进程的内存地址,因此内存占用会减少一些。缺点是必须考虑线程安全性,因为多个子进程是共享父进程的内存地址的,如果使用keep-alive的长连接方式,某个线程会被一直占据,需要等到超时才会被释放。如果过多的线程被这样占据,也会导致在高并发下的无服务线程可用。
(3)event:和worker的工作模式很像,最大的区别是解决了在keep-alive场景下,长期线程被占用导致的资源浪费问题。在event模式下,会有一个专门的线程来管理keep-alive线程,当有真实请求过来的时候,将请求传递给服务进程,执行完毕后,又允许它释放,这样增强了在高并发场景下的请求处理能力。通过事件驱动机制和通知机制,大大加速响应请求的过程,请求所占用的服务器资源也大大减少。
备注:
a、httpd -l(可以查看当前所使用的工作模型)
b、rpm -ql httpd|grep bin(可以查看httpd也支持worker模型和event模型,默认是prefork模型)
c、prefork、worker、event模型分别对应的二进制程序是:
/usr/sbin/httpd
/usr/sbin/httpd.worker
/usr/sbin/httpd.event
如果要启用worker模型或者event模型,就通过httpd.worker或者httpd.event相对应的程序来启动httpd。或者修改/etc/sysconfig/httpd文件中的httpd = /usr/sbin/httpd.worker|httpd.event

3、web server架构:C/S架构
C:client agent,客户端代理,就是常见的浏览器,包括ie、firefox、chrome、opera、sarafi(其他的诸如360浏览器、遨游等,都是假的浏览器,里面是ie的内核,只是外观不同而已)
S:server,能够提供web服务的,包括httpd、iis、nginx、lightted、tomcat、jboss(tomcat的二次封装)、websphere、weblogic(最后两个是商业化产品)
备注:
www.netcraft.com #可以查看web服务器各种产品的市场占有率