高性能服务器设计——常用网络服务器设计模型
在业务服务开发过程中,一个优秀的开发框架,往往能够起到事半功倍的效果。现介绍总结一种在服务器开发过程中,比较常用的一种服务器开发模型。
在介绍之前,先总结一下目前比较常用的一些服务器开发模型。
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) 业务代码与网络操作网络耦合在一起,一处出现问题,会导致满盘皆输;
以上只是做了一个非常浅薄的介绍,以上三种网络模型均是曾经或者当前比较流行的网络服务器开发模型。
高性能服务器设计——常用网络服务器设计模型相关推荐
- 高性能服务器设计——常用网络服务器设计模型(转载)
文章来源:http://blog.csdn.net/jiang1013nan/article/details/17471341 在业务服务开发过程中,一个优秀的开发框架,往往能够起到事半功倍的效果.现 ...
- Exchange邮件系统客户端与服务器通信常用网络端口
Exchange邮件系统:客户端与服务器通信常用网络端口 序号 用途 端口 1 未加密的web连接: •互联网日历发布 •Outlook on the web(重定向到443/TCP) •自动发现(4 ...
- qt多线程服务器_常见网络服务器并发模型
点击蓝字 关注我们 近些年,随着互联网的大发展,高并发服务器技术也快速进步,从简单的循环服务器模型处理少量网络并发请求,演进到解决C10K,C10M问题的高并发服务器模型.本文主要以TCP为例,总结了 ...
- 微博技术:千万级规模高性能高并发的网络架构设计
分享人:卫向军(毕业于北京邮电大学,现任微博平台架构师,先后在微软.金山云.新浪微博从事技术研发工作,专注于系统架构设计.音视频通讯系统.分布式文件系统和数据挖掘等领域.) 架构以及我理解中架构的本质 ...
- 网络服务器监测系统,网络服务器监测系统研究与开发
摘要: 当今社会随着计算机网络技术的发展和因特网使用的大众化,网络已经慢慢深入每个人的生活和工作,不仅工作离不开网络,生活同样和网络融合在一起:游戏,即时聊天,BBS,邮件的收发,资讯浏览--,所有的 ...
- 常用的服务器系统,常用的服务器操作系统
常用的服务器操作系统 内容精选 换一换 云耀云服务器(Hyper Elastic Cloud Server,HECS)是可以快速搭建简单应用的新一代云服务器,具备独立.完整的操作系统和网络功能.提供快 ...
- 《转》禅意设计:网络简洁设计的缘起和未来
自从苹果的设计旷世惊奇地重新回归了点.线.面这种基础视觉元素后,远在太平洋彼岸的日本,以无印良品设计风潮的兴起为标志,也掀起了一场设计简单化.生活质朴化运动.而地处北纬55度以北,寒冷严酷的北欧,不甘 ...
- 国家NTP授时服务器及常用NTP服务器
收藏几个常用NTP服务器域名和IP地址: ntp.ntsc.ac.cn 国家授时中心网络授时域名(不建议使用) 国家授时中心服务器IP: 210.72.145.44 阿里云公网NTP服务器: ntp. ...
- 学习高性能服务系统:网络I/O模型
关于 网络I/O模型 网络传输的信息格式 XML:应用广泛,适合做网络通讯的信息描述格式 JSON:轻量级的数据交换格式. Protocol Buffer(PB):一种数据交换格式 TLV:T:类型域 ...
- 无线系统cad服务器,cad 设置网络服务器
cad 设置网络服务器 内容精选 换一换 为弹性云服务器配置的安全组规则未生效.以下排查思路根据原因的出现概率进行排序,建议您从高频率原因往低频率原因排查,从而帮助您快速找到问题的原因.如果解决完某个 ...
最新文章
- hdu 1224 最长路
- ED/EP系列5《消费指令》
- JAVA学习笔记04
- UA MATH575B 数值分析下IV 带约束的优化
- QT的QStylePainter类的使用
- KMP算法的JavaScript实现
- 查询HTML标签select中options的值并定位其位置
- Veeam FAQ系列转载(四)
- asp.net core的TagHelper简单使用
- Google IO 2018 来啦!
- Eclipse-导入maven项目
- FEMA和地×××府运用GIS对抗灾害
- To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
- 实现商品库存信息管理页面
- 频域串联滞后校正matlab,控制工程基础(基于Matlab的线性系统串联校正)
- 网络io和磁盘io_在磁盘IO上,第1部分:IO的风味
- 恭喜 SphereEx 联合创始人潘娟成为亚马逊云科技新晋 Data Hero
- java sleep的意义_thread.sleep的作用是什么
- 淘宝API item_search_img - 按图搜索淘宝商品(拍立淘)图片搜索
- 《Python编程 从入门到实践》简单读书笔记