Web服务基础介绍

                  Web服务基础介绍

                                                作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

 

 

 

一.正常情况下的单次web服务访问流程

Web服务基础介绍_第1张图片

博主推荐阅读:
  https://www.cnblogs.com/yinzhengjie/p/12014076.html

 

二.互联网发展历程回顾

1993年3月2日,中国科学院高能物理研究所租用AT&T公司的国际卫星信道建立的接入美国SLAC国家实验室的64K专线正式开通,成为我国连入Internet的第一根专线。

1995年马云开始创业并推出了一个web网站<<中国黄页>>,1999年创建阿里巴巴 www.alibabagroup.com, 2003年5月10日创立淘宝网,2004年12月,马云创立第三方网上支付平台支付宝(蚂蚁金服旗下,共有蚂蚁金服支付宝、余额宝、招财宝、蚂蚁聚宝、网商银行、蚂蚁花呗、芝麻信用等子业务板块。)。

2012年1月11日淘宝商城正式更名为“天猫”。 2014年9月19日里巴巴集团于纽约证券交易所正式挂牌上市。 2018年福布斯统计马云财富346亿美元。

2009年开始举办双十一购物狂欢节,以下是历年交易成交额:
  2009年双十一:5000万元;
  2010年双十一:9.36亿元;
  2011年双十一:33.6亿元;
  2012年双十一:191亿元;
  2013年双十一:350亿元;
  2014年双十一:571亿元;
  2015年双十一:912.17亿元;
  2016年双十一:1207亿元元;
  2017年双十一:1682.69亿元;
  2018年双十一:2135亿元;
  2019年双十一:2684亿元;

 

三.web服务介绍

Netcraft公司于1994年底在英国成立,多年来一直致力于互联网市场以及在线安全方面的咨询服务,其中在国际上最具影响力的当属其针对网站服务器,域名解析/主机提供商,以及SSL市场所做的客观严谨的分析研究。
Netcraft官网网站:https://news.netcraft.com/

Web服务基础介绍_第2张图片

 

四.Apache-早期的web服务端

Apache起初由美国的伊利诺伊大学香槟分校的国家超级计算机应用中心开发,目前经历了两大版本分别是1.X和2.X,其可以通过编译安装实现特定的功能,
官方网站:http://www.apache.org

1>.Apache prefork模型

prefock模块概述:
  预派生模式,有一个主控制进程,然后生成多个子进程,使用select模型,最大并发1024,每个子进程有一个独立的线程响应用户请求,相对比较占用内存,但是比较稳定,可以设置最大和最小进程数,是最古老的一种模式,也是最稳定的模式,适用于访问量不是很大的场景。

优点:
  稳定

缺点:
  慢,占用资源,1024个进程不适用于高并发场景

 Web服务基础介绍_第3张图片

2>.Apache woker模型

worker模型概述:
  一种多进程和多线程混合的模型,有一个控制进程,启动多个子进程,每个子进程里面包含固定的线程,使用线程程来处理请求,当线程不够使用的时候会再启动一个新的子进程,然后在进程里面再启动线程处理请求,由于其使用了线程处理请求,因此可以承受更高的并发。

优点:
  相比prefork占用的内存较少,可以同时处理更多的请求

缺点:
  使用keepalive的长连接方式,某个线程会一直被占据,即使没有传输数据,也需要一直等待到超时才会被释放。如果过多的线程,被这样占据,也会导致在高并发场景下的无服务线程可用。(该问题在prefork模式下,同样会发生)

Web服务基础介绍_第4张图片 

3>.Apache event模型

event模型概述:
  Apache中最新的模式,2012年发布的apache 2.4.X系列正式支持event模型,属于事件驱动模型(epoll),每个进程响应多个请求,在现在版本里的已经是稳定可用的模式。它和worker模式很像,最大的区别在于,它解决了keepalive场景下,长期被占用的线程的资源浪费问题(某些线程因为被keepalive,空挂在哪里等待,中间几乎没有请求过来,甚至等到超时)。event MPM中,会有一个专门的线程来管理这些keepalive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放。这样增强了高并发场景下的请求处理能力。

优点:
  单线程响应多请求,占据更少的内存,高并发下表现更优秀,会有一个专门的线程来管理keep
-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放

缺点:
  没有线程安全控制

Web服务基础介绍_第5张图片

 

五.Nginx-高性能的web服务端

Ninx是由1994年毕业于俄罗斯国立莫斯科鲍曼科技大学的同学为俄罗斯rambler.ru公司开发的,开发工作最早从2002年开始,第一次公开发布时间是2004年10月4日,版本号是0.1.0,官网地址 www.nginx.org

Nginx历经十几年的迭代更新(https:
//nginx.org/en/CHANGES), 目前功能已经非常完善且运行稳定,另外Nginx的版本分为开发版、稳定版和过期版,nginx以功能丰富著称,它即可以作为http服务器,也可以作为反向代理服务器或者邮件服务器,能够快速的响应静态网页的请求,支持FastCGI/SSL/Virtual Host/URLRwrite/Gzip/HTTP Basic Auth/http或者TCP的负载均衡(1.9版本以上且开启stream模块)等功能,并且支持第三方的功能扩展。
为什么使用Nginx: 天猫 淘宝 小米
163 京东新浪等一线互联网公司都在用Nginx或者进行二次开发
基于Nginx的访问流程如下:

Web服务基础介绍_第6张图片

  

六.用户访问体验统计

互联网存在用户速度体验的1-3-10原则,如下所示:
  1秒:
    最优
  1-3秒:
    较优
  3~10秒:
    比较慢,
  10秒以上
    用户无法接受。

用户放弃一个产品的代价很低,只是换一个URL而已。

全球最大搜索引擎 Google:慢500ms
=20%将放弃访问。

全球最大的电商零售网站 亚马逊:慢100ms=1%将放弃交易

Web服务基础介绍_第7张图片

 

七.性能影响

有很多研究都表明,性能对用户的行为有很大的影响: 
  79%的用户表示不太可能再次打开一个缓慢的网站47%的用户期望网页能在2秒钟以内加载 40%的用户表示如果加载时间超过三秒钟,就会放弃这个网站 页面加载时间延迟一秒可能导致转换损失7%,页面浏览量减少11% 8秒定律:用户访问一个网站时,如果等待网页打开的时间超过8秒,会有超过30%的用户放弃等待

1>.影响用户体验的几个因素

据说马云在刚开始创业在给客户演示时,打开一个网站花了两个多小时。

影响用户体验的几个因素:   客户端硬件配置   客户端网络速率   客户端与服务端距离   服务端网络速率   服务端硬件配置   服务端架构设计   服务端应用程序工作模式   服务端并发数量   服务端响应文件大小及数量   服务端I
/O压力

2>.应用程序工作模式

httpd MPM(Multi-Processing Module,多进程处理模块)模式:
  prefork:进程模型,两级结构,主进程master负责生成子进程,每个子进程负责响应一个请求
  worker:线程模型,三级结构,主进程master负责生成子进程,每个子进程负责生成多个线程,每个线程响应一个请求
  event:线程模型,三级结构,主进程master负责生成子进程,每个子进程生成多个线程,每个线程响应一个请求,但是增加了一个监听线程,用于解决在设置了keep-alived场景下线程的空等待问题。

Nginx(Master
+Worker)模式:   主进程:
    接收请求并分配给指定的工作进程处理。   工作进程:
    分配子线程直接处理客户的请求
线程验证方式:   
cat /proc/PID/status   pstree -p PID

3>.服务端I/O

I/O:
  在计算机中指Input/Output,分为磁盘IO和网络IO。
  网络通信就是网络协议栈到用户空间进程的IO就是网络IO。
  磁盘I/O是进程向内核发起系统调用,请求磁盘上的某个资源比如是文件或者是图片,然后内核通过相应的驱动程序将目标图片加载到内核的内存空间,加载完成之后把数据从内核内存再复制给进程内存,如果是比较大的数据也需要等待时间。

IOPS:
  (Input/Output Per Second)即每秒的输入输出量(或读写次数),是衡量磁盘性能的主要指标之一。IOPS是指单位时间内系统能处理的I/O请求数量,一般以每秒处理的I/O请求数量为单位,I/O请求通常为读或写数据操作请求。

一次完整的I/O:
  是用户空间的进程数据与内核空间的内核数据的报文的完整交换,但是由于内核空间与用户空间是严格隔离的,所以其数据交换过程中不能由用户空间的进程直接调用内核空间的内存数据,而是需要经历一次从内核空间中的内存数据copy到用户空间的进程内存当中,所以简单说I/O就是把数据从内核空间中的内存数据复制到用户空间中进程的内存当中。

每次IO,都要经由两个阶段:
  第一步:将数据从文件先加载至内核内存空间(缓冲区),等待数据准备完成,时间较长
  第二步:将数据从内核缓冲区复制到用户空间的进程的内存中,时间较短 

Web服务基础介绍_第8张图片

 

八.系统I/O模型

 

 

九.

 

你可能感兴趣的:(Web服务基础介绍)