web服务器的介绍
b/s c/s描述
- c/s:Client/Server 客户端/服务端,比如:
- qq客户端/qq服务器
- 微信客户端/微信服务器
- lol客户端/lol服务器
- …
- b/s:Browser/Server 浏览器、网站/服务端。
常见的web服务器
在linux和windows平台常见的web服务器:
- Apache(国企性质,要求技术栈不需要那么先进,没有大量流量,只需要系统架构稳定即可)
- Nginx(主流的互联网公司都选择使用nginx)
- Lighttpd(性能非常接近nginx的一款web server,主要是外国人再用)
- Tomcat(应用服务器,java做程序解析)
- IBM(websphere)
windows平台下的 - IIS (internet information server)
nginx + uwsgi (python后台,做负载均衡)
Apache
apache是世界主流的web服务器,大部分网站都是apache搭建的,优势是开放源代码,开发维护的团队很强大,有好几十年的历史,apache支持跨平台应用(linux,unix,windows)
但是apache属于重量级产品,功能都是以模块化定制,且他的工作模式,占用的内存资源过多,对系统消耗很大,性能也稍弱于nginx。
Nginx
nginx是一款优秀的高性能的web服务器,反向代理服务器,负载均衡服务器。
Lighttpd
是一款高性能,高安全性,快速,且配置灵活的web服务器产品。专门为高流量的网站设计,相比于其他各款web服务器,内存占用极小,能够提供有效的API,对CPU负载均衡情况管理,支持后台请求转发,fastapi,scgi,资源压缩,url重写,别名等等功能,是nginx的重头对手之一。
Tomcat
tomcat汤姆猫是一个开源,运行基于java的一个web服务器,主要根据serverlet进行执行,但是tomcat对于平台文件,静态文件,高并发处理还是较弱,因此也适合nginx,apache结合使用。
想要使用tomcat应用服务器,需要掌握基本的java环境部署等等。
IIS
和nginx、apache、tomcat有哪些区别呢?
IIS支持图形化操作,毕竟是在windows平台,通过鼠标点击就能完成网站配置
Nginx
是俄罗斯人开发的一款高性能的HTTP web服务器,支持反向代理,负载均衡,资源压缩,url重写,网站跳转等等功能。
nginx以高效的linux网络模型,epoll,event,作为网络IO模型,kqueue,在高并发网站的情况下,nginx能够轻松支持5W+的并发流量,并且消耗的服务器内存CPU资源也是很低的,运行起来非常稳定。
Nginx特点
- 成本低
- nginx强大在于其反向代理功能,软件负载均衡。还存在硬件负载均衡(f5,netscaler) ,但是价格昂贵,不会使用,利用nginx搭建高可用性的负载均衡的站点。
- 由于nginx支持bsd开源协议,bsd就是可以给用户更自由的权限,可以自由试用,修改源码,如果你修改后发布,还得遵循bsd协议。
- 利用软件技术可以实现硬件负载均衡一样的效果,经济实惠。
- 几大优势
- nginx配置文件更加易懂。
- nginx支持网站url地址重写(网站需要更换域名),还能够根据url特点进行请求转发,判断(7层负载均衡)。
- nginx支持高可用性配置(防止单点故障,服务器崩溃,nginx非常稳定,宕机异常退出的几率很小)。
- nginx节省网络带宽,支持静态文件压缩后传输,支持gzip压缩功能。
- nginx支持热部署,可以在不停nginx情况下更新代码,并且nginx还支持7*24h运转。
nginx的网络模型
网络IO模型概念
-
内核空间,用户空间
内核空间:一个操作系统的核心组件,称之为内核,独立于普通的应用程序,可以直接操作底层硬件,处理系统受保护的区域。操作系统为了保护系统的核心区域,也就是内核,使得用户无法直接修改系统底层,因此操作系统就开辟了两块虚拟内存空间,一是内核空间,二是用户空间 -
进程切换
为了控制进程的执行,操作系统的内核需要有能力挂起CPU上运行的程序(暂停一个CPU正在处理的进程),还能恢复之前已经挂起的进程,这种行为称之为进程切换。 -
进程阻塞
正在执行中的进程,由于某些事件的等待,比如资源加载中,资源加载失败,操作系统自动的就会阴塞该进程,调
用内核的block语句,让该进程处于阻塞状态,因此阻塞的进程是一种主动的行为。 -
文件描述符
这是计算机科学里的一个术语,表示指向文件引用的一个抽象的概念,文件描述符是一个索引值,指向linux内核为每一个进程打开的文件做记录的一个表。程序每打开一个文件,系统内核就向该进程发送一个文件描述符。 -
Linux IO模型
input 输入和output 输出,对于linux的文件读写操作,数据的I0操作,比如文件的读取,数据优先会被拷贝到操作系统的内核缓冲区,然后再冲缓冲区拷贝到应用程序的内存空间。- 这是属于本地文件的I0过程
一个读取操作,经历了两个阶段 1.等待数据准备 2.数据从内核空间拷贝到用户进程空间
- 网络10
1.等待网络上的数据分段到达,然后复制到内核的缓冲区 2.数据从内核缓冲区拷贝到用户空间的应用程序 网络应用主要面临两个问题,数据计算,网络T0延迟 网络的延迟,是造成性能低下的最大的原因
为什么选择Nginx
nginx就是在于优秀的网络IO处理模型
常见的IO模型
- 阻塞模型
- 非阻塞模型
- IO多路复用
- 异步IO
网络IO指的就是在网络中进行数据的读,写操作,本质上就是一个socket套接字读取,socket套接字在linux系统中被抽象为流的概念,网络I0就是对数据流的处理。