文章来源:http://blog.csdn.net/jiang1013nan/article/details/17471341

在业务服务开发过程中,一个优秀的开发框架,往往能够起到事半功倍的效果。现介绍总结一种在服务器开发过程中,比较常用的一种服务器开发模型。

在介绍之前,先总结一下目前比较常用的一些服务器开发模型。

        1)  迭代性服务器

迭代性服务器,在开源社区的代表之作是Apache Web服务器。该模型中,存在唯一的侦听进程,侦听进程accept新的链接之后,通过fork的方式,派生出一个新的进程来为这个请求进行专门的服务,直至请求全部处理完成,被fork的进程也会自动退出,在服务过程中被占用的各种资源得以释放。

这种服务器开发模型的优缺点分别如下:

优点:

开发流程比较清晰,对开发人员的要求比较低,对于内存泄漏、句柄未释放等各种请求服务器开发比较头疼的问题,随着业务进程自动销毁,全部都一了百了;

缺点:

每接受一次请求,均需要fork一个新的子进程,效率比较低,主要受限于机器fork进程的效率,不适合处理并发量比较大的情况;

使用场景:

迭代模型比较适合于请求并发量小,每次请求处理时间相对比较耗时的业务(业务处理流程比较复杂),例如处理图片上传等时耗比较长的业务。

2)并发性服务器

          并发性服务器,顾名思义,同一时刻可以接受多个客户端的请求消息。这种模型的从实现方式来分主要有两种类型:多线程和多进程模型。在并发服务模型中,由主进程socket的listen等操作,然后fork出多个业务处理进程,每个业务进程在该socket上面进行accept操作,争相去获取该请求的处理权(实际上是由操作系统来进行客户端的请求分配一个正在等待的其中一个业务进程)。业务进程接收到客户端处理请求之后,开始进行具体的业务流程处理,待业务流程处理结束之后,又重新回到accept的位置,等待处理下一个客户端请求,按照这个流程周而复始,循环执行;

这种服务器开发模型的优缺点分别如下:

优点:

并发服务模型,并发处理客户端请求的能力有了很大的提升,也是在中度并发请求量的场景下比较常用的服务器模型;

优化改进版:

在实际开发过程中,可能会遇到业务进程发生内存泄漏、句柄泄漏、段错错误等不容易分析出来的场景,这种情况下,可以设定每个业务进程只处理多少次,到达指定的次数之后,自动销毁释放,父进程不断检测子进程的个数,当子进程的个数不符合需求时,由父进程重新fork出新的子进程来处理新的请求;

3)  异步服务器

           归结命名为异步服务器模型,主要特征在于,该类服务器模型均使用网络异步模型select或者epoll等,使用异步网络模型的优势在于:单个进程(线程)可以同时等待多个socket的读写事件,大大的提高了网络操作的效率,目前来讲,网络异步模型尤其是epoll基本已经是高性能服务性的标配。开源社区使用网络异步模型典型有:Memcached(基于libevent)、Redis、Nginx等开源力作。

使用网络异步事件的典型是采用多线程模型,在单进程中,存在一个专门的侦听线程,负责整个服务中网络连接、可读、可写等事件的侦听,例如存在可读事件时,通知给具体的业务处理线程来进行处理。(参见文章的线程模型图片,http://www.iteye.com/topic/344172)。

采用这种网络模型的优缺点分别为:

优点:

网络操作高效,可以快速的处理海量网络请求的情况;

缺点:

a)系统复杂度比较高,对开发人员的开发功底要求比较高;

b) 业务代码与网络操作网络耦合在一起,一处出现问题,会导致满盘皆输;

以上只是做了一个非常浅薄的介绍,以上三种网络模型均是曾经或者当前比较流行的网络服务器开发模型。

转载于:https://www.cnblogs.com/lizhanwu/articles/4169744.html

高性能服务器设计——常用网络服务器设计模型(转载)相关推荐

  1. Exchange邮件系统客户端与服务器通信常用网络端口

    Exchange邮件系统:客户端与服务器通信常用网络端口 序号 用途 端口 1 未加密的web连接: •互联网日历发布 •Outlook on the web(重定向到443/TCP) •自动发现(4 ...

  2. qt多线程服务器_常见网络服务器并发模型

    点击蓝字 关注我们 近些年,随着互联网的大发展,高并发服务器技术也快速进步,从简单的循环服务器模型处理少量网络并发请求,演进到解决C10K,C10M问题的高并发服务器模型.本文主要以TCP为例,总结了 ...

  3. 微博技术:千万级规模高性能高并发的网络架构设计

    分享人:卫向军(毕业于北京邮电大学,现任微博平台架构师,先后在微软.金山云.新浪微博从事技术研发工作,专注于系统架构设计.音视频通讯系统.分布式文件系统和数据挖掘等领域.) 架构以及我理解中架构的本质 ...

  4. 网络服务器监测系统,网络服务器监测系统研究与开发

    摘要: 当今社会随着计算机网络技术的发展和因特网使用的大众化,网络已经慢慢深入每个人的生活和工作,不仅工作离不开网络,生活同样和网络融合在一起:游戏,即时聊天,BBS,邮件的收发,资讯浏览--,所有的 ...

  5. 常用的服务器系统,常用的服务器操作系统

    常用的服务器操作系统 内容精选 换一换 云耀云服务器(Hyper Elastic Cloud Server,HECS)是可以快速搭建简单应用的新一代云服务器,具备独立.完整的操作系统和网络功能.提供快 ...

  6. 《转》禅意设计:网络简洁设计的缘起和未来

    自从苹果的设计旷世惊奇地重新回归了点.线.面这种基础视觉元素后,远在太平洋彼岸的日本,以无印良品设计风潮的兴起为标志,也掀起了一场设计简单化.生活质朴化运动.而地处北纬55度以北,寒冷严酷的北欧,不甘 ...

  7. 国家NTP授时服务器及常用NTP服务器

    收藏几个常用NTP服务器域名和IP地址: ntp.ntsc.ac.cn 国家授时中心网络授时域名(不建议使用) 国家授时中心服务器IP: 210.72.145.44 阿里云公网NTP服务器: ntp. ...

  8. 学习高性能服务系统:网络I/O模型

    关于 网络I/O模型 网络传输的信息格式 XML:应用广泛,适合做网络通讯的信息描述格式 JSON:轻量级的数据交换格式. Protocol Buffer(PB):一种数据交换格式 TLV:T:类型域 ...

  9. 无线系统cad服务器,cad 设置网络服务器

    cad 设置网络服务器 内容精选 换一换 为弹性云服务器配置的安全组规则未生效.以下排查思路根据原因的出现概率进行排序,建议您从高频率原因往低频率原因排查,从而帮助您快速找到问题的原因.如果解决完某个 ...

最新文章

  1. 手握173篇论文的学术新星被指造假!后续:博士论文被召回
  2. 两台oracle怎样定期导表数据,定期从Oracle导数据至MySQL
  3. centos下添加管理员组和添加管理员用户及相关操作
  4. MATLAB可视化实战系列(二十八)-贪心算法求快速平方根倒数算法中的“魔术数字”【含matlab源代码】
  5. flink window实例分析
  6. NoSQL(二):创建、管理集群
  7. ❗HTML引入CSS的三种常用方式汇总❗
  8. camunda流程定义表无数据_BPM - 业务流程管理
  9. 要的需求 ip提取网站源码带采集 要求是PHP源码
  10. 湛江高考2021成绩查询,2021广东省高中学业水平考试成绩查询(入口+方式)
  11. 近代数字信号处理实验-DFT分析信号的频谱
  12. JAVA入门级教学之(关于JVM的内存管理机制)
  13. 命php令删除文件夹,window_win7系统通过cmd命令提示符的del命令删除文件的详细教程,怎么利用cmd命令提示符的del命 - phpStudy...
  14. mysql sqlyog讲解_详细讲解如何用SQLyog来分析MySQL数据库
  15. Android 安全 (一)
  16. SAP打印脱机请求和输出请求管理
  17. Rust 碎碎念:【译】Arc 在 Rust 中是如何工作的
  18. 利用Python下载网页视频
  19. 3D Photography using Context-aware Layered Depth Inpainting
  20. 计算机毕业设计android的酒店客房预订客户端app(源码+系统+mysql数据库+Lw文档)

热门文章

  1. 成功的前提,35岁前必须做好的十件事
  2. 华擎主板bios设置图解_华硕、华擎主板升级BIOS 支持全核5GHz处理器酷睿i99900KS
  3. VS Code运行Python程序
  4. 计算机专业考试基础知识,计算机专业基础知识要点及考试考试.docx
  5. mongodb 搜索速度_初识 MongoDB 数据库
  6. 关于ViewTreeObserver的理解
  7. 基于android的lbs技术,基于Android的LBS应用研究
  8. 记录 spring 使用@Value获取properties文件中的属性值
  9. [From 10.1~10.5] 对象和集合初始化器(C#语法糖系列)
  10. 手机端适配rem计算方法