正常情况下的单次web服务访问流程:
Netcraft公司于1994年底在英国成立,多年来一直致力于互联网市场以及在线安全方面的咨询服务,其中在国际上最具影响力的当属其针对网站服务器,域名解析/主机提供商,以及ssl市场所做的客观严谨的分析研究。
Apache起初由美国的伊犁诺伊大学香槟分校的国家超级计算机应用中心开发,目前经历了两大版本分别是1.X与2.X,其可以通过编译安装实现特定的功能
MPM(多路处理模块)三种工作模式:
Apache 早期装好默认为prefork模式,(与centos7、8)版本有关系,centos8默认为event模式
预派生模式,有一个主拉制进程,然后生成多个子进程,使用select校型,最大并发1024,每个子进程有一个独立的线程响应用户清求,相对比较占用内存,但是
比较稳定,可以设登限大和最小进程数,是最古老的一种横式, 也是最稳定的校式,适用于访问量不是很大的场景。
优点:稳定
缺点:每个用户请求泥要对应开启一个进程,占用资源较务,并发性差,不适用于高并发场景
一种多进程和多线程混合的模型,有一个控制进程,启动多个子进程,每个子进程里面包含固定的线程,使用线程来处理请求,当线程不够使用的时候会在启动一个新的子进程,然后再进程里面启动线程处理请求,由于其实用了线程处理请求,因此可以承受更高的并发。
优点:相比prefork占用的内存较少,可以同时处理更多的请求
缺点:使用keepalive的长连接方式,某个线程会一直被占据,即时没有传输数据,也需要一直等待到超时才会被释放,如果过多的线程,被这样占据,也会导致在高并发场景下的无服务线程可用。(该问题在prefork模式下,同样会发生)
Aapche中最新的模式,2012年发布的apache2.4X系列正式支持event模型,属于事件驱逐模型(epoll),每个进程响应多个请求,在现在版本里的已经是稳定可用的模式,它和worker模型很像,最大的区别在于他解决了keepalive场景下,长期被占用的线程的资源浪费问题(某些线程因为呗keepalive空挂在哪里等待,中间几乎没有请求过来,甚至等到超时)。event MPM中,会有一个专门的线程来管理这些keepalive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放,这样增强了高并发场景下的请求处理能力。
有点:单线程响应多请求,占据更少的内存,高并发下表现更优秀,会有一个专门的线程来管理keepalive类型的线程,当有真实的请求过来时,将请求传递给服务线程,执行完毕后,又允许它释放
缺点:没有线程安全控制
互联网存在用户速度体验的1-3-10原则,即1秒最优,1-3秒较优,3-10秒比较慢,10秒以上用户无法接受,用户放弃一个产品的代价很低,只是换一个URL而已。
影响用户体验的因素
I/O在计算机中指input/output,IOPS(Input/Output Per Second)即每秒的输入输出量(或读写次数),是衡量磁盘性能的主要指标之一,IOPS是指单位时间内系统能处理的I/O请求数量,一般以每秒处理的I/O请求数量为单位,I/O请求通常为读或写数据操作请求
一次完成的I/O是用户空间的进程数据与内核空间的内核数据的报文的完整交换,但是由于内核空间与用户空间是严格隔离的,所以其数据交换过程中不能由用户空间的进程直接调用内核空间的内存数据,而是需要精力一次从内核空间中的内存数据copy到用户空间的进程内存当中,所以简单来说,I/O就是把数据从内核空间的内存数据复制到用户空间中的内存当中。
Linux的I/O
网络通信就是网络协议栈道用户空间进程的I/O,就是网络I/O
网络I/O处理过程
不论磁盘和网络I/O