Nginx(1):入门篇,技术点铺开

或者说,如果写成了系列,那么这篇就会有名字了。

基础知识


Nginx是什么?

Nginx是一个 Web 服务器,也可以用作 反向代理,负载均衡器 和 HTTP 缓存。

我最开始使用 nginx 的时候就是用它来做反向代理,不过我用的是 tcp 负载均衡。


Nginx可以提供的服务

web 服务.

负载均衡 (反向代理)

web cache(web 缓存)

其中 web 服务和 web 缓存的使用我都将一笔带过,有所取舍嘛。不过如果在架构中遇到的话我还是要讲上一讲的。


配置nginx

点击前往

不是本篇重点,一笔带过。


正向代理与反向代理

需要在客户端配置代理服务器进行指定网站访问,通过代理服务器来访问服务器的过程 就叫 正向代理。

可以想一下爬虫。

反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问。

我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。


负载均衡

增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡。


动静分离

为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。


关于配置文件这里先不讲,下一篇再说。


深入一点


nginx -s reload 过程

平滑处理,有必要了解一下。好多地方都出现过平滑处理,不知道 nginx 的是哪种方式呢。像 redis 那种数据库的一致性,记不住记不住啊。

nginx主进程读取配置文件,如果发现配置文件变更,会创建一个新的主进程,然后同时旧的进程,及旧的子进程关闭,旧进程会拒绝新的连接,服务到自己的连接结束,然后关闭。

原来是跟共享内存一个样的处理方式啊。


Nginx epoll 模型

(Apache select模型),题外话题外话。

Nginx高并发得益于其采用了 epoll 模型。

epoll,求知者离我近点,基础,小白,上手。

再探epoll,深入epoll,涉及源码,小白慎入。


Nginx 进程模型

Nginx启动后以daemon的方式在后台运行,后台进程包含一个master进程和多个worker进程:

在这里插入图片描述

上面那张图信息不多,入门看看刚好,我们再看一张图:

在这里插入图片描述

主进程并不处理网络请求,主要负责调度工作进程,也就是图示的 3 项:加载配置、启动工作进程 及 平滑升级。所以,Nginx 启动以后,查看操作系统的进程列表,我们就能看到至少有两个 Nginx 进程。

服务器实际处理网络请求及响应的是工作进程(worker),在类 unix 系统上,Nginx 可以配置多个 worker,而每个 worker 进程都可以同时处理数以千计的网络请求。

再深入的实现等到后面几篇看源码了再说。

master 提供服务

加载配置;

启动工作进程;

监控工作进程的运行状态;

当工作进程退出后(异常情况下),会自动重新启动新的工作进程;

平滑升级。

worker提供服务

主要用来处理基本的网络事件。

多个worker进程之间是对等且相互独立的,他们同等竞争来自客户端的请求,一个请求,只可能在一个worker进程中处理。

worker进程的个数是可以设置的,一般我们会设置与机器cpu核数一致。更多的worker数,只会导致进程来竞争cpu资源了,从而带来不必要的上下文切换。而且,nginx为了更好的利用多核特性,具有cpu绑定选项,我们可以将某一个进程绑定在某一个核上,这样就不会因为进程的切换带来cache的失效。

master-workers 的机制的好处

对于每个worker进程来说,独立的进程无需加锁,省掉了锁带来的开销,同时在编程及问题查找时,也方便很多。其次,独立的进程可让相互间不会影响,一个进程退出后,其它进程还在工作,服务不会中断,master进程则很快启动新的worker进程,这也是Nginx高效的另个原因。


关于这个连接数问题后边再说吧。


再深入一点


nginx 启动后,在 unix 系统中会以 daemon 方式在后台运行,后台进程包含个master进程和多个 worker 进程。当然 nginx 也是支持多线程的方式的,只是主流方式还是多进程方式,也是nginx默认方式。

Nginx 进程模型

(1)首先,每个 worker 进程都是从 master 进程 fork 过来,在 master 进程里面,先建立好需要 listen 的监听套接字之后,然后再 fork 出多个 worker 进程。

(2)所有 worker 进程的 listenfd 会在新连接到来时变得可读,为保证只有一个进程处理该连接,所有 worker 进程会在注册 listenfd 读事件前抢 accept_mutex,抢到互斥锁的那个进程注册 listenfd 读事件,然后在读事件里调用 accept 接受该连接。(解决惊群)

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
707716)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值