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. 关于国债的一些计算: 理论TF价格1(缴款日前无付息)

    计算 ExpectedTFPrice 是一个比较复杂的计算,我们这里讨论简单的一种情况. 给定一只可交割国债bond(一般为CTD),一个国债期货tf,一个日期t(表示tf的一个交易日期,我们通过t日 ...

  2. Codeforces731D 80-th Level Archeology

    考虑将两个单词变成有序,我们可以得到一个或者两个旋转次数的区间. 然后考虑将两组单词变成有序,比如[l,mid]和[mid+1,r],对于mid和mid+1这两个单词我们可以求出使他们有序的旋转次数的 ...

  3. EOS:dfuse stream 保证不会错过一个心跳

    强大的 dfuse history API 给我们带来了高效的链数据获取途径,让我们的 dapp 在用户体验上了一个台阶. 官方示例 不会错过一个心跳 代码分析 函数 pendingActions 待 ...

  4. 黑客攻防技术宝典web实战篇:攻击应用程序架构习题

    猫宁!!! 参考链接:http://www.ituring.com.cn/book/885 随书答案. 1. 假设受攻击的应用程序使用两台不同的服务器:一台应用程序服务器和一台数据库服务器.已经发现一 ...

  5. C#批量插入Sybase数据库,Anywhere 8

    数据库版本是Adaptive Server Anywhere 8 1.添加引用,程序集 iAnywhere.Data.AsaClient.这个和SQLServer的System.Data.SqlCli ...

  6. Codeforces Round #510 (Div. 2) A&B By cellur925

    第一次CF祭== 由于太菜了只做了前两题== 因为在第一题上耗费时间太多了,我还是太菜了==. A. Benches time limit per test 1 second memory limit ...

  7. macOS 将【允许从以下位置下载的应用】设置为:任意来源

    用管理员帐号进入Terminal: 1) 输入:sudo spctl --master-disable ,回车: 2) 重新进入该设置页面即可看到已生效:

  8. AVL树(平衡二叉树)

    定义及性质 AVL树:AVL树是一颗自平衡的二叉搜索树. AVL树具有以下性质: 根的左右子树的高度只差的绝对值不能超过1 根的左右子树都是 平衡二叉树(AVL树) 百度百科: 平衡二叉搜索树(Sel ...

  9. Contextual Action bar(2) 简介,启动,各函数介绍

    一.Context Action Bar简介 它是一个ActionBar,有各种操作项,但它不是始终显示的ActionBar,它需要上下文才显示.样式如下: 二.Context Action Bar的 ...

  10. 7.1 Java集合概述

    List 有序.重复的集合 Set 无序.不可重复的集合 Map 具有映射关系的集合 jdk1.5之后.Java增加了Queue体系集合,代表一种队列集合实现