免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 34679 | 回复: 114
打印 上一主题 下一主题

[其他] 案例讨论——Nginx在工作中的应用讨论(获奖名单已公布-2012-8-23) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-06-21 10:06 |只看该作者 |倒序浏览

获奖名单已公布,详情请看:http://bbs.chinaunix.net/thread-3767018-1-1.html

Nginx作为大家非常熟悉的Web/负载均衡软件,相信大家在生产环境已经用得比较熟练了,Nginx+FastCGI| Nginx+Keepalived这些软件的配合相信大家在自己的网站上都尝试过,这里我们就一些在工作中Nginx经常遇到的问题,以及它与别的开源软件作一些对比和讨论,让大家更为了解这款强大的开源软件。

讨论话题:
一、Nginx作为轻量级的负载均衡器,它较适用于哪种场景中,它与之LVS/HAProxy的对比,其优势在哪里?

二、Nginx作为高抗并发的Web软件,与传统的Apache相比较为有优势,大家一般会将其哪种场景中,它与Apache相对,其优势在哪里?

三、Nginx作为Cache也越来越成熟了,与专业级的Squid/Varnish相比,大家更倾向于将其应用于哪种场景中,它与Squid/Varnish相比,优势又如何呢?

邀请嘉宾:

刘天斯(phpcool) 腾讯系统架构师
余洪春(yuhongchun)系统架构师
崔晓辉( coralzd ) 大众网高级系统管理员
刘晗昭(wenzizone) 昆仑万维高级架构师
胡安伟(king_819) 金游数据运维主管
刘鑫 (Gray1982)  小米手机 高级系统运维工程师

活动有奖:
我们为大家准备《决战Nginx技术卷——高性能Web服务器部署与运维(基于php、Java、ASP.NET等)》和《决战Nginx系统卷——高性能Web服务器详解与运维》两本书共10本,奖励给积极参与回复(有效回复超过3贴)会员。

  

论坛徽章:
0
16 [报告]
发表于 2012-06-21 14:02 |只看该作者


一、Nginx作为轻量级的负载均衡器,它较适用于哪种场景中,它与之LVS/HAProxy的对比,其优势在哪里?

  首先来说,Nginx比较有名的功能是反向代理,反向代理和负载均衡不是一回事,Nginx也没打算和LVS有一比。


二、Nginx作为高抗并发的Web软件,与传统的Apache相比较为有优势,大家一般会将其哪种场景中,它与Apache相对,其优势在哪里?

   其次,Nginx开发中解决的另一个重要问题是C10k问题,与Apache相比不能谈优势不优势;


三、Nginx作为Cache也越来越成熟了,与专业级的Squid/Varnish相比,大家更倾向于将其应用于哪种场景中,它与Squid/Varnish相比,优势又如何呢?

    最后,Nginx有自己的缓存机制,既可以是内存缓存也可以是磁盘缓存,而且在这套书中也介绍了Nginx的5大缓存机制:

    第一种、Proxy_cache
        第二种、proxy_store
        第三种、Memcached
        第四种、NCACHE(概念缓存,已经不用)
        第五种、Varnish

    根据应用程序或者系统部署(就是服务器的资源情况)进行选择使用。



论坛徽章:
0
49 [报告]
发表于 2012-06-22 22:57 |只看该作者
nginx做反向代理工作在第七层,优点就是架设方便啊!!

不用考虑lvs 的那种网络环境,能ping通就能工作!

稳定性高,你有讲过nginx突然挂吗?

当然效率是不及lvs的效率高,因为lvs是4层的,修改ip数据包等直接内核处理当然要比应用层的nginx 快。

当然nginx有upstream 模块,就是传说中的均衡负载,加上之后开发的健康检查模块,支持ip-hash 等均衡负载。

论坛徽章:
0
51 [报告]
发表于 2012-06-22 23:28 |只看该作者
回复 51# aca_jingru


    一、Nginx作为轻量级的负载均衡器,它较适用于哪种场景中,它与之LVS/HAProxy的对比,其优势在哪里?
   Nginx作为轻量级的负载均衡器,比较适合在中小型的web网站,对于7层的反向代理业有很好的效果,可以针对不同的频道,图片进行区分;Lvs对于稍大流量的网站,性能是毋庸置疑,Haproxy作为专业的反向代理软件,配置起来也很简单,对于中小型的网站,选择haproxy 4层配置起来很简单
二、Nginx作为高抗并发的Web软件,与传统的Apache相比较为有优势,大家一般会将其哪种场景中,它与Apache相对,其优势在哪里
   Nginx的抗高并发主要在于它选择epoll模型,在php环境下,Nginx与apache各有取舍,Nginx通过进程或者socket与php进行通信,对于HTTP长连接效果会好一点;apache通过modeules与php通信;Nginx的版本更新越来越快,也许安全问题也是要考虑的地方
三、Nginx作为Cache也越来越成熟了,与专业级的Squid/Varnish相比,大家更倾向于将其应用于哪种场景中,它与Squid/Varnish相比,优势又如何呢?
    对于Cache,我选择Nginx;选择Cache,我想也是分业务场景的,Varnish主要会把Cache存放在内存之中,Squid应用多年,功能强大自然不必说,squid对多核支持不好,对于一些中小型站点,我建议选择Nginx,Nginx web和Cache可以同时在web server,比较节省资源,Nginx提供第三方模块也很稳定,支持多核

论坛徽章:
0
76 [报告]
发表于 2012-06-25 13:26 |只看该作者
Nginx和Tomcat的session处理分为两步:

第一步,解决Nginx和Tomcat的负载均衡;
第二步,解决Tomcat集群和Memcached存储会话。

我们的这个案例是这样的在IP为192.168.3.139这台机器上安装了Tomcat1和Memcached1,而在IP为192.168.3.140这个台机器上安装了Tomcat2和Memcached2,对于Tomcat1和Memcached1、Tomcat2和Memcached2只是一个叫法而已,它们是完全一样的。在配置时要实现以下功能,参考了如下的官方文档:

http://code.google.com/p/memcach ... tupAndConfiguration

看下面的图:
   
< Tomcat1>  < Tomcat2>
           .  \ /   .
.   X    .
.  / \   .
< Memcached1>  < Memcached2>

    在正常情况下,换句话说就是Tomcat1和Memcached1、Tomcat2和Memcached2都正常工作的时候,Tomcat1 会将session ID存储在Memcached2中,同理Tomcat2 会将session ID存储在Memcached1中,但是如果其中的一个Memcached出现了问题,与其对应的Tomcat就会将session ID存储在另一个Memcached中。为什么这样做呢?如果运行在同一台机器上Tomcat和Memcached同时倒掉(这种情况多数是系统崩溃)时,用户的会话不会丢失。

    这样的结构实现了只要有一个Tomcat、一个Memcached不失效就可以正常工作。

第一步,解决Nginx和Tomcat的负载均衡

    这一步比较简单,在Nginx的配置文件中添加如下内容:
   
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

   upstream  tomcat   {
              server   192.168.3.139:8080;
              server   192.168.3.140:8080;
    }

   server {
        listen       80;
        server_name  localhost;
      

location  / {
            root   html;
            index  index.html index.htm;
            proxy_pass        http://tomcat;
            proxy_set_header  X-Real-IP  $remote_addr;
            client_max_body_size  80m;
        }
……
}

……
}



然后再重新启动Nginx就可以了。

第二步,解决Tomcat集群和Memcached存储会话

这一步又分为两步来完成:一是要解决Tomcat集群,二是要解决Memcached存储会话。

第一步、解决Tomcat集群

    在这个案例中我们配置了两台Tomcat服务器,在两台不同的物理服务器上,它们的IP分别为192.168.3.139和192.168.3.140。

在IP为 192.168.3.139 的机器上添加如下配置:

    将以下内容添加在$CATALINA_HOME/server.xml中。


<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
                 channelSendOptions="8">

          <Manager className="org.apache.catalina.ha.session.DeltaManager"
                   expireSessionsOnShutdown="false"
                   notifyListenersOnReplication="true"/>

          <Channel className="org.apache.catalina.tribes.group.GroupChannel">
            <Membership className="org.apache.catalina.tribes.membership.McastService"
                        address="224.0.0.4"
                        port="45564"
                        frequency="500"
                        dropTime="3000"/>
            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                      address="192.168.3.139"
                      port="4000"
                      autoBind="100"
                      selectorTimeout="5000"
                      maxThreads="6"/>

            <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
              <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
            </Sender>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
          </Channel>

          <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
                 filter=""/>
          <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

          <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
                    tempDir="/tmp/war-temp/"
                    deployDir="/tmp/war-deploy/"
                    watchDir="/tmp/war-listen/"
                    watchEnabled="false"/>

          <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
          <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
        </Cluster>
   
注意将以上的配置添加在原配置文件中:

      <!--
      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
      -->
   
的下面即可。

    另外还需要执行以下四条命令:

[root@mail tomcat]#mkdir  /tmp/war-temp/
[root@mail tomcat]#mkdir  /tmp/war-deploy/
[root@mail tomcat]#mkdir  /tmp/war-listen/
   
这三条命令没什么可解释的,这是上面配置中的需要。

[root@mail tomcat]# route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0
   
这条命令的功能在于添加多播路由,对于是不是eth0设备要根据具体的情况设定。

在IP为 192.168.3.140 的机器上添加如下配置:

    将以下内容添加在$CATALINA_HOME/server.xml中。


<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
                 channelSendOptions="8">

          <Manager className="org.apache.catalina.ha.session.DeltaManager"
                   expireSessionsOnShutdown="false"
                   notifyListenersOnReplication="true"/>

          <Channel className="org.apache.catalina.tribes.group.GroupChannel">
            <Membership className="org.apache.catalina.tribes.membership.McastService"
                        address="224.0.0.4"
                        port="45564"
                        frequency="500"
                        dropTime="3000"/>
            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                      address="192.168.3.140"
                      port="4000"
                      autoBind="100"
                      selectorTimeout="5000"
                      maxThreads="6"/>

            <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
              <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
            </Sender>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
          </Channel>

          <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
                 filter=""/>
          <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

          <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
                    tempDir="/tmp/war-temp/"
                    deployDir="/tmp/war-deploy/"
                    watchDir="/tmp/war-listen/"
                    watchEnabled="false"/>

          <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
          <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
        </Cluster>
   
同样,注意将以上的配置添加在原配置文件中:

      <!--
      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
      -->
   
的下面即可。

    另外还需要执行以下四条命令:

[root@mail tomcat]#mkdir  /tmp/war-temp/
[root@mail tomcat]#mkdir /tmp/war-deploy/
[root@mail tomcat]#mkdir /tmp/war-listen/
   
这三条命令没什么可解释的,这是上面配置中的需要。

[root@mail tomcat]# route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0
   
这条命令的功能在于添加多播路由,对于是不是eth0设备要根据具体的情况设定。

第二步、解决Memcached存储会话

    由于我们使用了Memcached,因此需要下载它的客户端java包,如果你能够自己写,那么也可以自己去写,不过这种活我们做运维的多数是干不了,干不了就使用开源的吧,google的开源替我们做了,需要我们做的就是下载了。

下载下面的jar包,并且将其放置在$CATALINA_HOME/lib目录下,在两台装有Tomcat的机器上做同样的操作,就是说在两个Tomcat服务器的$CATALINA_HOME/lib目录下都添加以下jar包。

[root@mail lib]#wget http://memcached-session-manager.googlecode.com/ \
> files/memcached-session-manager-tc7-1.4.1.jar
[root@mail lib]wget  http://memcached-session-manager.googlecode.com/ \
> files/msm-javolution-serializer-jodatime-1.3.0.jar
[root@mail lib] wget http://memcached-session-manager.googlecode.com/ \
> files/msm-javolution-serializer-cglib-1.3.0.jar
[root@mail lib]wget http://memcached-session-manager.googlecode.com/ \
> files/minlog-1.2.jar
[root@mail lib]wget http://memcached-session-manager.googlecode.com/ \
> files/msm-kryo-serializer-1.4.0.jar
[root@mail lib]wget http://memcached-session-manager.googlecode.com/ \
> files/kryo-1.03.jar
[root@mail lib]wget http://memcached-session-manager.googlecode.com/ \
> files/reflectasm-0.9.jar
[root@mail lib]wget http://cloud.github.com/downloads/magro/ \
> kryo-serializers/kryo-serializers-0.8.jar
[root@mail lib]wget http://mirrors.ibiblio.org/pub/mirrors/ \
> maven2/asm/asm/3.2/asm-3.2.jar
[root@mail lib]wget http://spymemcached.googlecode.com/ \
> files/memcached-2.5.jar

   
    然后再在$CATALINA_HOME/context.xml添加配置内容,两台Tomcat的$CATALINA_HOME/context.xml文件中都添加。

在192.168.3.139的机器上添加:

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
    memcachedNodes="n1:192.168.3.139:11211 n2:192.168.3.140:11211"
     failoverNodes="n1"
    requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
   
将以上的内容放置在原文件<Context> … </Context>元素之内。

在192.168.3.140的机器上添加:

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
    memcachedNodes="n1:192.168.3.139:11211 n2:192.168.3.140:11211"
     failoverNodes="n2"
    requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
   
同样添加在原文件<Context> … </Context>元素之内。

    好了,现在所有的配置都完成了。

论坛徽章:
0
85 [报告]
发表于 2012-06-26 13:17 |只看该作者
本帖最后由 rootsecurity 于 2012-06-26 13:20 编辑

简单描述一下我以前做过的关于nginx的项目,希望共勉。
1、nginx作为web服务器
   这个架构比较简单,机器当时是用的Dell R410 16GRAM  160G SATA。nginx在编译之前加了几个插件。
   下面这个是我优化服务器/etc/sysctl.conf的配置。

  1. net.ipv4.ip_forward = 1
  2. net.ipv4.netfilter.ip_conntrack_generic_timeout = 60
  3. net.ipv4.netfilter.ip_conntrack_icmp_timeout = 3
  4. net.ipv4.netfilter.ip_conntrack_udp_timeout_stream = 10
  5. net.ipv4.netfilter.ip_conntrack_udp_timeout = 3
  6. net.ipv4.netfilter.ip_conntrack_tcp_timeout_close = 3
  7. net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 3
  8. net.ipv4.netfilter.ip_conntrack_tcp_timeout_last_ack = 3
  9. net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 3
  10. net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 3
  11. net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 300
  12. net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_recv = 3
  13. net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_sent = 3
  14. net.ipv4.tcp_fin_timeout = 3
  15. net.ipv4.tcp_syncookies = 1
  16. net.ipv4.tcp_max_orphans = 262144
  17. net.ipv4.tcp_max_syn_backlog = 262144
  18. net.ipv4.tcp_syn_retries = 1
  19. net.ipv4.tcp_synack_retries = 1
  20. net.ipv4.netfilter.ip_conntrack_max = 655040
  21. net.ipv4.tcp_keepalive_time = 300
  22. net.ipv4.tcp_keepalive_probes = 3
  23. net.ipv4.tcp_rfc1337 = 1
  24. net.ipv4.tcp_abort_on_overflow = 1
  25. net.ipv4.tcp_tw_reuse = 1
  26. net.ipv4.tcp_tw_recycle = 1
  27. net.ipv4.ip_local_port_range = 1024 65535
  28. net.core.rmem_max = 16777216
  29. net.core.wmem_max = 16777216
  30. net.ipv4.tcp_rmem = 4096 87380 16777216
  31. net.ipv4.tcp_wmem = 4096 65536 16777216
  32. net.core.netdev_max_backlog = 30000
  33. net.core.somaxconn = 262144
  34. fs.file-max = 655350
复制代码
2、nginx作为web反向代理
采用比较简单的upstream来做web反向代理,使用轮训机制。
3、nginx+keepalived


采用nginx作为web服务器的原因就是它不仅是一个web服务器,还是一个七层负载均衡软件。而且语法比Apache相对简单,配置文件通俗易懂。

论坛徽章:
3
CU大牛徽章
日期:2013-03-13 15:29:07CU大牛徽章
日期:2013-03-13 15:29:49CU大牛徽章
日期:2013-03-13 15:30:19
95 [报告]
发表于 2012-06-27 14:55 |只看该作者
一、Nginx作为轻量级的负载均衡器,它较适用于哪种场景中,它与之LVS/HAProxy的对比,其优势在哪里?

  1. Nginx在反向代理,与php-fcgi结合做php站点(目前来说个人博客用此方案的据多),Nginx在做Cache方面效果也还不错,Nginx工作在7层,LVS工作在4层,Nginx在Rewrite方面更加灵活
复制代码
二、Nginx作为高抗并发的Web软件,与传统的Apache相比较为有优势,大家一般会将其哪种场景中,它与Apache相对,其优势在哪里?
  1. 我主要把Nginx+keepalived用在前端做反向代理,与Apache比较Nginx更加配置和管理更加方便和灵活,处理并发的能力也很强
复制代码
三、Nginx作为Cache也越来越成熟了,与专业级的Squid/Varnish相比,大家更倾向于将其应用于哪种场景中,它与Squid/Varnish相比,优势又如何呢?
  1. 我的图片服务器大多都是Varnish,其中一台为了测试用的nginx的Cache,能力和Varnish不相上下,测试有半年了,没有Down过.
复制代码

论坛徽章:
0
2 [报告]
发表于 2012-06-21 10:30 |只看该作者
欢迎大家参与:wink:

论坛徽章:
381
CU十二周年纪念徽章
日期:2014-01-04 22:46:58CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55CU大牛徽章
日期:2013-04-17 11:17:19CU大牛徽章
日期:2013-04-17 11:17:32CU大牛徽章
日期:2013-04-17 11:17:37CU大牛徽章
日期:2013-04-17 11:17:42CU大牛徽章
日期:2013-04-17 11:17:47CU大牛徽章
日期:2013-04-17 11:17:52CU大牛徽章
日期:2013-04-17 11:17:56
3 [报告]
发表于 2012-06-21 10:33 |只看该作者
支持下无风

论坛徽章:
0
4 [报告]
发表于 2012-06-21 10:40 |只看该作者
技术浅淡,顶下这讨论,希望把结果贴出来下。

论坛徽章:
381
CU十二周年纪念徽章
日期:2014-01-04 22:46:58CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55CU大牛徽章
日期:2013-04-17 11:17:19CU大牛徽章
日期:2013-04-17 11:17:32CU大牛徽章
日期:2013-04-17 11:17:37CU大牛徽章
日期:2013-04-17 11:17:42CU大牛徽章
日期:2013-04-17 11:17:47CU大牛徽章
日期:2013-04-17 11:17:52CU大牛徽章
日期:2013-04-17 11:17:56
5 [报告]
发表于 2012-06-21 10:40 |只看该作者
一、Nginx作为轻量级的负载均衡器,它较适用于哪种场景中,它与之LVS/HAProxy的对比,其优势在哪里?
我是将nginx作为反向代理用的.LVS/HA还没有用过,不好比较.
记得nginx作为负载均衡器,后面的Real服务器,只要网络可达就可以,没有LVS的那种限制.
二、Nginx作为高抗并发的Web软件,与传统的Apache相比较为有优势,大家一般会将其哪种场景中,它与Apache相对,其优势在哪里?
看网上的评测,nginx在高并发的情况下,性能确实不俗,我觉得与nginx的小巧有关系,另外,一般我们的web后台会要求用php,nginx一般用哪个的是php-fcgi方式,而apache是module的方式,应该是这个差异造成的.
据说最新的Apache 2.4的版本,性能也很不俗了,与nginx有的一拼,不过目前我还没有测试过.
一般情况下,我使用nginx,会把它放到前端,做负载均衡/cache,后端用apache或者是IIS.
三、Nginx作为Cache也越来越成熟了,与专业级的Squid/Varnish相比,大家更倾向于将其应用于哪种场景中,它与Squid/Varnish相比,优势又如何呢?
我的网络不需要代理,所以目前没研究过Squid/Varnish.

论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
6 [报告]
发表于 2012-06-21 10:44 |只看该作者
支持一下。

论坛徽章:
20
CU大牛徽章
日期:2013-03-13 15:29:072015亚冠之阿尔希拉尔
日期:2015-09-12 09:33:562015年亚冠纪念徽章
日期:2015-09-22 17:12:202015亚冠之本尤德科
日期:2015-10-29 16:18:18神斗士
日期:2015-11-23 13:37:23青铜圣斗士
日期:2015-12-07 10:14:28平安夜徽章
日期:2015-12-26 00:06:3015-16赛季CBA联赛之佛山
日期:2016-01-18 08:59:06shanzhi
日期:2016-06-17 17:59:3115-16赛季CBA联赛之同曦
日期:2016-11-03 14:43:552015七夕节徽章
日期:2015-08-21 11:06:17丑牛
日期:2014-12-30 16:06:17
7 [报告]
发表于 2012-06-21 11:04 |只看该作者
支持                     

论坛徽章:
0
8 [报告]
发表于 2012-06-21 11:29 |只看该作者
本帖最后由 yahoon 于 2012-06-25 10:45 编辑

一、Nginx作为轻量级的负载均衡器,它较适用于哪种场景中,它与之LVS/HAProxy的对比,其优势在哪里?
nginx是新兴的http server, 体量小却功能强大. 大有后起直追apache之势.
其负载均衡的支持非常强大,对L7的基于URI的转发支持的非常好, 用户可以很容易的编辑配置文件定义转发规则.
这可是LVS这类L4的负载均衡器说做不到的.
且安装容易,配置简单.


二、Nginx作为高抗并发的Web软件,与传统的Apache相比较为有优势,大家一般会将其哪种场景中,它与Apache相对,其优势在哪里?
当然是做web前端和反向代理咯. apache的反向代理能力相当弱.尤其nginx支持基于URI的转发,那样配合后端的php或者java应用简直是天衣无缝.
我觉得相比apache最大的优势当然是抗高并发,支持负载均衡和URL转发.


三、Nginx作为Cache也越来越成熟了,与专业级的Squid/Varnish相比,大家更倾向于将其应用于哪种场景中,它与Squid/Varnish相比,优势又如何呢?
我一般用作本地的存储一些少量的静态文件(如图片之类). 我觉得对于大量静态文体的cache加速还是需要用squid或varnish,如CDN之类.


论坛徽章:
0
9 [报告]
发表于 2012-06-21 11:30 |只看该作者
1:nginx作为负载均衡优势很明显,首先,他工作在网络的7层之上,正则匹配功能很强大,并且对网络依赖非常小,很适合做负载均衡,并且在高并发的负载均衡上表现性能稳定。
2:一般都是nginx放在最前面通过反向代理功能处理静态资源,而后端让apache处理动态请求。

3:我一直在用nginx的cache功能,在Web缓存加速功能、清除指定URL缓存的功能方面都可以取代squid了,而在性能上,Nginx通过对多核CPU的支持,超过Squid不少,varnish和squid是专业的cache服务,而apache,nginx这些都是第三方模块完成,在内存的利用上,Varnish比Squid具有优势,它避免了Squid频繁在内存、磁盘中交换文件,性能要比Squid高。

论坛徽章:
154
2022北京冬奥会纪念版徽章
日期:2015-08-07 17:10:5720周年集字徽章-年
日期:2022-10-26 16:44:2015-16赛季CBA联赛之深圳
日期:2022-11-02 14:02:4515-16赛季CBA联赛之八一
日期:2022-11-28 12:07:4820周年集字徽章-20	
日期:2023-07-19 08:49:4515-16赛季CBA联赛之八一
日期:2023-11-04 19:23:5115-16赛季CBA联赛之广夏
日期:2023-12-13 18:09:34
10 [报告]
发表于 2012-06-21 12:26 |只看该作者
大家都在说nginx的好,,,

能不能有比较专业的技术文档说明呢?比如,负载均衡这块

  1. 一、Nginx作为轻量级的负载均衡器,它较适用于哪种场景中,它与之LVS/HAProxy的对比,其优势在哪里?
  2. nginx是新兴的http server, 体量小却功能强大. 大有后起直追apache之势.
  3. 其负载均衡的支持非常强大,对L7的基于URI的转发支持的非常好, 用户可以很容易的编辑配置文件定义转发规则.
  4. 这可是LVS这类L4的负载均衡器说做不到的.
  5. 且安装容易,配置简单.
复制代码
ngix是通过什么算法/方案来做到均衡的呢???
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP