当前位置: 首页 > 后端技术 > PHP

初识Nginx(一)

时间:2023-03-29 18:46:24 PHP

由于Nginx对硬件和操作系统内核特性的深度挖掘,在保持高并发的同时实现了高吞吐量。优秀的模块设计让Nginx的生态系统极其丰富。大量的第三方模块使得Nginx可以轻松实现各种场景下的定制化需求。这些特性让Nginx成为了互联网公司的标准配置。Nginx的三个主要应用场景往往是一个web请求从红色箭头往下走之后,会先经过Nginx,然后去到应用服务,然后访问Redis或者MySQL等数据库,提供基础的数据功能。这里有一个问题。应用服务对开发效率要求高,运行效率非常低。它的QPS、TPS或者并发是有限的,所以需要很多这样的应用服务组成一个集群来为用户提供高可用,而一旦很多应用服务组成一个集群,Nginx就需要有一个反向代理的功能,可以通过动态请求到一个由很多应用服务组成的集群,这肯定会带来两个需求:当某些服务出现问题时,需要做容灾,这样反向代理就必须具备负载均衡的功能。其次,在这样一个环节中,Nginx处于企业内部网络的边缘节点。随着网络链路的增长,用户体验到的延迟会增加,所以如果我们可以让一些用户看起来没有变化,或者一段时间内看起来没有变化的动态内容,缓存在Nginx部分,Nginx直接提供给用户访问.这样一来,用户访问延迟会大大降低,所以反向代理会衍生出另一个功能叫缓存,可以加快访问速度。很多时候我们在访问css、js或者一些小图标图片。应用服务不需要访问此类静态资源。只需要传递本地文件,放置在系统中的静态资源,Nginx直接提供。就是这样,这就是Nginx的静态资源服务功能的第三个应用场景,因为应用服务本身的性能存在很多问题,但是数据库服务要比应用服务好很多,因为它的应用场景比较简单,其并发性能和TPS远高于应用服务,因此衍生出第三个应用场景。Nginx直接访问数据库(Redis或类似服务),利用Nginx强大的并发能力实现web防火墙等复杂业务功能提供给用户。这就需要API服务有非常强大的业务处理功能,所以像OpenResty,或者像Nginx这样集成了JavaScript,使用JavaScript、Lua等语言功能,以及一些语言自带的工具库来提供完整的API服务。Nginx出现互联网数据量快速增长的历史背景摩尔定律:Apache低效的性能提升主要是由于全球化和物联网的快速发展,导致连接的人和设备的数量迅速增加互联网和数据的快速爆炸。对硬件性能提出了很高的要求。说到硬件,大家都知道摩尔定律。在我的服务在1GHzCPU上运行之前,一年半之后,当我更新到2GHzCPU时,我可以预测我的服务将具有两倍的性能。频率已经不行了,CPU开始往多核方向发展。这时,当你的服务运行在8核CPU上时,一年后,如果换成16核CPU,通常你的服务不会有成倍的性能提升。那么性能损失在哪里呢?主要原因是操作系统和大量的软件还没有做好为多核架构服务的准备,比如Apache,Apache效率低下,因为在它的架构模型中,一个进程只能同时处理一个连接和一个请求同一时间。处理完这个请求后,会处理下一个请求。潜台词是什么?这实际上是利用了操作系统进程间切换的特性,因为操作系统微观上只限制了CPU,而操作系统被设计为同时为数百甚至数千个进程服务,而一个Apache进程只能serve一个连接,这样的模型,会导致Apache在需要面对几十万或者百万连接的时候,它没有办法开上百万进程,进程之间的切换成本和成本太高。当并发连接数增加时,在这些进程之间切换会造成更大的性能消耗。而Nginx就是专门为这样的应用场景而生的。Nginx可以处理百万甚至千万级的并发连接Nginx的优点高并发、高性能、扩展性好、可靠性高热部署BSD许可它的Y轴是每秒处理的请求数(RPS),X轴是并发连接数。从图中可以看出,大多数程序或Web服务器,随着并发连接数的增加,其RPS会急剧下降。第一个优点是它同时具有高并发和高性能。通常可以通过为每个连接使用尽可能少的内存来实现高并发。同时拥有高并发和高性能往往需要非常好的设计。Nginx能达到什么标准?比如现在主流的服务器(32核,64G内存)可以轻松达到千万级并发连接数。如果是处理一些简单的静态资源请求,可以达到100wRPS。第二个核心优势是可靠性。可扩展性非常好。它的扩展性主要体现在它的模块化设计,非常稳定,使得Nginx的第三方模块生态非常丰富。丰富的生态系统保证了Nginx的丰富功能。第三个优点是可靠性高。所谓高可靠性,就是Nginx可以在服务器上连续运行数年,而很多web服务器运行数周或数月后往往需要重启。对于Nginx这样的高并发、高性能的反向代理服务器,在企业中往往运行在边缘节点上。这时候,如果企业要提供4个9、5个9,甚至更高的高可用,对于Nginx的持续运行来说,一年可以宕机的时间可能只能以秒来计算。所以在这样的作用下,Nginx的高可靠性提供了很好的保障。第四个优势是热部署。这意味着Nginx可以在不停止服务的情况下升级。这个功能对于Nginx来说非常重要,因为Nginx上可能运行着数以百万计的并发连接。如果是普通服务,我们可能需要杀掉进程,重启才能处理。但是对于Nginx来说,kill掉Nginx进程会导致操作系统向所有已经建立连接的客户端发送TCP中的reset包,很多客户端无法很好的处理reset请求。在大并发场景下,一些偶然事件会导致不可避免的恶性结果,因此热部署是非常必要的。第五个优势是BSD许可证。指的是Nginx不仅是开源免费的,而且你可以在自定义场景下修改Nginx的源码。在商业场景中,这是合法的。Nginx的四个主要组件是Nginx二进制可执行文件。Nginx本身的框架,它的官方模块和编译到它里面的各种第三方模块,都是一起构建的文件。这个文件相当于汽车本身。它有一个完整的系统,所有的功能都由它提供。Nginx.conf配置文件相当于驱动。虽然二进制可执行文件已经提供了很多功能,但是这些功能是否开启,或者开启之后,以什么行为来处理请求,是由Nginx.conf配置文件决定的。所以它相当于司机,控制汽车的行为。access.log访问日志相当于汽车经过的所有地方的GPS轨迹。access.log会记录每次http请求信息和响应信息error.log错误日志相当于一个黑盒子。当出现一些意想不到的问题时,可以通过error.log来定位问题。Nginx版本发布特性:发布了哪些功能bugfix:哪些bugchanges是fixedstructure