很多系统都需要服务端的开发,在很多时候首先会考虑基于Linux或者Unix的后台服务器系统。作为将要运行中服务器软件之上的应用系统,希望服务器的扩展性越多越好,业务逻辑扩充越容易越好。是否可以考虑设计一个可扩展的服务器开发平台呢?最好是支持基于Web的可视化组件式开发,并且能够自动将软件部署到多个分布式的物理服务器中。
在扩展性方面,对于并行处理量小的应用,可以把通信和业务处理集中到一台服务器中,称之为Compat的模式,对于并发量有一定需求的,可以把通信服务与业务处理分开,形成分布式的处理机制。也可能目前只需要做一台协议转换器,也可能只处理业务逻辑不管通信。这样的架构既能满足业务发展的弹性需要,也能够满足不同应用的处理需要。
下面是整体设计思路:
整体结构示意图如下:
包括通信处理(Communication Processor,CP)、协议转换器(Protocol Translator,PT)和业务处理(Business Processor,BP)三部分功能。当所有功能安装到一台服务器上,成为COMPAT模式,成为主机模式(Host Type)。当前支持CP和PT在一台服务器,BP在另一台服务器的模式。每一台物理独立的服务器均有服务管理器程序(Service Management),负责服务的启动、停止、配置等工作。
Host Type目前支持如下:
Host Type |
说明 |
COMPAT |
SM+CIU+PTU+ BHU |
FRONTEND |
SM+CIU+PTU |
NET |
SM+CIU |
TRANSLATOR |
SM+PTU |
BUSINESS |
SM+BHU |
TBUSINESS |
SM+PTU+BHU |
CIU和PTU之间,PTU和BHU之间通过适配器选择通信,适配器类型支持4种:函数调用(Function Call)、进程间通信队列(IPC Queue)、TCP(TCP连接)。
数据接口类型 |
说明 |
函数调用 |
FUNCTION,调用者执行本部件内的处理函数,函数返回值给调用者。 |
进程间通信队列 |
IPCQ,本部件监视输入队列,当有数据时,执行处理函数,并将结果发送到下一个部件,然后等待下一个部件返回,将结果处理后,写入输出队列。与下一个部件的通信方式,根据本部件的适配器配置选择。 |
TCP |
TCP,本部件监听TCP套接字,当有数据时,执行处理函数,并将结果发送到下一个部件,然后等待下一个部件返回,将结果处理后,写入输出队列。与下一个部件的通信方式,根据本部件的适配器配置选择。 |
对于一个服务器系统来讲,主要分为5段处理逻辑:
接收请求数据:通信处理器的接收功能,数据来源可能是通过网络、消息队列得到,目前只支持这3种可能的输入数据。这一阶段要求接收数据快,不会阻塞后续的请求,因此,收到数据后,通常会采用启动新的线程或者子进程的方式处理请求。这一阶段的输入是PDU(Protocol Data Unit),输出是交给子进程或者线程处理PDU的解码工作,可能的接口是函数调用、网络、消息队列。
解码器:数据来源可能是通过函数调用、网络、消息队列得到,目前只支持这4种可能的输入数据。收到数据后直接进行解码处理,将PDU转为SDU(Service Data Unit),然后将SDU 交给后续的业务逻辑处理,可能的接口是函数调用、网络、消息队列。
业务逻辑:数据来源可能是通过函数调用、网络、消息队列得到,目前只支持这4种可能的输入数据。对于收到的SDU数据进行业务逻辑处理,返回结果以SDU的形式返回,根据输入的数据源类型,进行对应的返回方式。
编码器:数据来源可能是通过函数调用、网络、消息队列得到,目前只支持这4种可能的输入数据。收到数据后直接进行编码处理,将SDU转为PDU,然后将PDU 交给通信处理器,根据输入的数据源类型,进行对应的返回方式。
发送应答数据:通信处理器的发送功能,数据来源可能是通过函数调用、网络、消息队列得到,目前只支持这4种可能的输入数据。将收到的PDU根据输入的数据源类型,进行对应的返回处理。
综上所述,对于一个服务器系统,主要的部件包括通信处理器(ComProcessor,简称CP)、编解码处理器(ProtocolTranslator,简称PT)和业务逻辑处理器(BusinessProcessor,简称BP),共性包括:
1) 输入设备:函数调用、网络(TCP)、消息队列
2) 输入设备参数:针对4中不同的输入设备,定义其必须的工作参数
3) 输出设备:函数调用、网络(TCP)、消息队列
4) 输出设备参数:针对4中不同的输出设备,定义其必须的工作参数
5) 控制:确定输入方式和输出方式的接口指示器,是否多线程支持分发。
这3个主要部件不同的个性是,每个部件的处理器工作内容不一样:
CIU:根据输入方式,监听数据,启动子进程或者线程进行处理,在子进程或者线程中等待读取处理结果,然后将结果根据输出方式,发送出去。本处理器逻辑与具体业务无关。共2个输入,2个输出。
PTU:根据输入方式,监听数据,根据一定的规则(hardcode或者根据协议配置信息,根据配置项TRANSLATOR_TYPE选择处理),将PDU转为SDU,然后将SDU发送给BP处理,等待读取到应答后,将SDU转为PDU,将结果返回给CP处理。本处理器逻辑与具体业务有关。共2个输入,2个输出。
BHU:根据输入方式,监听数据,读取到SDU后,进行业务逻辑处理,将处理结果保存为SDU方式,返回给PT处理。本处理器逻辑与具体业务有关。共1个输入,一个输出。
体系结构图如下:
上述三个部件CIU、PTU和BHP在运行时,其接口指示器根据安装不同,值也不同,参考下表:
说明:
|
|
CIU |
PTU |
BHU |
|||
Host Type |
Direction |
Lower |
Upper |
Lower |
Upper |
Lower |
Upper |
COMPAT SM+CIU+PTU+ BHU |
In |
TCP |
ICPQ |
ICPQ |
ICPQ/Func |
ICPQ/Func |
NA |
Out |
TCP |
ICPQ |
ICPQ |
ICPQ/Func |
ICPQ/Func |
NA |
|
FRONTEND SM+CIU+PTU |
In |
TCP |
ICPQ |
ICPQ |
TCP |
NA |
NA |
Out |
TCP |
ICPQ |
ICPQ |
TCP |
NA |
NA |
|
NET SM+CIU |
In |
TCP |
TCP |
NA |
NA |
NA |
NA |
Out |
TCP |
TCP |
NA |
NA |
NA |
NA |
|
TRANSLATOR SM+PTU |
In |
NA |
NA |
TCP |
TCP |
NA |
NA |
Out |
NA |
NA |
TCP |
TCP |
NA |
NA |
|
BUSINESS SM+BHU |
In |
NA |
NA |
NA |
NA |
TCP |
NA |
Out |
NA |
NA |
NA |
NA |
TCP |
NA |
|
TBUSINESS SM+PTU+BHU |
In |
NA |
NA |
TCP |
ICPQ/Func |
ICPQ/Func |
NA |
Out |
NA |
NA |
TCP |
ICPQ/Func |
ICPQ/Func |
NA |
服务器的配置管理功能的结构如下: