Nginx

分布式

Nginx

1. 请解释什么是C10K问题或者知道什么是C10K问题吗?

在1999年,Dan Kegel向网络服务器提出了一个难题

是时候让网络服务器去同时应对10k个客户端了。你觉得呢?毕竟网络已经变得很普及了。

通过改善操作系统内核和从像Apache那样的线程服务器迁移到像Nginx,Node这样的时间驱动服务器,C10K问题已经被解决了。现在我们更需要考虑的问题是,如何同时应对一千万个连接?

参考:
《10K 问题的解决:一个系统管理员如何管理 2000x 台服务器》

2. Nginx简介

相对于大家熟知的ApplicationServe服务器Tomcat,作为HttpServer的Nginx是一款自由的,开源的,高性能Http服务器和反向代理服务器。也是一个IMAP,POP3,SMTP代理服务器。Nginx本身就可以类似Tomcat一样托管网站,进行Http服务处理,也可以作为代理服务器使用。

它不像传统服务器那样使用线程处理请求,而是采用事件驱动机制————一种异步事件驱动结构。

我们在这里可以梳理下服务器的类型:

  1. Web服务器:提供Http的访问,例如Nginx,Apache,IIS等。虽然Tomcat也能够实现,但并不是TOmcat的主要功能,而且性能也远远不如专门的web服务器。
  2. 应用程序服务器:能够用于应用程序的运行。
  3. 代理服务器:代理服务器通常是客户端访问的一种行为,在整个客户端访问服务器的过程中有着重要的作用。
  4. 反向代理
  5. 后台服务器
  6. CDN缓存服务器:属于缓存服务器,而且是反向代理的应用,在网站部署的时候,是一种解决远距离访问的策略。

参考:
《Nginx初探》

3. 正向代理和反向代理.

3.1 正向代理
正向代理类似一个跳板机,用于代替用于访问外部资源,再把访问结果返回给用户。
对于服务器而言,只会接到代理服务器的Request请求,它并不知道这是真正用户的请求,也并不知道这是代理的访问,代理在这里扮演的是客户端的角色。
对于客户端而言,必须设置正向代理服务器,要知道正向代理服务器的IP地址和代理程序的端口,对它而言代理扮演的是服务器的角色,它是作用于客户端的。

3.2 反向代理

反向代理与正想代理相反。对于客户端而言代理服务器是原始服务器,而且客户端不需要像正向代理那样进行任何特殊的设置。客户端向反向代理的命名空间(namespace)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端。
客户是无法感知代理的蹲在的。它对外都是透明的。它可以保证内网的安全,大型网站通常将反向代理作为公网访问地址,而Web服务器则是内网。同时它也能优化网站的负载,也就是负载均衡。

参考:
《正向代理与反向代理【总结】》
《Nginx初探》

4. Nginx几种常见的负载均衡策略

Nginx可以根据客户端IP进行负载均衡。在upstream设置ip_hash,就可以在C类地址段中的客户端选择同一个后端服务器,除服此服务器宕机。
Nginx目前支持5中分配方式

  1. 轮询(默认方式)
    每个请求按照时间顺序注意分配到不同的后端服务器,如果后端服务器宕机,则自动剔除。
  2. 指定权重
    指定轮询几率,weight和访问比率成正比。可以用于后端服务器性能不一的情况。
  3. IP绑定ip_hash
    每个请求按照访问ip的hash结果分配,这样每个方可固定访问到一个后端服务器,这样可以解决session问题。
  4. fair(第三方)
    按照后端服务器的响应时间来分配请求,响应时间短的优先分配。
  5. url_hash(第三方)
    按照访问url的hash结果来分配请求,使每一个url定向到同一个后端服务器。后端服务器如果为缓存时比较有效。

参考:
《nginx负载均衡的5种策略(转载)》

5. Nginx服务器上的Master和Worker进程分别是什么

Nginx是采用多进程的方式来工作的。当然Nginx也是支持多线程的方式的。只是我们主流的方式还是多进程的方式,也是Nginx的默认方式。

Nginx启动后,会有一个master进程和多个worker进程。
master进程用来管理worker进程,它接收来自外界的信号,向各worker进程发送信号,监控worker进程的运行状态。当worker进程在异常情况下退出后,会自动重新启动新的worker进程。
worker进程会处理基本的网络事件。多个worker进程之间是对等的,它们同等竞争来自客户端的请求,各进程之间是独立的。一个请求只能在一个worker进程中处理,而一个worker进程不可能处理其他进程的请求。
worker进程的个数是可以设置的。一般会设置为与机器CPU核数一致,这是因为Nginx的进程模型和处理模型。

参考:
《Nginx初探》

6. 使用“反向代理服务器”的优点是什么?

6.1 负载均衡
在集群环境下,Nginx可以支持负载均衡,使网站获得更好的性能和稳定性。他有多种负载均衡策略,可以根据具体业务环境和硬件配置进行较为灵活的改变,从而实现分流与负载均衡。

6.2 作为一个屏障来在一定程度上保护网站的安全

参考:
《Nginx 反向代理为什么可以提高网站性能?》

你可能感兴趣的:(Nginx)