分布式
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服务处理,也可以作为代理服务器使用。
它不像传统服务器那样使用线程处理请求,而是采用事件驱动机制————一种异步事件驱动结构。
我们在这里可以梳理下服务器的类型:
- Web服务器:提供Http的访问,例如Nginx,Apache,IIS等。虽然Tomcat也能够实现,但并不是TOmcat的主要功能,而且性能也远远不如专门的web服务器。
- 应用程序服务器:能够用于应用程序的运行。
- 代理服务器:代理服务器通常是客户端访问的一种行为,在整个客户端访问服务器的过程中有着重要的作用。
- 反向代理
- 后台服务器
- CDN缓存服务器:属于缓存服务器,而且是反向代理的应用,在网站部署的时候,是一种解决远距离访问的策略。
参考:
《Nginx初探》
3. 正向代理和反向代理.
3.1 正向代理
正向代理类似一个跳板机,用于代替用于访问外部资源,再把访问结果返回给用户。
对于服务器而言,只会接到代理服务器的Request请求,它并不知道这是真正用户的请求,也并不知道这是代理的访问,代理在这里扮演的是客户端的角色。
对于客户端而言,必须设置正向代理服务器,要知道正向代理服务器的IP地址和代理程序的端口,对它而言代理扮演的是服务器的角色,它是作用于客户端的。
3.2 反向代理
反向代理与正想代理相反。对于客户端而言代理服务器是原始服务器,而且客户端不需要像正向代理那样进行任何特殊的设置。客户端向反向代理的命名空间(namespace)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端。
客户是无法感知代理的蹲在的。它对外都是透明的。它可以保证内网的安全,大型网站通常将反向代理作为公网访问地址,而Web服务器则是内网。同时它也能优化网站的负载,也就是负载均衡。
4. Nginx几种常见的负载均衡策略
Nginx可以根据客户端IP进行负载均衡。在upstream设置ip_hash,就可以在C类地址段中的客户端选择同一个后端服务器,除服此服务器宕机。
Nginx目前支持5中分配方式
- 轮询(默认方式)
每个请求按照时间顺序注意分配到不同的后端服务器,如果后端服务器宕机,则自动剔除。 - 指定权重
指定轮询几率,weight和访问比率成正比。可以用于后端服务器性能不一的情况。 - IP绑定ip_hash
每个请求按照访问ip的hash结果分配,这样每个方可固定访问到一个后端服务器,这样可以解决session问题。 - fair(第三方)
按照后端服务器的响应时间来分配请求,响应时间短的优先分配。 - url_hash(第三方)
按照访问url的hash结果来分配请求,使每一个url定向到同一个后端服务器。后端服务器如果为缓存时比较有效。
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 作为一个屏障来在一定程度上保护网站的安全