`
unsoundboy
  • 浏览: 62466 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

服务器模型

阅读更多

单客户端的服务器流程

首先考虑只有一个客户端请求服务的情况,服务器需要先开启一个Socket端口监听连接 请求,然后接受一个客户连接,接着读取网络数据处理并发回结果,最后还要关闭网络连接。用传统的Socket函数描述,整个网络服务过程经历了bind、 listen、accept、receive、send、close几个步骤,其中receive和send经历多次循环。由于receive、send 等函数都是阻塞式的,没有完成接收(发送)就会等待而不往下执行,所以无法实现同时向多个客户端提供服务。
单一客户端循环

单一客户端循环

fork方式实现并行

既然单个客户端会在收发数据的时候阻塞整个程序的执行,一个简单的实现并行处理的方法很 容易想到——创建多个进程(或者线程),分别服务不同的客户端。这就是fork方式的基本思路:主进程被创建之后,开启和监听端口,每每有请求的连接建 立,都fork一个子进程来负责处理,主进程可以继续等待下一个客户端请求。对于每个被创建出来的子进程,都可以独立地接收和发送数据,执行服务器逻辑, 完成操作关闭连接之后,子进程被销毁,资源被操作系统回收。
通过fork实现多客户端

通过fork实现多客户端

用一个比喻阐述fork方式的服务器就是: (主进程)只负责接受生产订单,然后雇人 (fork子进程)执行生产任务 (服务器逻辑),交付产品之后将其解雇 (销毁子进程)。
fork方式是最简单的网络服务器实现方式,它有着显著的缺点:fork模式大量地创建 和销毁系统进程会造成巨大的系统开销。操作系统在创建进程的时候需要分配资源,复制父进程内存数据,而处理完毕后销毁进程时又需要回收内存释放资源资源, 再加上大量进程存在时,系统的进程调度也会造成不小的额外开销。当然它也有显著的优点:所有客户端服务进程相互隔离互不干扰,一个进程的意外崩溃不会影响 到其他进程的正常工作,对于像Web服务这样要求高度稳定、互不干扰的情况十分适合。
著名的Apache服务器至今仍在使用这种方式实现服务,就是在Apache中被称作prefork的工作方式。当然,实际用于生产环境的服务器稍微复杂一些,Apache的prefork还实现了初始进程数量控制,延缓销毁进程等技术以提升并发访问承载力。

worker方式

fork方式中进程提供的服务是一次性的,和客户端连接断开后就会销毁,这样整个服务器 会同时有大量的进程需要创建和销毁。是否可以回收完成服务的进程,并让他们对新的客户连接提供服务呢?这就是worker方式。统计数据证明worker 方式是相当值得使用的:一般工作的网络服务器,并发请求中大约有60%到80%是处于连接发起和等待响应状态,只有很少的部分是已经建立连接,正在服务 的;而且并发访问量在短时间内是相对稳定的,很难想象服务器会遇到这一秒连接数量50,下一秒连接数量5000的情况,据此可以认为,只要有少量长期提供 服务的进程或者线程就足以应对大量的并发访问。
worker方式首先创建一个独立的worker管理进程来负责创建和管理worker 进程,称作worker管理器。然后主进程监听和接受请求,并把任务交给worker管理器负责。worker管理器接到任务之后,会在它维护的多个 worker进程中找到一个空闲的来处理这个任务。worker进程负责具体的数据收发,服务器逻辑的执行。完成任务关闭连接之后,worker进程不是 被销毁,而是通知worker管理器已经完成工作,处于空闲状态。worker管理器会考虑将下一个任务交给它。
多客户端worker方式

多客户端worker方式

用比喻阐述worker方式的服务器就是: (主进程)只负责接受产品订单,请一个管家 (worker管理器)负责打理生产事务,管家会长期雇佣若干工人 (worker进程),你将生产任务交给管家,管家就找一个没事干的工人生产 (执行服务器逻辑),工人完成任务后不会被解雇 (销毁进程),管家会被下一个生产任务交给他。
worker方式实现服务器较之fork方式有不小的改进,虽然设计起来更加复杂,但和 带来的收效相比是值得的。难点主要在于worker管理器的设计,为了有效的应对访问压力的变化,worker管理器需要能动态地创建和销毁worker 进程,以便在访问高峰时提供更多的服务进程,访问低谷时占用更少的系统资源,并且还要能够发现并销毁出现错误僵死的worker。
worker方式的优点显而易见,缺点倒是也有不少。worker的软肋在于 worker管理器进程,假如这个进程出现错误崩溃,那么整个服务器就宕机了。Apache从2.0版开始提供worker模式供选择,作为生产服务 器,Apache同时使用多线程和多进程结合的方式。以worker模式启动之后,Apache会启动多个worker管理器进程,每个worker管理 器会创建多个worker线程 来负责具体请求。这样的设计一方面能利用更轻量级的线程机制降低worker的系统开销,方便worker管理器设计,另一方面通过增加worker管理器的冗余,提升抗风险能力——即使一个worker管理器崩溃,服务依然不会中断。

event方式

如果多个客户端交互信息量很大的话,服务器逻辑不得不大量使用同步锁定和进程间通信机制,大大增加了额外的系统开销,也造成许多死锁的风险。lighttpd服务器另辟蹊径,化整为零,利用Linux系统事件通知和异步网络IO操作的方式实现一个单线程的Web服务器。

分享到:
评论

相关推荐

    进程服务器模型和线程服务器模型

    在计算机系统设计中,服务器模型是决定服务处理方式的关键因素,主要分为进程服务器模型和线程服务器模型。这两种模型在处理并发请求、资源管理和性能优化方面各有特点。 **进程服务器模型** 进程服务器模型...

    Simple Client-Server Demo 简单的客户端服务器模型

    首先,客户端-服务器模型的基本概念是,服务器端运行一个服务程序,等待并响应来自客户端的请求,而客户端则向服务器发送请求并接收回应。在TCP/IP协议栈中,套接字(Sockets)是实现这种通信的基础,它是进程间通信...

    COM组件的客户_服务器模型

    ### COM组件的客户_服务器模型解析 #### 一、引言 随着1993年Microsoft公司首次公布COM(Component Object Model,组件对象模型)技术,Windows平台上的开发模式发生了革命性的变革。COM技术为软件开发引入了一种...

    TCP并发服务器模型-多线程TCP服务器

    本文将深入探讨如何在rt-thread操作系统环境下实现一个高效的多线程TCP并发服务器模型。 rt-thread是一个开源、实时、轻量级的操作系统,特别适合于嵌入式设备。它提供了丰富的API接口,支持网络协议栈,使得开发者...

    通信服务器模型

    通信服务器模型是网络编程中的一个重要概念,特别是在分布式系统和互联网应用中。该模型涉及到服务器端的设计,用于处理来自多个客户端的并发连接请求。在本文中,我们将深入探讨通信服务器模型的原理、实现方法以及...

    客户服务器模型

    在IT领域,客户服务器模型(Client-Server Model)是一种分布式计算架构,其中客户端(Client)发送请求给服务器端(Server),服务器处理请求后返回响应给客户端。这种模型广泛应用于网络应用,如网页浏览、文件...

    多路IO复用并发服务器模型

    ### 多路IO复用并发服务器模型 #### 一、并发服务器模型概述 并发服务器模型是一种常见的网络编程架构,用于处理客户端与服务器之间的通信。它能够有效地管理多个客户端的连接请求,确保每个客户端都能获得及时的...

    基于java的开发源码-UDP服务器模型源代码.zip

    基于java的开发源码-UDP服务器模型源代码.zip 基于java的开发源码-UDP服务器模型源代码.zip 基于java的开发源码-UDP服务器模型源代码.zip 基于java的开发源码-UDP服务器模型源代码.zip 基于java的开发源码-UDP服务器...

    多路IO复用并发服务器模型 ppt 信息安全 产品开发实践 课件

    多路IO复用并发服务器模型 ppt 信息安全 产品开发实践 课件

    基于主动队列管理的Linux并发服务器模型及负载均衡算法的研究.pdf

    【基于主动队列管理的Linux并发服务器模型及负载均衡算法的研究】 在计算机网络领域,随着互联网用户数量和网络流量的快速增长,对网络服务器的可用性和性能提出了更高的要求。特别是当网络数据流无法在多台服务器...

    iocp三层架构服务器模型

    **IOCp三层架构服务器模型详解** 在IT行业中,服务器架构设计是系统开发的关键环节,它直接影响到系统的性能、可扩展性和稳定性。其中,“IOCp”(Input/Output Completion Port)三层架构服务器模型是一种高效且被...

    Linux下TCP/IP协议CS服务器模型

    本话题将深入探讨在Linux下如何构建一个基于TCP/IP协议的CS服务器模型。 首先,让我们理解TCP/IP协议。TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输层协议,它确保数据包按照正确的顺序到达...

    服务器模型的比较.pdf

    《服务器模型的比较》 服务器模型的选择对于网络应用程序的性能和可扩展性至关重要。本文主要探讨了两种常见的服务器模型:阻塞型模型和事件驱动模型,并对比了它们的优缺点。 首先,阻塞型网络编程接口是大多数...

    一种优化的IP通信服务器模型.pdf

    【标题】:“一种优化的IP通信服务器模型.pdf” 【描述】:本文主要探讨了一种针对IP通信服务器的优化模型,特别是在Linux操作系统环境下,利用Socket、多进程、多线程和线程池技术来提高服务器性能。 【标签】:...

Global site tag (gtag.js) - Google Analytics