Differences between revisions 1 and 2
Revision 1 as of 2004-09-06 05:02:08
Size: 2545
Editor: samhoo
Comment:
Revision 2 as of 2009-12-25 07:14:53
Size: 2557
Editor: localhost
Comment: converted to 1.6 markup
Deletions are marked like this. Additions are marked like this.
Line 2: Line 2:
[[TableOfContents]] <<TableOfContents>>
Line 5: Line 5:
 在许多的web的应用中,cgi程序需要通过多种方式访问数据:[[BR]]
 1)直接访问本地/远端数据库;[[BR]]
 2)通过socket发送报文与远端服务程序通讯。[[BR]]
 在许多的web的应用中,cgi程序需要通过多种方式访问数据:<<BR>>
 1)直接访问本地/远端数据库;<<BR>>
 2)通过socket发送报文与远端服务程序通讯。<<BR>>
Line 13: Line 13:
 [[BR]] attachment:roo_toplevel.png [[BR]]
 '''说明:'''上图为了简单起见,只画出了单个cgi程序和单个远端服务进程进行通信的情形,实际也表达了多cgi对多服务进程的概念。[[BR]]
 '''短连接:'''每次的数据请求(可能有几个往返)都需要建立新的连接。[[BR]]
 '''长连接:'''保持连接,传送多次大量的连接。[[BR]]
 <<BR>> {{attachment:roo_toplevel.png}} <<BR>>
 '''说明:'''上图为了简单起见,只画出了单个cgi程序和单个远端服务进程进行通信的情形,实际也表达了多cgi对多服务进程的概念。<<BR>>
 '''短连接:'''每次的数据请求(可能有几个往返)都需要建立新的连接。<<BR>>
 '''长连接:'''保持连接,传送多次大量的连接。<<BR>>
Line 30: Line 30:
   [[BR]] attachment:roo_sstruct.png [[BR]]    <<BR>> {{attachment:roo_sstruct.png}} <<BR>>
Line 32: Line 32:
   [[BR]] attachment:roo_dystruct.png [[BR]]    <<BR>> {{attachment:roo_dystruct.png}} <<BR>>
Line 36: Line 36:
-- samhoo [[[DateTime(2004-08-17T18:06:22Z)]]] -- samhoo [<<DateTime(2004-08-17T18:06:22Z)>>]

simpleshm 系统设计

概述

  • 在许多的web的应用中,cgi程序需要通过多种方式访问数据:
    1)直接访问本地/远端数据库;
    2)通过socket发送报文与远端服务程序通讯。
    在第二种方式中,一般的处理方式是:由cgi程序与远端服务器直接建立socket连接、交换数据、断开链接。而web请求的压力是非常巨大的,每次的远端数据请求都需要创建一次连接,造成了系统的无谓负载。这种与远端服务连接方式我们称之为“短连接”。造成这一问题的原因是cgi没有“持久性”,处理每次cgi的请求,必须fork出一个子进程,因此连接也就无法“持久”。 为了降低负载,使连接“持久”,我们需要一个高速的交换空间,cgi进程往这个共享池写入数据,并等待数据返回,而转发进程则读出共享池的数据,利用它的“持久性”连接(我们称之为“长连接”)与远端服务程序交换数据,并写回共享池;cgi进程从共享池中读入返回数据,继续进行后续处理。 两种通讯模式的进程、数据流向如下图所示:


    roo_toplevel.png
    说明:上图为了简单起见,只画出了单个cgi程序和单个远端服务进程进行通信的情形,实际也表达了多cgi对多服务进程的概念。
    短连接:每次的数据请求(可能有几个往返)都需要建立新的连接。
    长连接:保持连接,传送多次大量的连接。

特性需求

  • 考虑到web服务程序编程语言的多样性,应支持多种语言访问接口:c语言、python、php、perl(optional)。
  • 考虑到有多个“生产者”、多“消费者”都需要访问共享空间,所以应支持锁机制。
  • 为了方面程序的控制、对共享池中的数据提供多种访问方式。
    • 哈希:插入(insert)、读取(get)、删除(delete)
    • 队列:压入(push)、拉出(pull)
    • 栈:压入(push)、弹出(popup)
  • 提供共享空间管理功能:监控数据量、强制删除共享数据、口令控制(optional)。
  • 性能要求:需要满足同时800个cgi进程同时交换数据。

系统结构

  • 静态结构

    • roo_sstruct.png

  • 动态结构

    • roo_dystruct.png

讨论


-- samhoo [2004-08-17 18:06:22]

Roo/SimpleShmArchDesign (last edited 2009-12-25 07:14:53 by localhost)