程序员人生 网站导航

使用Nginx负载均衡搭建高性能.NETweb应用程序一

栏目:框架设计时间:2015-01-04 08:54:19
1、遇到的问题

       当我们用IIS服务器部署了1个web利用以后,当很多用户高并发访问的时候,客户端响应就会很慢,客户的体验就会很差,由于IIS接遭到客户端要求的时候,就会创建1个线程,当线程到达几千个时候,这些线程就会占用较大内存,同时由于这些线程要进行切换,所以CPU占用也会比较高,这样IIS性能就很难提高了。那末如何解决这个问题呢?


2、如何解决高并提问题

        为了解决这个高并发的问题,我们就需要进行负载均衡。我们可以在架构上通过硬件和软件来解决负载均衡,硬件层面可使用负载均衡器,1般而言,硬件负载均衡在功能、性能上优于软件方式,不过本钱昂贵,常见的硬件负载均衡有F5,A10等品牌,这些硬件负载均衡在大型公司都被经常使用,另外一方面,我们要从软件层面进行负载均衡,经常使用LVS,Ngnix等负载均衡服务器


3、Ngnix是甚么?

        Nginx是1个高性能的HTTP和反向代理服务器,也是1个IMAP/POP3/SMTP代理服务器,那末甚么是反向代理服务器呢?在服务器段接受客户真个要求,然后把要求分发给具体的服务器处理,然后再将其服务器的响应反馈结果发给客户端,例如当用户在地址栏输入:www.baidu.com,这时候候阅读器会构建1个要求报文要求发送给Nginx服务器,然后Nginx把所有的要求发送给我们的IIS服务器,IIS服务器处理后把结果发送给Nginx,Nginx服务器将最后的结果发送给客户端阅读器。代理服务器相当于网络的中间实体,代理服务器既是web服务器,又是web客户端。因此引出1个名词:正向代理服务器,正向代理服务器是为了从原始服务器获得内容,客户端向代理服务器发送1个要求,并指定原始服务器的IP和端口,然后代理服务器向原始服务器专家要求并获得内容,并将结果反馈给客户端,因此客户端需要进行设置才能使用正向代理。下图所示。


4、Nginx 优点:
        跨平台:Linux,Unix,也有windows的移植版本,固然在Linux上部署肯定是最好的,但是我们可以在windows上使用其移植版本。
        配置异常简单
   非阻塞,高并发连接,官方测试能够支持5万并发,
  事件驱动:通讯机制采取epoll,当事件没有转备好时,就放入队列中,准备好了才去处理。
       master/worker结构:1个master进程来管理多个worker进程,和Arcig的SOM,SOC结构类似,当Ngnix启动,就会根据我们配置的信息,1般我设置与机器cpu核1致,启动其woker进程,每一个worker之间是对等关系,即他们都能够处理客户端来发的要求,所以这就触及到1个锁问题,同时我们可以用不用暂停系统,直接修改了配置文件后,可以重启Nginx,缘由是由于master接遭到命令 reload以后,就会重新加载配置文件,然后启动新的进程,并告知所有的老的worker,处理完所有的要求后就退出。另外,我们可以体会下这类模型的有点,就是当1个woker出现问题退出了,不会造成系统没法使用,其他的还是可以正常使用。
        内存消耗少:处理大并发要求内存消耗少,在3wan并发连接下,10个进程才消耗150M内存。
       内置监控检查功能:当后台某个web服务器宕机(挂了)时候,不影响前端访问。它是通过后台服务器反馈的状态码(500,404之类的来判断的)
       节省带宽:支持GZIP紧缩。

       稳定性高


5、Ngnix如何处理1个要求?
      当Nginx启动时,先会解析我们配置的文件,得到监听的端口和Ip地址,master进程就会初始化这个建库的socket通讯,然后再fork,master调用fork函数创建1个新的进程,由fork创建的新进程被称为子进程,然后这些worker会竞争去接受的新的连接,此时客户端就能够向Nginx发起连接了,当客户端与Nginx进行3次握手,与Nginx建立了1个连接后,此时1个子进程worker会连接成功,然后得到这个建立好的连接socket,然后Nginx对连接的封装,读写处理,最后,Nginx主动关闭连接。
      Nginx在实现时,是通过1个连接池来管理的,每一个worker进程都有1个独立的连接池,连接池的大小是worker_connections。这里的连接池里面保存的其实不是真实的连接,它只是1个worker_connections大小的1个ngx_connection_t结构的数组。并且,nginx会通过1个链表free_connections来保存所有的空闲ngx_connection_t,每次获得1个连接时,就从空闲连接链表中获得1个,用完后,再放回空闲连接链表里面。 这个值是表示每一个worker进程所能建立连接的最大值,所以,1个nginx能建立的最大连接数,应当是worker_connections * worker_processes。由于反向服务器要占用2个连接,最大并发数量应当是worker_connections * worker_processes/2。
------分隔线----------------------------
------分隔线----------------------------

最新技术推荐