• http服务器搭建之apache与nginx的特性


    一、了解一些简单的概念

      HTTP服务器程序:

        httpd(apache)

        nginx

        lighttpd(功能和nginx差不多,活跃度不如ng)

      应用程序服务器:

        IIS

        Tomcat(开源jsp容器),jetty(开源轻量级jsp容器),jboss(2次封装tomcat-jsp),resin(教学)、webshpere(重量级)、weblogic(bea公司大量市场份额),oc4j(oracle的,已经把bea公司买了,oc4j已经没有市场)

    二、HTTPD(Apache)

      httpd:apache(a patchy server)

      ASF(软件基金会):apache software foundation

      1、httpd特性

      ①、高度模块化:core + modules,

        运行再编译或运行时,选择哪些模块将会加载到服务器,来确定服务器特性

      ②、DSO:Dynamic Shared Object 动态共享对象

      ③、MPM:Multipath Processing Modules 多路处理模块

      能够更好的为有特殊要求的站点定制,例如,要求高伸缩性的站点可以选择线程的MPM,(worker,event);需要可靠性或者与旧软件兼容站点可以使用prefork。

        httpd-2.4支持,MPM支持运行DSO机制;以模块形式按需加载;

      1)prefork:多进程模型,每个进程响应一个请求;

        一个主进程:负责生成n个子进程,子进程也称为工作进程,每个子进程处理一个用户请求;即便没有用户请求,也会预先生成多个空闲经常,随时等待请求到达;最大不会超过1024个;

        主进程:管理子进程,创建套接字,接受用户请求,并派发某个子进程

        子进程:处理请求和响应请求

      2)worker:多线程模型,每个现成响应一个请求;(比prefork不相上写,每天15万)

        一个主进程:生成多个子进程,每个子进程负责多个线程,每个线程响应一个请求;m进程,n线程;m*n

        主进程:管理子进程,创建套接字,接受用户请求,并派发给某个子进程处理

        子进程:负责管理线程

        线程:处理请求和响应请求;

      3)event:事件驱动模型,每个线程响应N个请求;,和worker很像,多个进程+多个线程的混合模式,但是event模型下每个进程会有一个单独的线程来管理这些keep-alive类型的线程,当新的请求过来的时候,管理线程会把请求交给其他空闲线程处理,这样旧避免了每个线程都被keep-alive阻塞。但是event模型并不是所有情况都通用,再https协议下会退化成worker模型

        一个主进程:生成M个子进程,每个进程直接n个请求,m*n

        主进程:管理子进程,创建套接字,接受用户请求,并派发给某个子进程

        子进程:处理请求和响应请求

        httpd-2.2,event为测试使用,不支持DSO机制的MPM

        httpd-2.4,event为生产使用,production ready,支持DSO机制的MPM。

    2、HTTPD的功能特性

      虚拟主机:能够标识虚拟主机的方式:IP + PORT + HOSTNAME(IP、Port、FQDN)

      CGI:common gateway interface ,通用网关接口;

      反向代理 :reverse proxy

      负责均衡 :基于流量(bytraffic),基于业务(bybusiness),基于请求(byrequest)

      路径别名

      丰富的用于认证机制:basic、digest

      支持第三方模块

    三、Nginx

      1、简介 

        nginx2004年正式发布,Apache是1995年

        Apache以稳定著称但是随着互联网的日渐壮大,网站的并发变大,Apache就出现了一个C10K的问题,即一个物理服务器达到并发量1w的时候apache就会承受不了,后来2004年nginx很好的解决了c10k的问题。

        淘宝用的Tengine nginx,简称tng

      2、特性

        模块化设计、较好扩展性(不支持动态装卸载,tng支持)

      

        高可靠性

          master--->worker

          nginx服务器使用的异步机制是异步非阻塞方式,也就是master-->worker,每个工作进程使用异步非阻塞方式,可以处理多个客户端请求,当某个工作进程接收到客户端的请求,调用IO进行处理,如果不能立即获得结果,就去处理其他的请求,而客户端再此期间也无需等待响应,可以去处理其他事情,当IO返回时,就会通知此工作进程,该进程得到通知,暂时挂起当前处理的失误区响应客户端请求。

          nginx采用异步非阻塞方式处理请求,处理请求具体到系统底层就是读写事件(所谓阻塞调用方式即请求事件还没准备好,线程只能一直等待,等事件准备好了再处理;而非阻塞即事件没准备好,马上返回ENGAIN,告诉你事件还没准备好,而再这期间可以先去做其他事,再回头看看事件准备好了吗,时不时的看,需要的开销也是不小的)

          异步可以理解为循环处理多个准备好的事件,不会导致无畏的资源浪费,当有更多的并发数只会占用更多的内存而已

      

        低内存消耗

          10000个keep-alive连接再ningx仅消耗2.5MB

      

        支持热部署

          不停机而更新配置文件、更好日志文件、更新服务器程序版本

      

        支持事件驱动、AIO(异步io,epoll等)、mmap(内存映射)

      

      3、基本功能

        处理静态资源的web服务器,能缓存打开的文件描述符,索引文件以及自动索引;

        http,smtp,pop3协议的反向代理服务器加速,缓存、负载均衡;

        支持FastCGI(fpm,LNMP),uWSGI(python),memcached server等;

        模块化,非DSO机制,过滤器包括zip,图形大小调整、byte ranges,chunked responses以及SI-filter,在SSI过滤器中,到同一个proxy或FastCGI的多个子请求并发处理;

        支持SSL,TLS SNI;

      

       4、nginx结构与扩展

        一个master进程,生成一个或多个worker;

        事件驱动:epoll(边缘触发,支持linux2.6+),kqueue(BSD 4.1+),/dev/poll(event prots,solaris 7 11/99+);

        消息通知(复用器):select,poll,rt signals(实施信号);

        支持sendfile(linux2.2+),sendfile64(linux2.4.21+),sendfilev(solaris 8 7/01+);

        支持输入过滤(freeBSD 4.1+)及TCP_DEFER_ACCEPT(linux2.4+);

        最小化的数据库拷贝操作;

       5、扩展功能

        基于名称和IP 的多虚拟主机站点

        支持keepalive和pipelined(管道)连接

        支持平滑升级,不中断业务

        定制访问日志,支持使用日志缓冲区提高日志存储性能

        4xx-5xx错误代码重定向;

        支持URL, 基于PCRE的rewrite重写模块,及正则表达式

        支持路径别名

        支持基于IP 及用户的访问控制

        支持速率限制,支持并发数限制

        支持 PUT,DELETE,MKCOL,COPY及MOVE等较特殊的HTTP请求

        可以做HTTP反向代理及加速缓存,即负载均衡功能,内置都RS节点服务器健康检查功能,这相当于专业的Haproxy软件或LVS功能

        具备Squid等专业缓存软件等缓存功能

        支持FLV(flash视频);

      6、nginx的工作模式

        非阻塞、事件驱动、一个master生成一个或多个worker,每个worker响应n个请求;

          worker*n 国人单机最高并发达到52000个

        nginx是一个高性能得web服务器,能够同时处理大量得并发请求,它结合多进程机制和异步机制,异步机制使用得异步非阻塞方式,接下来就给大家

       

      7、五大模块

        核心模块、标准HTTP模块、可选HTTP模块、邮件服务模块和第三方模块。

        

          1)、核心模块:nginx最基本的核心服务,进程管理、权限控制、错误日志记录等;

          2)、标准HTTP模块:标准HTTP模块支持标准的HTTP功能;

          3)、可选HTTP模块:主要用于扩展标准HTTP功能,让Nginx能处理一些特殊服务;

          4)、邮件服务模块:主要用于支持Nginx的邮件服务;

          5)、第三方模块:扩展Nginx服务器应用,完成开发者想要的功能;

        模块图如下:

        

           

       8、nginx,master-worker模型架构图

      

      9、nginx整体架构图

      

      主进程

      nginx启动时,会生成两种类型的进程,一个是主进程master一个或多个工作进程worker,主进程并不处理网络请求,主要负责调度工作进程,加载配置、启动工作进程及非停升级。所以nginx启动后查看系统进程,就能看到至少两个nginx进程

      工作进程

      服务器实际处理网络请求响应的是工作进程worker,在类unix系统上,nginx可以配置多个worker,每个worker进程都可以同时处理数以千计网络请求

      模块化设计

      包括核心功能性模块核心模块负责维持要给运行循环run-loop,执行网络请求处理的不同阶段的模块功能,比如:网络读写、存储读写、内容传输、外出过滤,以及将请求发往上游服务器等,而其代码模块化设计,也使得我们可以根据需要对功能模块进行适当的选择修改,编译成具有特定功能的服务器

      事件驱动模型

      基于异步及非阻塞事件模型,可以说是nginx得以获得高并发、高性能得关键因素,同时也得益于对linux、solaris及类BSD等操作系统内核中事件通知及I/O性能增强功能得采用,如kqueue、epoll及event ports。

      代理设计

      代理设计,可以说是nginx深入骨髓得设计无论是对于HTTP,还是FastCGI、Memcache、Redis等得网络请求或响应,本质上都采用了代理机制,所以,Nginx天生就是高性能得代理服务器

    转载请注明出处:https://www.cnblogs.com/zhangxingeng/p/10150955.html 

     

  • 相关阅读:
    处理缺失值
    数据清理
    数据聚合
    ajax动态生成table
    MangeEmpHashMap
    Arraylist的雇员管理操作
    jsp获取一个对象和list对象
    Controller比较两个对象discs、outlets中的元素是否相等。相同则相应的checkbox为checked
    限制input text输入的类型(数字,字母,小数点)
    联合主键的映射运用
  • 原文地址:https://www.cnblogs.com/zhangxingeng/p/10150955.html
Copyright © 2020-2023  润新知