zoukankan      html  css  js  c++  java
  • 服务器架构

    1.常用服务器模型
    a.迭代服务器
    只有一个进程/线程处理请求
    设计方法:
    一般为单进程,加上select多路复用,非阻塞socket
    b.迭代/并发混合型服务器
    平时迭代处理,对消耗大的请求并发处理
    设计方法:
    平时是迭代型的服务器
    处理请求时设置一个超时,当请求的处理时间超时时,创建一个进程/线程,把处理转给新的进程/线程处理,主进程/线程继续处理其他请求
    c.并发服务器
    多个进程/线程并发处理请求
    设计方法: 多进程,多线程

    2.以上三类的服务器比较
    迭代服务器:最简单,性能不高
    并发服务器:性能较高,但结构相对比较复杂,开发难度中等
    迭代/并发混合型服务器:性能不错,但结构通常比单纯的并发服务器更复杂

    3.多进程的并发服务器
    a.每个连接fork一个进程
    主进程accpet连接,有新连接到来时fork一个进程,然后继续accept,等待新的连接
    数据传输由子进程处理,处理完后子进程exit
    每个子进程只处理一个连接
    b.Prefork进程,各个子进程竞争accept
    主进程预先fork一些进程
    各个子进程竞争accept,然后处理数据传输
    一个子进程可以处理一个连接,也可以同时处理多个连接(通过select等)
    惊群现象
    c.Prefork进程,由父进程accept请求,通过流管道转发fd到子进程
    主进程accept,通过流管道转发fd到子进程
    子进程收到fd后,处理数据传输,处理结束后通知父进程
    父进程处理的事情比较简单,容易监控子进程
    以上3种方式性能比较:
    a.每个连接fork一个进程:处理smtp等状态较多,数据量比较大时比较简单实用,总体性能不大好
    b.Prefork进程,各个子进程竞争accept:比较简单,性能不错
    c.Prefork进程,由父进程accept请求,通过流管道转发fd到子进程:代码复杂,性能一般不如上一种

    4.多线程的并发服务器
    每个连接一个线程
    Prethread多个线程,各个线程互斥accept
    Prethread多个线程,主线程accept并分发连接给子线程

    5.多进程与多线程的比较
    使用线程的模型:性能比使用进程要高,但代码比较复杂,对代码质量要求更高
    线程出错后可能会影响到所有线程,多进程的模式一个进程出错一般不会影响其他进程
    多线程模型共享数据比较简单有效,多进程模型共享数据比较麻烦,效率也不如线程

    6.一些流行的网络服务器采用的模型
    Sendmail: 采用多进程,每个连接fork一个进程.
    每个连接fork一个子进程
    子进程只处理一个连接
    子进程fork一个localmail进程(可以由用户自己编写),通过管道把数据转给localmail处理,把邮件处理业务逻辑独立出来
    优点:结构简单,不用维护复杂的状态机
    Apache1.3:采用多进程, prefork进程,各个子进程竞争accept
    Prefork一些子进程
    子进程竞争accept,每次只处理一个连接
    主进程不accept,根据负载情况调整子进程数量
    子进程运行一段时间后,主进程会让它退出,然后创建一个新的进程,防止内存泄漏等
    主进程通过shared memory监控子进程

    7.Tencent自己的一些网络服务器采用的模型
    移动QQ: Prefork多个进程,竞争accept,
    典型的一问一答TCP服务器,结构简单
    Prefork多个进程,竞争accept
    每个进程通过select可以同时处理多个连接
    采用这种结构的原因有:
    每秒请求<1000,可以满足要求
    结构简单,容易开发、维护

    sylar MAIL: cug@live.cn
  • 相关阅读:
    7.21 高博教育 数组 内存
    【基础扎实】Python操作Excel三模块
    PAT 甲级 1012 The Best Rank
    PAT 甲级 1011  World Cup Betting
    PAT 甲级 1010 Radix
    链式线性表——实验及提升训练
    循环程序设计能力自测
    链表应用能力自测
    PAT 甲级 1009 Product of Polynomials
    1008 Elevator (20分)
  • 原文地址:https://www.cnblogs.com/xumaojun/p/8544116.html
Copyright © 2011-2022 走看看