使用Nginx负载均衡搭建高性能.NETweb应用程序(转)
一、遇到的问题
当我们用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。
版权声明:本文为博主原创文章,未经博主允许不得转载。
在文章《使用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启动的进程数量,我们可以在进程中关注其进程数量变化
五、参数设置
- #定义Nginx运行的用户和用户组
- #user nobody;
- #Nginx进程数,建议和cpu总内核一致
- worker_processes 2;
- #error_log logs/error.log;
- #error_log logs/error.log notice;
- #error_log logs/error.log info;
- #pid logs/nginx.pid;
- events {
- #定义单个进程的最大连接数(实际最大连接数要除以2)
- worker_connections 1024;
- }
- #定义http服务器
- http {
- include mime.types;#定义文件扩展名和文件类型映射表
- default_type application/octet-stream;
- #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
- # '$status $body_bytes_sent "$http_referer" '
- # '"$http_user_agent" "$http_x_forwarded_for"';
- #access_log logs/access.log main;
- sendfile on;
- #tcp_nopush on;
- #keepalive_timeout 0;
- keepalive_timeout 65;
- #gzip on;
- #服务器的集群
- upstream huangxiang.com { #服务器集群名字
- #server 172.16.21.13:8081 weight=1;#服务器配置 weight是权重的意思,权重越大,分配的概率越大。
- #server 192.168.1.186:8081 weight=1;
- #server 172.16.1.14:8081 weight=2;
- #server 172.16.1.15:8081 weight=1;
- #server 172.16.1.15:80 weight=1;
- server 127.0.0.1:8011 weight=1;
- server 127.0.0.1:8012 weight=2;
- }
- #虚拟机主机配置
- server {
- listen 8010;#端口号
- server_name localhost huangxiang.com;#域名可以有多个,多个用空格分开
- #charset koi8-r;
- #access_log logs/host.access.log main;
- #location / {
- # root html;
- # index index.html index.htm;
- #}
- location / {
- proxy_pass http://huangxiang.com;
- proxy_redirect default;
- }
- #error_page 404 /404.html;
- # redirect server error pages to the static page /50x.html
- #
- error_page 500 502 503 504 /50x.html;
- location = /50x.html {
- root html;
- }
- # proxy the PHP scripts to Apache listening on 127.0.0.1:80
- #
- #location ~ \.php$ {
- # proxy_pass http://127.0.0.1;
- #}
- # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
- #
- #location ~ \.php$ {
- # root html;
- # fastcgi_pass 127.0.0.1:9000;
- # fastcgi_index index.php;
- # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
- # include fastcgi_params;
- #}
- # deny access to .htaccess files, if Apache's document root
- # concurs with nginx's one
- #
- #location ~ /\.ht {
- # deny all;
- #}
- }
- # another virtual host using mix of IP-, name-, and port-based configuration
- #
- #server {
- # listen 8000;
- # listen somename:8080;
- # server_name somename alias another.alias;
- # location / {
- # root html;
- # index index.html index.htm;
- # }
- #}
- # HTTPS server
- #
- #server {
- # listen 443 ssl;
- # server_name localhost;
- # ssl_certificate cert.pem;
- # ssl_certificate_key cert.key;
- # ssl_session_cache shared:SSL:1m;
- # ssl_session_timeout 5m;
- # ssl_ciphers HIGH:!aNULL:!MD5;
- # ssl_prefer_server_ciphers on;
- # location / {
- # root html;
- # index index.html index.htm;
- # }
- #}
- }
使用Nginx负载均衡搭建高性能.NETweb应用程序(转)的更多相关文章
- 使用Nginx负载均衡搭建高性能.NETweb应用程序二
在文章<使用Nginx负载均衡搭建高性能.NETweb应用程序一>中,让我们对Nginx有了一个初步认识,下面我们将在windows平台下面使用Nginx演示集群部署我们的web应用. 一 ...
- 使用Nginx负载均衡搭建高性能.NETweb应用程序一
一.遇到的问题 当我们用IIS服务器部署了一个web应用以后,当很多用户高并发访问的时候,客户端响应就会很慢,客户的体验就会很差,由于IIS接受到客户端请求的 时候,就会创建一个线程,当线程达到几千个 ...
- Nginx负载均衡搭建(Window与Linux)
windows上搭建nginx负载均衡 1.准备几台http服务器软件,这里选用一台apache一台tomcat apache(windows)下载链接:https://www.apachehaus. ...
- Nginx 负载均衡搭建
配置文件Nginx/conf/nginx.conf 什么是负载均衡呢? 由于目前现有网络的各个核心部分随着业务量的提高,访问量和数据流量的快速增长,其处理能力和计算强度也相应地增大,使得单一的服务器设 ...
- linux下nginx负载均衡搭建
[一.Nginx能做什么] 1.http服务器.Nginx是一个http服务可以独立提供http服务.可以做网页静态服务器. 2.虚拟主机.可以实现在一台服务器虚拟出多个网站.例如个人网路使用的虚拟主 ...
- [例子] nginx负载均衡搭建及测试
一.Nginx + Tomcat 负载均衡测试(负载均衡+部分静态图片处理) 环境说明: nginx+tomcat @ubuntu ok 首先你得有一个Ubuntu或者什么其他的linux. 安装j ...
- nginx负载均衡搭建phpmyadmin加入redis了解session会话原理
myphpadmin项目理解cookie和session 当我们平时上网的时候,在刷新之后或者退出浏览器再次打开浏览器不需要登陆网页了,这就是利用了cookie和session: 环境配置 hostn ...
- Centos7 minimal 系列之Nginx负载均衡搭建(四)
一.Nginx搭建请参考我的上篇文章 http://www.cnblogs.com/WJ--NET/p/8143899.html 二.在IIS上搭建2个网站 三.配置nginx 虚拟机和主机网络互通请 ...
- Nginx系列一:正向代理和反向代理、Nginx工作原理、Nginx常用命令和升级、搭建Nginx负载均衡
转自https://www.cnblogs.com/leeSmall/p/9351343.html 仅供个人学习 一.什么是正向代理.什么是反向代理 1. 正向代理,意思是一个位于客户端和原始服务器( ...
随机推荐
- 素数筛 codevs 1675 大质数 2
1675 大质数 2 时间限制: 1 s 空间限制: 1000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 小明因为没做作业而被数学 ...
- hdu 4114 Disney's FastPass 状压dp
Disney's FastPass Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.ph ...
- 使用辗转相除法求两个数的最大公因数(python实现)
数学背景: 整除的定义: 任给两个整数a,b,其中b≠0,如果存在一个整数q使得等式 a = bq 成立,我们就说是b整除 ...
- 【转载】利用Matlab制作钟表
静态时钟 hObject=figure; set(hObject,'NumberTitle','off'); set(hObject,'MenuBar','none'); set(hObject,'v ...
- FeatureTable()
abstract long addFeature(Feature ...
- 7款Flash和Javascript网页视频播放器
Flash和javascript网页视频播放器.梦想中的视频播放器是这样的: 支持所有格式,兼容所有主流视频网站,支持播放列表.视频缩略图.全屏播放.画面调节.预加载.体积贼小,功能贼多……. 也许你 ...
- 幸福框架:用户想看到的操作日志也要使用AOP吗?
背景 日志无论是对于开发人员.运维人员和最终用户都是一笔财富,是不是所有类型的日志都要AOP呢?本着交流的目的,这里先说一些看法,希望大家多批评. 常见的日志类型 异常日志 概念:记录异常的日志. 考 ...
- sed替换换行符“\n”
linux sed命令,如何替换换行符“\n” 在一次sed使用中,执行命令: sed "s/\n//g" file 1 发现,没起到任何效果. 后来,经查sed官方用户手册,才得 ...
- sharememory.c
//进程通信,共享存储区 #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #i ...
- [Todo] 乐观悲观锁,自旋互斥锁等等
乐观锁.悲观锁.要实践 http://chenzhou123520.iteye.com/blog/1860954 <mysql悲观锁总结和实践> http://chenzhou123520 ...