使用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负载均衡搭建高性能.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. 正向代理,意思是一个位于客户端和原始服务器( ...
随机推荐
- SGU196_Matrix Multiplication
给一个无向图,如果第i个点连接第j条边,那么mat[i][j]=1,否则mat[i][j]=0. 求mat的转置乘以本身得到的矩阵每个位置的和是多少? 理解矩阵的意义就比较好做了. mat[i][j] ...
- 最短路算法 (bellman-Ford算法)
贝尔曼-福特算法与迪科斯彻算法类似,都以松弛操作为基础,即估计的最短路径值渐渐地被更加准确的值替代,直至得到最优解.在两个算法中,计算时每个边之间的估计距离值都比真实值大,并且被新找到路径的最小长度替 ...
- Unity3D研究院之使用Animation编辑器编辑动画(五十四)
Unity提供了Animation编辑器,它可以为我们编辑物理动画.举个例子比如场景中有一个来回摇动的秋千,这个秋千在项目中完全只起到衬托作用,它不会与别的游戏对象有任何交互.如果这个秋千也用代码来 ...
- android studio中xml没有提示
删除.idea文件夹和所有的.iml文件,重新build project.
- UIPageControl页控制器
一.基本知识 #import "ViewController.h"@interface ViewController ()<UIScrollViewDelegate>{ ...
- c#中的static
1.C# 不支持静态局部变量(在方法范围内声明的变量). 2.static类一般用于与状态无关的类.那么,什么是与状态无关的类?我的理解是当一个类中没有属性,只有方法的的时候,就可以认为这个类是与状态 ...
- Java 7新方法probeContentType的C#实现方式
在Java 7中增加了新的一个方法——probeContentType,其主要作用是可以判断文件的content type.相应代码如下所示: import java.io.IOException; ...
- ASP.NET MVC学习之过滤器篇(1)
一.前言 继前面四篇ASP.NET MVC的随笔,我们继续向下学习.上一节我们学习了关于控制器的使用,本节我们将要学习如何使用过滤器控制用户访问页面. 二.正文 以下的示例建立在ASP.NET MVC ...
- Dynamic CRM 2013学习笔记(四十四)CRM技术支持
有时我们经常遇到一些CRM的问题,一时又无法解决,这时我们可能要找下外援,下面列出一些基本的技术支持. 1. CRM 论坛 https://community.dynamics.com/crm/f ...
- [MFC] 高仿Flappy bird 桌面版
这是今年年初做的东西,一直没有时间整理,现在拿出来分享下~ 目录 开发背景 开发语言及运行环境 效果展示 游戏框架说明 游戏状态及逻辑说明 经典算法说明 重量级问题解决 开发感想 一.开发背景: fl ...