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

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!
或者说,如果写成了系列,那么这篇就会有名字了。

基础知识


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 接受该连接。(解决惊群)

总结

阿里伤透我心,疯狂复习刷题,终于喜提offer 哈哈~好啦,不闲扯了

image

1、JAVA面试核心知识整理(PDF):包含JVMJAVA集合JAVA多线程并发,JAVA基础,Spring原理微服务,Netty与RPC,网络,日志,ZookeeperKafkaRabbitMQ,Hbase,MongoDB,Cassandra,设计模式负载均衡数据库一致性哈希JAVA算法数据结构,加密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算共30个章节。

image

2、Redis学习笔记及学习思维脑图

image

3、数据面试必备20题+数据库性能优化的21个最佳实践

image
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!
章节。

[外链图片转存中…(img-6SKPIph3-1714643222913)]

2、Redis学习笔记及学习思维脑图

[外链图片转存中…(img-1PrN7nws-1714643222913)]

3、数据面试必备20题+数据库性能优化的21个最佳实践

[外链图片转存中…(img-Ovx3zX76-1714643222914)]
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值