服务器模型、服务器编程框架——Linux高性能服务器

服务器模型

C/S模型(客户端/服务器)

如图:
服务器模型、服务器编程框架——Linux高性能服务器
TCP/IP协议在设计和实现上并没有客户端和服务器的概念,在通信过程中所有机器都是对等的。但由于资源(视频、新闻、软件等)都被数据提供者所垄断
几乎所有的网络应用程序都很自然地采用了C/S 模型:所有客户端都通过访问服务器来获取所需的资源

特点

  • 非对等服务,即客户端与服务器处于不对等地位
  • 体现:服务器有软硬件资源及运算能力而客户端没有,服务器提供服务客户端请求服务

TCP服务器和TCP客户端工作流程
服务器模型、服务器编程框架——Linux高性能服务器

  • 服务器可以同时监听多个请求:通过select系统调用实现
  • 服务器在监听到请求后接收它并分配一个逻辑单元为新的连接服务【新建的子进程、子线程或其他】

应用
C/S模型适合资源相应集中的场所,实现简单
缺点
服务器是通信的中心,当访问量过大时,可能所有的客户端都得到很慢的响应【此时用P2P模型】

P2P模型(点对点)

相对C/S模型,更符合网络通信的实际情况,服务器不再是中心,让网络上所有主机回归到对等的地位
:P2P模型使得每台机器在消耗服务的同时也给别人提供服务,这样资源能够充分、自由地共享。云计算机群可以看作P2P模型的一个典范
:当用户之间传输的请求过多时,网络的负载将加重
服务器模型、服务器编程框架——Linux高性能服务器
图a中主机之间很难互相发现。所以实际使用的P2P模型通常带有一个专门的发现服务器,这个发现服务器通常还提供查找服务(甚至提供内容服务),使每个客户都能尽快地找到自己需要的资源

从编程角度来讲,P2P模型可以看作C/S模型的扩展:每台主机既是客户端,又是服务器


服务器编程框架

服务器程序种类不同:其基本框架都一样,只是逻辑处理不同
服务器基本框架:
服务器模型、服务器编程框架——Linux高性能服务器
该基本框架可描述一台服务器或服务器机群

各部件功能、含义:
模块 单个服务器程序 服务器机群
I/O处理单元 处理客户连接,读写网络数据 作为接入服务器,实现负载均衡
逻辑单元 业务进程/线程 逻辑服务器
网络存储单元 本地数据库、文件/缓存 数据库服务器
请求队列 各单元间通信方式 各服务器之间的永久TCP连接

I/O处理单元

  • 对服务器:服务器管理客户连接的模块。它通常要完成以下工作:等待并接受新的客户连接,接收客户数据,将服务器响应数据返回给客户端。
    数据的收发不一定在I/O处理单元中执行,也可能在逻辑单元中执行(具体在何处执行取决于事件处理模式)
  • 对一个服务器机群:I/O处理单元是一个专门的接入服务器。它实现负载均衡,从所有逻辑服务器中选取负荷最小的一台来为新客户服务

逻辑单元

  • 对服务器:通常是一个进程或线程。它分析并处理客户数据,然后将结果传递给I/O处理单元或者直接发送给客户端(具体使用哪种方式取决于事件处理模式)
  • 对服务器机群:一个逻辑单元本身就是一台逻辑服务器。服务器通常拥有多个逻辑单元,以实现对多个客户任务的并行处理

网络存储单元

  • 它不是必须的,比如ssh、telnet 等登录服务就不需要这个单元

请求队列

  • 对服务器:是各单元之间的通信方式的抽象。IO处理单元接收到客户请求时,需要以某种方式通知一个逻辑单元来处理该请求。同样,多个逻辑单元同时访问一个存储单元时,也需要采用某种机制来协调处理竞态条件(请求队列通常被实现为池的一部分)
  • 对服务器机群:请求队列是各台服务器之间预先建立的、静态的、永久的TCP连接。这种TCP连接能提高服务器之间交换数据的效率,因为它避免了动态建立TCP连接导致的额外的系统开销