关于nginx的五⼤⾯试题
1.什么是,它的优势和功能?
Nginx是⼀个⾼性能的 和 反向代理 服务器,也是⼀个 IMAP/POP3/SMTP 代理服务器。因它的稳定性、丰富的功能集、⽰例配置⽂件和低系统资源的消耗⽽闻名。2011年6⽉1⽇,nginx 1.0.4发布。
优点:
(1)更快
这表现在两个⽅⾯:⼀⽅⾯,在正常情况下,单次请求会得到更快的响应;另⼀⽅⾯,在⾼峰期(如有数以万计的请求),Nginx可以⽐其他Web服务器更快地响应请求。
(2)⾼扩展性,跨平台
Nginx的设计极具扩展性,它完全是由多个不同功能、不同层次、不同类型且耦合度极低的模块组成。因此,当对某⼀个模块修复Bug或进⾏升级时,可以专注于模块⾃⾝,⽆须在意其他。⽽且在HTTP模块中,还设计了HTTP过滤器模块:⼀个正常的HTTP模块在处理完请求后,会有⼀串HTTP过滤器模块对请求的结果进⾏再处理。这样,当我们开发⼀个新的HTTP模块时,不但可以使⽤诸如HTTP核⼼模块、
events模块、log模块等不同层次或者不同类型的模块,还可以原封不动地复⽤⼤量已有的HTTP过滤器模块。这种低耦合度的优秀设计,造就了Nginx庞⼤的第三⽅模块,当然,公开的第三⽅模块也如官⽅发布的模块⼀样容易使⽤。
Nginx的模块都是嵌⼊到⼆进制⽂件中执⾏的,⽆论官⽅发布的模块还是第三⽅模块都是如此。这使得第三⽅模块⼀样具备极其优秀的性能,充分利⽤Nginx的⾼并发特性,因此,许多⾼流量的⽹站都倾向于开发符合⾃⼰业务特性的定制模块。
(3)⾼可靠性:⽤于,宕机的概率微乎其微
⾼可靠性是我们选择Nginx的最基本条件,因为Nginx的可靠性是⼤家有⽬共睹的,很多家⾼流量⽹站都在核⼼服务器上⼤规模使⽤Nginx。Nginx的⾼可靠性来⾃于其核⼼框架代码的优秀设计、模块设计的简单性;另外,官⽅提供的常⽤模块都⾮常稳定,每个worker进程相对独⽴,master进程在1个worker进程出错时可以快速“拉起”新的worker⼦进程提供服务。
(4)低内存消耗
⼀般情况下,10 000个⾮活跃的HTTP Keep-Alive连接在Nginx中仅消耗2.5MB的内存,这是Nginx⽀持⾼并发连接的基础。
(5)单机⽀持10万以上的并发连接
这是⼀个⾮常重要的特性!随着互联⽹的迅猛发展和互联⽹⽤户数量的成倍增长,各⼤公司、⽹站都需要应付海量并发请求,⼀个能够在峰值期顶住10万以上并发请求的Server,⽆疑会得到⼤家的青睐。理论上,Nginx⽀持的并发连接上限取决于内存,10万远未封顶。当然,能够及时地处理更多的并发请求,是与业务特点紧密相关的。
(6)热部署
master管理进程与worker⼯作进程的分离设计,使得Nginx能够提供热部署功能,即可以在7×24⼩时不间断服务的前提下,升级Nginx 的可执⾏⽂件。当然,它也⽀持不停⽌服务就更新配置项、更换⽇志⽂件等功能。
(7)最⾃由的BSD许可协议
这是Nginx可以快速发展的强⼤动⼒。BSD许可协议不只是允许⽤户免费使⽤Nginx,它还允许⽤户在⾃⼰的项⽬中直接使⽤或修改Nginx 源码,然后发布。这吸引了⽆数开发者继续为Nginx贡献⾃⼰的智慧。
以上7个特点当然不是Nginx的全部,拥有⽆数个官⽅功能模块、第三⽅功能模块使得Nginx能够满⾜绝
⼤部分应⽤场景,这些功能模块间可以叠加以实现更加强⼤、复杂的功能,有些模块还⽀持Nginx与Perl、Lua等脚本语⾔集成⼯作,⼤⼤提⾼了开发效率。这些特点促使⽤户在寻⼀个Web服务器时更多考虑Nginx。
选择Nginx的核⼼理由还是它能在⽀持⾼并发请求的同时保持⾼效的服务
1、round-robin
round-robin的意思是循环轮询。Nginx最简单的负载均衡配置如下:
http {undefined
}
2、least-connected
least-connected算法的中⽂翻译是最少连接,即每次都连接数最少的服务器来转发请求。例如Nginx负载中有两台服务器,A和B,当Nginx接收到⼀个请求时,A正在处理的请求数是10,B正在处理的请
求数是20,则Nginx会把当前请求交给A来处理。要启⽤最少连接负载算法只需要在定义服务器组时加上“least_conn”,如:
3、ip-hash
ip-hash算法会根据请求的客户端IP地址来决定当前请求应该交给谁。使⽤ip-hash算法时Nginx会确保来⾃同⼀客户端的请求都分发到同⼀服务器。要使⽤ip-hash算法时只需要在定义服务器组时加上“ip-hash ”指令,如:upstream app1 {    server 10.10.10.1;    server 10.10.10.2;}server {    listen 80;    location / {        proxy_pass app1;    }}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1819
20
21
22
23    upstream app1⽤来指定⼀个服务器组,该组的名字是app1,包含两台服务器。在指定服务器组⾥⾯包含的服务器时以形式“server ip/domain :port”的形式指
1upstream app1 {              least_conn;    server 10.10.10.1;    server 10.10.10.2;}
1
2
3
4
5
6
7
8
9upstream app1 {              ip_hash;    server 10.10.10.1;    server 10.10.10.2;}
1
2
3
4
5
6
7
8
9
4、weighted
weighted算法也就是权重算法,会根据每个服务的权重来分发请求,权重⼤的请求相对会多分发⼀点,权重⼩的会少分发⼀点。这通常应⽤于多个服务器的性能不⼀致时。需要使⽤权重算法时只需要在定义服务器组时在服务器后⾯指定参数weight,如:
3.、为什么不使⽤多线程?
Apache: 创建多个进程或线程,⽽每个进程或线程都会为其分配cpu和内存(线程要⽐进程⼩的多,所以worker⽀持⽐perfork⾼的并发),并发过⼤会榨⼲服务器资源。
Nginx: 采⽤单线程来异步⾮阻塞处理请求(管理员可以配置Nginx主进程的⼯作进程的数量)(epoll),不会为每个请求分配cpu和内存资源,节省了⼤量资源,同时也减少了⼤量的CPU的上下⽂切换。所以才使得Nginx⽀持更⾼的并发。
4、Nginx是如何处理⼀个请求的呢?
⾸先,nginx在启动时,会解析配置⽂件,得到需要监听的端⼝与ip地址,然后在nginx的master进程⾥⾯
五大编程app
先初始化好这个监控的socket,再进⾏listen
然后再fork出多个⼦进程出来, ⼦进程会竞争accept新的连接。
此时,客户端就可以向nginx发起连接了。当客户端与nginx进⾏三次握⼿,与nginx建⽴好⼀个连接后,此时,某⼀个⼦进程会accept成功,然后创建nginx对连接的封装,即ngx_connection_t结构体接着,根据事件调⽤相应的事件处理模块,如http模块与客户端进⾏数据的交换,最后,nginx或客户端来主动关掉连接,到此,⼀个连接就寿终正寝了
五、动态资源、静态资源分离的原因
动态资源、静态资源分离是让动态⽹站⾥的动态⽹页根据⼀定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是⽹站静态化处理的核⼼思路
动态资源、静态资源分离简单的概括是:动态⽂件与静态⽂件的分离
⼆者分离的原因
在我们的软件开发中,有些请求是需要后台处理的(如:.jsp,.do等等),有些请求是不需要经过后台处理的(如:css、html、jpg、js等等⽂件)
这些不需要经过后台处理的⽂件称为静态⽂件,否则动态⽂件。因此我们后台处理忽略静态⽂件。这会有⼈⼜说那我后台忽略静态⽂件不就完了吗
当然这是可以的,但是这样后台的请求次数就明显增多了。在我们对资源的响应速度有要求的时候,我们应该使⽤这种动静分离的策略去解决
动、静分离将⽹站静态资源(HTML,JavaScript,CSS,img等⽂件)与后台应⽤分开部署,提⾼⽤户访问静态代码的速度,降低对后台应⽤访问
这⾥我们将静态资源放到nginx中,动态资源转发到tomcat服务器中upstream app1 {    server 10.10.10.1 weight=3;    server 10.10.10.2;}
1
2
3
4
5
6
7

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。