• Linux学习104 http服务及IO事件模型讲解


    一、Nginx

      1、engine X = Nginx

        a、http协议:web服务器(类似于httpd)、http reverse proxy(类似于httpd)、imap/pop3 reverse proxy

        b、NGINX is a free,open-source,high-performance HTTP server and reverse proxy,as well as an IMAP/POP3 proxy server

        c、C10K(10K Connections)

        d、Tengine,OpenResty

      2、http协议

        a、URL:shceme://username:password@host:port/path:params?query#frag

          DocumentRoot:/PATH/TO/SOMEDIR/

            Location:URL

          Alias

          params:

            key=value&key=value

      

          query:

            

        b、http事务

          (1)、request:

            <method><URL><VERSION>

            HEADERS

            <body>

          (2)、response:

            <VERSION><STATUS><REASON-PHRASE>

            HEADERS

            <body>

            name:value

          (3)、Method:GET/HEAD/POST,PUT/DELETE,TRACES,OPTIONS

          (4)、Status Code:

            1xx:

            2xx:成功类响应码,200

            3xx:重定向类的响应码,301,302,304

            4xx:客户端错误:403,404

            5xx:服务端错误,502

          (5)、认证:

            基于ip认证

            基于用户认证:basic/digest

          (6)、httpd MPM:

            prefork:进程模型,两级结构,主进程master负责生成子进程,每个子进程负责响应一个请求

            worker:线程模型,三级结构,主进程master负责生成子进程,每个子进程负责生成多个线程,每个线程响应一个请求

            event:主进程master负责生成子进程,每个子进程响应多个请求

      3、I/O模型:

        a、阻塞型,非阻塞型,复用型,信号驱动型,异步

        b、同步/异步:

          (1)、关注消息通知机制

          (2)、消息通知

            同步:等待对方返回消息

            异步:被调用者通过状态,通知或回调机制通知调用者被调用者的运行状态

        c、阻塞/非阻塞型

          (1)、阻塞:blocking,调用结果返回之前,调用者被挂起

          (2)、非阻塞:nonblocking,调用结果返回之前,调用者不会被挂起

        d、一次文件IO请求,都会由两阶段组成

          (1)、第一步:等待数据,即数据从磁盘到内核内存

          (2)、第二步:复制数据,即数据内核内存到进程内存

        e、复用型IO调用

          select():1024,即一个进程最多监控1024个IO。即最多在80上监控1024个请求。我们之所以监控1024个IO是因为研发人员经过多次测试发现监控超过了1024个IO没有意义。性能几乎不会上升。

          poll():没有限制,因此他的性能不比select()好多少

          event-driven:(信号驱动)

            epoll(Linux):libevent这个包提供更多的网络依赖库

            Kqueue(BSD):

            Solaris:/dev/poll

      4、Nginx

        http服务器,反向代理服务器,邮件代理服务器,高性能服务器。

        

  • 相关阅读:
    What is the difference between Serialization and Marshaling?
    IEEE Standard 754 for Binary Floating-Point Arithmetic
    没有单元测试,就很难有真正的积累。
    一般只用 20% 的代码就可以解决 80% 的问题。但要想解决剩下 20% 的问题的话,则需要额外 80% 的代码。
    为失败设计,大量引入对SRE的理解,鲁棒性高
    用git合并分支时,如何保持某些文件不被合并
    git 分支合并时如何忽略某个文件
    Golang拼接字符串的5种方法及其效率_Chrispink-CSDN博客_golang 字符串拼接效率 https://blog.csdn.net/m0_37422289/article/details/103362740
    Lua大量字符串拼接方式效率对比及原因分析
    干货 | 携程多语言平台-Shark系统的高可用演进之路
  • 原文地址:https://www.cnblogs.com/Presley-lpc/p/13080744.html
Copyright © 2020-2023  润新知