Nginx是什么?

Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。一直纳闷这个X是怎么来的在网上查了查原来X代表很牛逼的样子,Nginx就是代表一个非常牛逼的引擎服务器系统,在很多年以前记得都是用的apache来作为分流以及负载均衡的作用,在过了几年中一个俄罗斯人又开发了一个性能更高的服务器来处理客户端向浏览器发出的各种请求,它从技术角度解决了大数量高并发的用户量访问,官网上面写的并发数量可以达到5万,实际项目应用中可能也打不到这么多,如果可以达到2、3万并发访问量,也是一个用户非常多的网站了。
下面我们就结婚具体的例子以及特点原理啥的来应该这个技术到我们项目中来。

Nginx与Apache服务器对比

 
1.轻量级,同样起web 服务,比apache 占用更少的内存及资源 抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能 。nginx运行起来占用的资源CUP非常少,对于启动、重启都非常快速,在低配电脑上也可以快速的运行。
2.Nginx 配置简洁, Apache 复杂 
对于这一点使用过nginx的用户来说就会深有体会,如果不是学习他的原理以及各种细节,几乎一会的时间就可以搭起来一个nginx集群服务器,搭建可以按着下面的步骤自己搭建。
3.最核心的区别在于apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可以对应一个进程。
4.nginx的负载能力比apache高很多
如果你的网站有大量的高并发用户访问可以试着使用nginx来作为负载均行。
 

典型案例

中国大陆使用nginx网站用户有:新浪、网易、腾讯等。这么大的公司都在使用nginx作为网站的负载均衡可以说,它已经是一个比较成熟的框架,值得我们去学习和了解,通过学习和了解这个服务器也了解了一些多线程、阻塞、非阻塞的概念,多线程是一个很不错的提升性能的解决方案,但有时在多个线程之间切换以及创建关闭线程很消耗系统资源,接触的一些多线程模式可以解决多线程带来的并发访问问题,如果master/worker,fulture,生产者/消费者模式等等,在nginx里面就用到了一个多线程模式,master/worker模式,这个模式在nginx中起着重要的作用。
自己搭建集群架构:
从官网下载最新nginx-1.9.0.,下载地址为:http://nginx.org/en/download.html
1.下载完成,解压,到如下目录打开cmd,输入start nginx命令,即可启动nginx进程。
2.转到conf目录,如下
打开文件后,更改如下配置:
 
如上图所示,我配置了两台tomcat服务器,让nginx作为负载均衡代理的作用,经过测试配置好后既可以使用,它会随机的分发到两台不同的电脑上面去,配置非常简单,当然如果要深入了解nginx还是需要仔细分析分析它的运行流程的,简单的配置并不能够真正掌握它的作用,也不能够让它发挥更大的作用,例如还有一些静态资源的配置,访问等等,上面的jpj|png等都是对于静态资源的配置,它会将静态资源保存在本地的nginx服务器,减少服务器之间的带宽以及读写速度。
 
 

Nginx具有高性能原因

想要理解高性能还需要从最近本概念说起,要不是不好理解它为什么会性能高。一个线程通常具有五中状态,以及它们之间的转换关系如下,不可逆转。
1.新生--->就绪: 通过调用start()方法
    2.就绪--->运行: 处于就绪状态的线程一旦得到CPU,就进入运行状态并自动调用自己的run()方法
    3.运行--->阻塞: 处于运行状态的线程,执行sleep()方法,或等待I/O设备资源,让出CPU并暂时中止自己运行,进入阻塞状态
    4.阻塞--->就绪: 睡眠时间已到,或等待的I/O设备空闲下来,线程便进入就绪状态,重新到就绪队列中等待CPU。当再次获得CPU时,便从原来中止位置开始继续运行。
    5.运行--->死亡: (1)(正常情况下)线程任务完成
               (2)(非正常状况)线程被强制性的中止,如通过执行stop()或destroy()方法来终止一个线程
线程
这里重点说一下阻塞状态,当web服务器如tomcat处理大量请求时,会频繁进行磁盘IO读写操作,CPU轮训时会使运行状态的请求进入“阻塞”状态,这就是阻塞产生的原因,接下来说一下非阻塞。

非阻塞

把整个过程切换成小的任务,通过任务间协作完成。 由一个专门的线程来处理所有的 IO 事件,并负责分发。

事件驱动机制:事件到的时候触发,而不是同步的去监视事件。

线程通讯:线程之间通过 wait,notify 等方式通讯。保证每次上下文切换都是有意义的。减少无谓的进程切换。

Master/Worker并发工作模式

该模式来用来处理高并发的一种设计模式,多线程请求时,模式工作图如下
Master-Worker模式是常用的并行模式之一,它的核心思想是,系统有两个进程协作工作:Master进程,负责接收和分配任务;Worker进程,负责处理子任务。当Worker进程将子任务处理完成后,结果返回给Master进程,由Master进程做归纳汇总,最后得到最终的结果。
 
同一时刻只有一个worker建立连接,用到了锁的概念来保证只有一个worker处理请求。采用多线程好处,如果一个worker挂掉,对于其他没有影响
下面是一个简单的master、worker多线程实现,
Worker:用于实际处理一个任务;
Master:任务的分配和最终结果的合成
Main:启动程序,调度开启Master。
代码实现中……………………
 
 

总结:

Nginx服务器是一个高性能的服务器,可以用它来作为提高性能的系统,在上线的产品最好搭建在linux系统上面,会得到更好的性能。

nginx 集群的更多相关文章

  1. nginx集群报错“upstream”directive is not allow here 错误

    nginx集群报错“upstream”directive is not allow here 错误 搭建了一个服务器, 采用的是nginx + apache(多个) + php + mysql(两个) ...

  2. Tomcat集群,Nginx集群,Tomcat+Nginx 负载均衡配置,Tomcat+Nginx集群

    Tomcat集群,Nginx集群,Tomcat+Nginx 负载均衡配置,Tomcat+Nginx集群 >>>>>>>>>>>> ...

  3. Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享

    Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享 ============================= 蕃薯耀 2017年11月27日 http: ...

  4. 扎实基础之从零开始-Nginx集群分布式.NET应用

    1       扎实基础之快速学习Nginx Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.其特点是占有内存少 ...

  5. Nginx集群及代理的应用

    目录 1       大概思路... 1 2       了解Nginx及文档资源... 1 3       Nginx命令模块及进程结构... 2 4       解读Nginx配置... 3 5  ...

  6. Nginx集群之WCF分布式局域网应用

    目录 1       大概思路... 1 2       Nginx集群WCF分布式局域网结构图... 1 3       关于WCF的BasicHttpBinding. 1 4       编写WC ...

  7. Nginx集群之WCF分布式身份验证(支持Soap)

    目录 1       大概思路... 1 2       Nginx集群之WCF分布式身份验证... 1 3       BasicHttpBinding.ws2007HttpBinding. 2 4 ...

  8. Nginx集群之WCF大文件上传及下载(支持6G传输)

    目录 1       大概思路... 1 2       Nginx集群之WCF大文件上传及下载... 1 3       BasicHttpBinding相关配置解析... 2 4       编写 ...

  9. Nginx集群之WCF分布式消息队列

    目录 1       大概思路... 1 2       Nginx集群之WCF分布式消息队列... 1 3       MSMQ消息队列... 2 4       编写WCF服务.客户端程序... ...

  10. Nginx集群之SSL证书的WebApi微服务

    目录 1       大概思路... 1 2       Nginx集群之SSL证书的WebApi微服务... 1 3       HTTP与HTTPS(SSL协议)... 1 4       Ope ...

随机推荐

  1. python __builtins__ 函数

    dir(__builtins__) 1.'abs', 对传入参数取绝对值 abs(x, /) Return the absolute value of the argument. >>&g ...

  2. poj 3207 Ikki's Story IV - Panda's Trick【2-SAT+tarjan】

    注意到相交的点对一定要一里一外,这样就变成了2-SAT模型 然后我建边的时候石乐志,实际上不需要考虑这个点对的边是正着连还是反着连,因为不管怎么连,能相交的总会相交,所以直接判相交即可 然后tarja ...

  3. 解决 Xshell 连接出现 The remote SSH server rejected X11 forwarding request 问题

    问题描述 使用 Xshell 5 首次连接虚拟机 CentOS 7.6 出现这样的提示: WARNING! The remote SSH server rejected X11 forwarding ...

  4. mac 配置nginx 虚拟域名(转载)

    我是通过homebrew 安装nginx 的,所以安装目录是默认的,之前多个server都是放在默认安装目录下的nginx.conf里的,但是这样不太好,就是会导致nginx.conf 越来越长,而且 ...

  5. 洛谷 P1445 [Violet]樱花

    #include<cstdio> #include<algorithm> #include<cstring> #include<vector> usin ...

  6. Milking Grid POJ - 2185 || 最小覆盖子串

    Milking Grid POJ - 2185 最小覆盖子串: 最小覆盖子串(串尾多一小段时,用前缀覆盖)长度为n-next[n](n-pre[n]),n为串长. 当n%(n-next[n])==0时 ...

  7. Jury Meeting CodeForces - 854D

    Jury Meeting CodeForces - 854D 思路:暴力枚举会议开始的那一天(只需用所有向0点飞的航班的那一天+1去枚举即可),并计算所有人此情况下去0点和从0点出来的最小花费. 具体 ...

  8. JavaScript-获取当前元素的相关元素或节点--方法总结

    1.获取当前元素中的第一个子节点 document.getElementById("uu").firstChild 2.获取当前元素中的第一个子元素 document.getEle ...

  9. h5-27-存储/读取JS对象

    存储JS对象 <script type="text/javascript"> /*封装人员信息*/ function Person(id,name,age) { thi ...

  10. C. Bear and Colors 区间枚举的技巧

    http://codeforces.com/problemset/problem/673/C 先说一个枚举区间的技巧,枚举前缀,不要枚举后缀. 就是下面这个代码是不好的 ; i <= n; ++ ...