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,可以满足要求
    结构简单,容易开发、维护

  • 相关阅读:
    如何打开指定文件所在的文件夹并选中文件
    不阻止多线程中控件跨线程访问
    .NET使用并行计算 提高执行效率
    关于线程安全中Lock的一些说明
    多线程中调用多参数的方法
    C#把汉字转换成拼音
    跨窗体Invoke时使用匿名方法或者带参方法
    给MP3音乐文件写ID3信息和专辑封面
    用Python作GIS:菜谱篇
    python中对象self的由来
  • 原文地址:https://www.cnblogs.com/SuperXJ/p/1673832.html
Copyright © 2011-2022 走看看