一、遇到的问题

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

二、如何解决高并发问题

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

三、Ngnix是什么?

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

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

稳定性高

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

2014-12-04 14:35 7410人阅读 评论(4) 收藏 举报
 分类:
ASP.NET(19)  软件部署维护(3) 

版权声明:本文为博主原创文章,未经博主允许不得转载。

在文章《使用Nginx负载均衡搭建高性能.NETweb应用程序一》中,让我们对Nginx有了一个初步认识,下面我们将在windows平台下面使用Nginx演示集群部署我们的web应用。

一、下载Nginx部署包

到Nginx官网去下载一个windows平台下面的Nginx部署包,目前我下载的是一个nginx-1.6.2版本的。

二、命令启动服务
启动:start nginx.exe
停止:nginx -s stop

重新加载: nginx -s reload

三、实例搭建
首选:我们要在我们的iis上面把我们做好的web应用部署上去,部署到不同的机器上面,设置好对应的ip和端口号,因为我在本机模拟出效果,所以我就在本机的iis上面部署了2个web应用,第一个web应用部署在localhost:8011端口,第二个应用部署为localhost:8012端口,同时为了看到演示效果,我们把里面的WebForm1.aspx页面做了一个标记,里面标记为:第几个web应用程序的页面,实际我们部署系统,不需要这样做,就是把我们的一个web应用部署到不同机器上面的服务器上,下面所示。

web应用1地址:http://localhost:8011/WebForm1.aspx
web应用2地址:http://localhost:8012/WebForm1.aspx

(1)启动Nginx服务

(2)修改Nginx配置项,具体配置说明,我们在参数设置部门说明,然后验证服务是否正常启动。

(3)访问地址http://localhost:8010/WebForm1.aspx观察结果

(4)这样我们就可以模拟出负载均衡效果了,ok

四、其他说明

(1)配置域名访问:首先我们要在Nginx中添加域名设置,其次我们要在本机设置127.0.0.1映射为域名

这样我们就可以这样访问了:http://huangxiang:8010/WebForm1.aspx

(2)配置Ngnix启动的进程数量,我们可以在进程中关注其进程数量变化

 

五、参数设置

  1. #定义Nginx运行的用户和用户组
  2. #user  nobody;
  3. #Nginx进程数,建议和cpu总内核一致
  4. worker_processes  2;
  5. #error_log  logs/error.log;
  6. #error_log  logs/error.log  notice;
  7. #error_log  logs/error.log  info;
  8. #pid        logs/nginx.pid;
  9. events {
  10. #定义单个进程的最大连接数(实际最大连接数要除以2)
  11. worker_connections  1024;
  12. }
  13. #定义http服务器
  14. http {
  15. include       mime.types;#定义文件扩展名和文件类型映射表
  16. default_type  application/octet-stream;
  17. #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
  18. #                  '$status $body_bytes_sent "$http_referer" '
  19. #                  '"$http_user_agent" "$http_x_forwarded_for"';
  20. #access_log  logs/access.log  main;
  21. sendfile        on;
  22. #tcp_nopush     on;
  23. #keepalive_timeout  0;
  24. keepalive_timeout  65;
  25. #gzip  on;
  26. #服务器的集群
  27. upstream  huangxiang.com {  #服务器集群名字
  28. #server   172.16.21.13:8081 weight=1;#服务器配置   weight是权重的意思,权重越大,分配的概率越大。
  29. #server   192.168.1.186:8081 weight=1;
  30. #server   172.16.1.14:8081 weight=2;
  31. #server   172.16.1.15:8081 weight=1;
  32. #server   172.16.1.15:80 weight=1;
  33. server    127.0.0.1:8011 weight=1;
  34. server    127.0.0.1:8012 weight=2;
  35. }
  36. #虚拟机主机配置
  37. server {
  38. listen       8010;#端口号
  39. server_name  localhost huangxiang.com;#域名可以有多个,多个用空格分开
  40. #charset koi8-r;
  41. #access_log  logs/host.access.log  main;
  42. #location / {
  43. #    root   html;
  44. #    index  index.html index.htm;
  45. #}
  46. location / {
  47. proxy_pass http://huangxiang.com;
  48. proxy_redirect default;
  49. }
  50. #error_page  404              /404.html;
  51. # redirect server error pages to the static page /50x.html
  52. #
  53. error_page   500 502 503 504  /50x.html;
  54. location = /50x.html {
  55. root   html;
  56. }
  57. # proxy the PHP scripts to Apache listening on 127.0.0.1:80
  58. #
  59. #location ~ \.php$ {
  60. #    proxy_pass   http://127.0.0.1;
  61. #}
  62. # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  63. #
  64. #location ~ \.php$ {
  65. #    root           html;
  66. #    fastcgi_pass   127.0.0.1:9000;
  67. #    fastcgi_index  index.php;
  68. #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
  69. #    include        fastcgi_params;
  70. #}
  71. # deny access to .htaccess files, if Apache's document root
  72. # concurs with nginx's one
  73. #
  74. #location ~ /\.ht {
  75. #    deny  all;
  76. #}
  77. }
  78. # another virtual host using mix of IP-, name-, and port-based configuration
  79. #
  80. #server {
  81. #    listen       8000;
  82. #    listen       somename:8080;
  83. #    server_name  somename  alias  another.alias;
  84. #    location / {
  85. #        root   html;
  86. #        index  index.html index.htm;
  87. #    }
  88. #}
  89. # HTTPS server
  90. #
  91. #server {
  92. #    listen       443 ssl;
  93. #    server_name  localhost;
  94. #    ssl_certificate      cert.pem;
  95. #    ssl_certificate_key  cert.key;
  96. #    ssl_session_cache    shared:SSL:1m;
  97. #    ssl_session_timeout  5m;
  98. #    ssl_ciphers  HIGH:!aNULL:!MD5;
  99. #    ssl_prefer_server_ciphers  on;
  100. #    location / {
  101. #        root   html;
  102. #        index  index.html index.htm;
  103. #    }
  104. #}
  105. }
 

使用Nginx负载均衡搭建高性能.NETweb应用程序(转)的更多相关文章

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

    在文章<使用Nginx负载均衡搭建高性能.NETweb应用程序一>中,让我们对Nginx有了一个初步认识,下面我们将在windows平台下面使用Nginx演示集群部署我们的web应用. 一 ...

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

    一.遇到的问题 当我们用IIS服务器部署了一个web应用以后,当很多用户高并发访问的时候,客户端响应就会很慢,客户的体验就会很差,由于IIS接受到客户端请求的 时候,就会创建一个线程,当线程达到几千个 ...

  3. Nginx负载均衡搭建(Window与Linux)

    windows上搭建nginx负载均衡 1.准备几台http服务器软件,这里选用一台apache一台tomcat apache(windows)下载链接:https://www.apachehaus. ...

  4. Nginx 负载均衡搭建

    配置文件Nginx/conf/nginx.conf 什么是负载均衡呢? 由于目前现有网络的各个核心部分随着业务量的提高,访问量和数据流量的快速增长,其处理能力和计算强度也相应地增大,使得单一的服务器设 ...

  5. linux下nginx负载均衡搭建

    [一.Nginx能做什么] 1.http服务器.Nginx是一个http服务可以独立提供http服务.可以做网页静态服务器. 2.虚拟主机.可以实现在一台服务器虚拟出多个网站.例如个人网路使用的虚拟主 ...

  6. [例子] nginx负载均衡搭建及测试

    一.Nginx + Tomcat 负载均衡测试(负载均衡+部分静态图片处理) 环境说明:  nginx+tomcat @ubuntu ok 首先你得有一个Ubuntu或者什么其他的linux. 安装j ...

  7. nginx负载均衡搭建phpmyadmin加入redis了解session会话原理

    myphpadmin项目理解cookie和session 当我们平时上网的时候,在刷新之后或者退出浏览器再次打开浏览器不需要登陆网页了,这就是利用了cookie和session: 环境配置 hostn ...

  8. Centos7 minimal 系列之Nginx负载均衡搭建(四)

    一.Nginx搭建请参考我的上篇文章 http://www.cnblogs.com/WJ--NET/p/8143899.html 二.在IIS上搭建2个网站 三.配置nginx 虚拟机和主机网络互通请 ...

  9. Nginx系列一:正向代理和反向代理、Nginx工作原理、Nginx常用命令和升级、搭建Nginx负载均衡

    转自https://www.cnblogs.com/leeSmall/p/9351343.html 仅供个人学习 一.什么是正向代理.什么是反向代理 1. 正向代理,意思是一个位于客户端和原始服务器( ...

随机推荐

  1. 在阅读sqlmap源码时学到的知识--检查运行环境

    最近在读sqlmap的源码,懵懵懂懂中页大约学到了一些知识(说给自己听的话:由此可见,所谓的能够解决所有遇到问题的python水平,只能说明你遇见的都是简单的需求....),老规矩,在这里写一下,一则 ...

  2. HDU 4685 Prince and Princess (2013多校8 1010题 二分匹配+强连通)

    Prince and Princess Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Othe ...

  3. Constant-on-time buck-boost regulator converts a positive input to a negative output

    Buck regulators find wide application as step-down regulators for converting large positive input vo ...

  4. sqlserver获取指定数据库的描述

    SELECT 字段名= convert(varchar(100), a.name), 表名= convert(varchar(50), d.name ), 类型= CONVERT(varchar(50 ...

  5. XmlnsDefinitionAttribute Is Pretty Nifty

    When we want to declaratively use our custom controls or reference the types we defined in XAML, we ...

  6. linux 编译win32程序

    apt-get install mingw32 int main(int argc, char *argv) { printf("Windows Compiler Test\n") ...

  7. Android 4.4 KitKat升级率已经接近18%(2014-07-09 07:29)

    腾讯数码讯(编 译:张秀梅)按照惯例, 每个月的第一个星期的星期一谷歌都会发布最新一期Android版本分布图.从去年十月末谷歌发布Android 4.4 KitKat以来,截止到目前为止Androi ...

  8. GIF 屏幕录制工具

    LICEcap是一款屏幕录制工具,支持导出 GIF 动绘图片格式,轻量级.使用简单,录制过程中能够任意改变录屏范围.             .捕捉屏幕的区域并保存为.GIF动画(便于网络公布)或.L ...

  9. Tomcat服务器优化

    由于Tomcat的运行依赖于JVM,从虚拟机的角度我们把Tomcat的调整分为外部环境调优和自身调优两类来描述. 1.JDK内存优化 根据服务器物理内容情况配置相关参数优化tomcat性能.当应用程序 ...

  10. EasyUI datagrid 明细表格中编辑框 事件绑定 及灵活计算 可根据此思路 扩展其他

    原创 : EasyUI datagrid 明细表格中编辑框 事件绑定 及灵活计算 可根据此思路 扩展其他 转载,请注明出处哦!谢谢! 原创 : EasyUI datagrid 明细表格中编辑框 事件绑 ...