写点什么

初识 Nginx(一)

用户头像
书旅
关注
发布于: 2021 年 04 月 08 日
初识Nginx(一)

由于 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


主要是全球化和物联网的快速发展,导致接入互联网的人与设备的数量都在快速上升,数据的快速爆炸,对硬件性能提出了很高的要求,提到硬件,大家都知道摩尔定律。之前我的服务跑在 1GHz 的 CPU 上,一年半以后,我更新到 2GHz 的 CPU 时,我可以预测到我的服务会有两倍的性能提升


但是到本世纪初,摩尔定律在单颗 CPU 的频率上已经失效了,CPU 开始向多核方向发展。这个时候,当你的服务是跑在 8 核 CPU 上时,一年以后,你换到 16 核的 CPU,通常你的服务不会有一倍的性能提升的


那么这些性能究竟损耗在哪里?


主要是操作系统和大量的软件没有做好服务于多核架构的准备,比如 Apache,Apache 是低效的,因为它的架构模型里,一个进程,同一时间,只会处理一个连接一个请求,只有在这个请求处理完以后,才会去处理下一个请求


这有什么潜台词呢?这实际上是在使用操作系统的进程间切换的特性,因为操作系统微观上只有有限的 CPU,但是操作系统被设计为同时服务于数百甚至上千的进程,而 Apache 一个进程只能服务于一个连接,这样的模式,会导致,当 Apache 需要面对几十万、几百万连接的时候,它没有办法去开几百万的进程,而进程间切换的代价、成本又太高。当并发的连接数变多,这些进程间切换,引发的性能消耗也就越大。而 Nginx 是专门为了这样的应用场景而生的。Nginx 可以处理数百万甚至数千万的并发连接

Nginx 的优点

  • 高并发、高性能

  • 可扩展性好

  • 高可靠性

  • 热部署

  • BSD 许可证


Y 轴是每秒处理的请求数(RPS),X 轴是并发连接数。从图中可以看到,大部分的程序或 web 服务器,随着并发连接数的上升,它的 RPS 会急剧的下降,这就是上边说到的,它的架构设计是有问题的


Nginx 的第一个优点就是高并发、高性能同时具备的,往往高并发只需要对每一个连接所使用的内存尽量的少就可以达到。而具备高并发的同时又具备高性能,往往需要非常好的设计。Nginx 可以达到什么样的标准呢?比如说现在比较主流的服务器(32 核、64G 内存),可以轻松达到数千万的并发连接,如果是处理一些简单的静态资源请求,它可以达到 100w 的 RPS


第二个核心优点是它的可扩展性非常的好。它的可扩展性主要体现在它的模块化设计,模块化设计的非常稳定,使得 Nginx 的第三方模块生态圈非常的丰富。丰富的生态圈,为 Nginx 丰富的功能提供了保证


第三个优点是它的高可靠性。所谓高可靠性是指 Nginx 可以在服务器上持续不间断的运行数年,而很多 web 服务器,往往运行几周或者几个月就需要做一次重启。对于 Nginx 这样一个高并发、高性能的反向代理服务器而言,它往往运行在企业内的边缘节点上,这个时候,如果企业想提供 4 个 9,5 个 9,甚至更高的高可用性时,对 Nginx 持续运行,能够宕机的时间一年可能只能以秒来计。所以在这样一个角色中,Nginx 的高可靠性,提供了非常好的保证


第四个优点是热部署。是指可以在不停止服务的情况下升级 Nginx,这个功能对 Nginx 来讲非常重要,因为在 Nginx 上可能跑了数百万的并发连接。如果是普通的服务,我们可能是需要 kill 掉进程然后再重启的方式就可以处理好。但是对于 Nginx 而言,因为 kill 掉 Nginx 进程,会导致操作系统为所有的已经建立连接的客户端发送一个 TCP 中的 reset 复位包,而很多的客户端是没有办法很好的处理复位请求的。在大并发场景下,一些偶然事件,就会导致必然的恶性结果,所以热部署是非常有必要的


第五个优点是 BSD 许可证。它指的是 Nginx 不仅是开源的、免费的,而且大家可以在有定制的场景下去修改 Nginx 的源代码,在商业场景下是合法的

Nginx 的四个主要组成部分


Nginx 二进制可执行文件

这个是由 Nginx 本身的框架,它的官方模块和编译进去的各种第三方模块,一起构建的文件。这个文件就相当于汽车本身,它有完整的系统,所有的功能都由它提供

Nginx.conf 配置文件

它相当于驾驶员,虽然二进制可执行文件已经提供了许多功能,但这些功能有没有开启,或者开启了以后,定义怎样的行为处理请求,都是由 Nginx.conf 配置文件决定的。所以它相当于驾驶员,控制汽车的行为

access.log 访问日志

它相当于这辆汽车经过的所有地方形成了 GPS 轨迹,access.log 会记录下每一条 http 请求信息与响应信息

error.log 错误日志

它相当于黑匣子一样,当出现了一些不可预期的问题时,可以通过 error.log 去把问题定位出来

Nginx 的版本发布情况


  • feature:发布了哪些功能

  • bugfix:修复了哪些 bug

  • change:做了哪些小的重构

发布于: 2021 年 04 月 08 日阅读数: 12
用户头像

书旅

关注

公众号:IT猿圈 2019.04.11 加入

还未添加个人简介

评论

发布
暂无评论
初识Nginx(一)