发明内容
为解决现有技术存在的不足,本发明公开了适合多种场景的SOCKET通信与进程管理通用平台及方法,开发平台适用于两类应用开发场景:SOCKET服务场景、常驻进程管理场景,在SOCKET服务场景中开发运行SOCKET服务,支持同步异步通信模式,在常驻进程管理场景中开发运行插件形式的后台应用。
为实现上述目的,本发明的具体方案如下:
适合多种场景的SOCKET通信与进程管理通用方法,包括以下步骤:
适用于SOCKET服务场景及常驻进程管理场景,在SOCKET服务场景中运行SOCKET服务,在常驻进程管理场景中运行插件形式的后台应用,每种场景均包括:
基础框架运行:创建一组进程,该组进程用于实现业务逻辑的处理,等待并响应用户操作指令及诊断进程的汇报;
诊断进程运行:检测所创建的进程的运行状态,自动重启异常终止或僵死的服务进程,确保整个平台持续稳定运行;
业务逻辑处理:在SOCKET服务场景中,服务进程启动时在空闲通道中登记自己的进程编号,并等待读取自己专属的描述符传递通道,客户端请求到达时,由平台进程接受,从空闲通道中提取第一个空闲的服务进程编号,通过进程编号对应的描述符传递通道发送客户端描述符,对应的服务进程接收客户端描述符,处理请求的业务逻辑,之后向客户端返回应答结果,最后再次在空闲通道中登记自己的进程编号;在常驻进程管理场景中,业务逻辑由插件程序承载,平台运行后可以通过用户指令依次启动多个插件程序,采用唯一的进程编号区分,插件程序独立于平台进程自主运行。
进一步的,基础框架运行中,平台运行时创建一个平台进程、一个诊断进程,平台进程根据配置文件中的平台关键字创建进程管理共享内存、信号灯,创建一个SOCKET管理描述符;对于SOCKET服务场景,额外创建一个SOCKET监听描述符、一组描述符传递通道、一个空闲通道,平台进程通过SOCKET监听描述符等待客户端连接请求,通过SOCKET管理描述符等待用户操作指令或诊断进程的汇报,采用IO多路复用技术同时兼顾这两个描述符,再创建一组服务进程,服务进程的数目由配置参数决定。
进一步的,同步模式SOCKET服务场景中,在配置文件中添加透明转发参数,指定目标的IP及端口,客户端发起连接请求时,首先依然由平台进程接受,通过空闲通道转发给空闲的服务进程,服务进程接收客户端描述符,之后建立与目标的SOCKET连接,得到目标描述符,然后采用IO多路复用技术(poll系统调用)同时兼顾这两个描述符;
其中任何一个描述符具备可以读取的数据时,服务进程读取数据,并发送给另外一个描述符,周而复始;服务进程收到客户端描述符之后,与客户端的后续交互不再通过平台进程,直接对话;任何一方关闭连接时,整个通信流程结束,回到初始状态。
进一步的,诊断进程运行时,实时检测各个服务进程的运行状态,对于单个周期运行持续时间超过设定时限的服务进程,强行杀死并向平台进程汇报,由平台进程予以重启,避免服务进程的无限期挂起,确保服务行为可控;同时实时检测各个服务进程存活与否,服务进程异常终止时向平台进程汇报,由平台进程予以重启,确保整个平台持续稳定运行;对于SOCKET服务场景,同时实时监控整个平台的繁忙比率,达到设定阈值时向平台进程汇报,在线增减服务进程的数目。
进一步的,结合SOCKET服务模式与常驻进程管理模式实现异步模式SOCKET服务平台,完整功能的实现包含两个平台:一个异步通信平台、一个业务处理平台,两者通过消息队列与UNIX域SOCKET通信机制交换数据,灵活扩展处理能力,提升交易吞吐量。
上述适合多种场景的SOCKET通信与进程管理通用方法在框架平台运行前还包括:
编写编译程序:按照项目要求更改样例代码,编写个性化业务处理逻辑,调用编程接口注册业务逻辑回调函数,调用平台入口函数;编写完毕与开发平台提供的静态库文件联合编译,生成平台程序与运行监视程序;
程序部署:按照项目要求调整开发平台附带的样例配置文件,提供必需的配置参数,定制平台运行行为。
进一步的,对于适合多种场景的SOCKET通信与进程管理通用方法还包括运行监视步骤:启动监视界面,从平台的进程管理共享内存中提取平台全局信息以及每个服务进程的运行信息,在屏幕上实时直观显示,采用定时信号驱动周期性自动刷新。
适合多种场景的SOCKET通信与进程管理通用平台,发布为一个静态库,附带一组头文件、配套资料及代码样例,开发人员可以用来快速开发部署网络通信程序及常驻服务程序,包括:
适用于SOCKET服务场景及常驻进程管理场景,在SOCKET服务场景中运行SOCKET服务,在常驻进程管理场景中运行插件形式的后台应用,每种场景均包括:
基础框架模块:创建一组进程,该组进程用于实现业务逻辑的处理,等待并响应用户操作指令及诊断进程的汇报;
诊断模块:检测所建立的进程的运行状态,自动重启异常终止或僵死的服务进程,确保整个平台持续稳定运行;
业务逻辑处理模块:在SOCKET服务场景中,服务进程启动时在空闲通道中登记自己的进程编号,并等待读取自己专属的描述符传递通道,客户端请求到达时,由平台进程接受,从空闲通道中提取第一个空闲的服务进程编号,通过进程编号对应的描述符传递通道发送客户端描述符,对应的服务进程接收客户端描述符,处理请求的业务逻辑,之后向客户端返回应答结果,最后再次在空闲通道中登记自己的进程编号;在常驻进程管理场景中,业务逻辑由插件程序承载,平台运行后可以通过用户指令依次启动多个插件程序,采用唯一的进程编号区分,插件程序独立于平台进程自主运行。
进一步的,基础框架运行模块中,平台运行时创建一个平台进程、一个诊断进程,平台进程根据配置文件中的平台关键字创建进程管理共享内存、信号灯,创建一个SOCKET管理描述符;对于SOCKET服务场景,额外创建一个SOCKET监听描述符、一组描述符传递通道、一个空闲通道,平台进程通过SOCKET监听描述符等待客户端连接请求,通过SOCKET管理描述符等待用户操作指令或诊断进程的汇报,采用IO多路复用技术同时兼顾这两个描述符,再创建一组服务进程,服务进程的数目由配置参数决定。
进一步的,诊断进程运行时,实时检测各个服务进程的运行状态,对于单个周期运行持续时间超过设定时限的服务进程,强行杀死并向平台进程汇报,由平台进程予以重启,避免服务进程的无限期挂起,确保服务行为可控;同时实时检测各个服务进程存活与否,服务进程异常终止时向平台进程汇报,由平台进程予以重启,确保整个平台持续稳定运行;对于SOCKET服务场景,同时实时监控整个平台的繁忙比率,达到设定阈值时向平台进程汇报,在线增减服务进程的数目。
进一步的,对于适合多种场景的SOCKET通信与进程管理通用方法还包括运行监视模块:启动监视界面,从平台的进程管理共享内存中提取平台全局信息,在屏幕上实时直观显示,采用定时信号驱动周期性自动刷新;
透明转发模块,对于SOCKET服务场景,在配置文件中添加透明转发参数,指定目标的IP及端口,客户端发起连接请求时,首先依然由平台进程接受,通过空闲通道转发给空闲的服务进程,服务进程接收客户端描述符,之后建立与目标的SOCKET连接,得到目标描述符,然后采用IO多路复用技术(poll系统调用)同时兼顾这两个描述符;
其中任何一个描述符具备可以读取的数据时,服务进程读取数据,并发送给另外一个描述符,周而复始;服务进程收到客户端描述符之后,与客户端的后续交互不再通过平台进程,直接对话;任何一方关闭连接时,整个通信流程结束,回到初始状态。
本发明融合SOCKET通信与进程管理功能,开发人员用以快速开发部署网络通信程序,无需关心SOCKET通信与进程管理等技术细节,专注于业务逻辑的实现,提高开发效率并降低开发门槛;对于网络服务程序,可以通过配置参数指定服务进程的数目,实现处理能力的灵活扩展;采用多个进程而不是线程并发运行,开发人员无需考虑线程安全,进一步降低开发门槛;平台运行内置诊断模块,实时监控整个平台的繁忙比率,达到设定阈值时在线增减服务进程的数目,实现处理能力的动态扩展;实时监控平台的运行状况,对于异常终止或僵死的服务进程自动予以重启,确保整个平台稳定持续运行;另外包含一个直观简易的运行监视界面,可以实时查看平台全局信息与服务进程的处理状态。
对于单纯的常驻进程管理场景,开发人员将业务逻辑封装为独立的插件程序,在平台上运行,每个插件程序可以彼此不同,可以由不同的用户执行,可以单独启动或停止,在单个平台中集中管理多个用户的后台散乱任务,常驻进程管理平台具有类似的诊断功能,可以自动重启异常终止或僵死的服务进程,实时查看平台全局信息与服务进程的处理状态。
本发明的有益效果:
1简化SOCKET通信程序的开发,开发人员无需关心SOCKET通信与进程管理等编程技术细节,专注于业务逻辑的实现,提高开发效率并降低开发门槛;
2支持TCP与UDP协议;支持长连接、短连接同步、异步通信模式,异步通信模式下,一个通信进程可以搭配一组处理进程,通信进程专职通信,处理进程专职业务逻辑处理,两者通过消息队列交换数据,灵活扩展处理能力,提升交易吞吐量;
3平台运行支持自我诊断,自动重启异常终止或僵死的服务进程,确保整个平台持续稳定运行;在SOCKET服务场景中实时监控整个平台的繁忙比率,达到设定阈值时在线增减服务进程的数目,实现处理能力的动态扩展;
4运行时可以通过监视界面实时直观查看平台全局信息与每个服务进程的运行信息,采用定时信号驱动周期性自动刷新;
5可以应用于常驻进程管理场景,开发人员将业务逻辑封装为独立的插件程序,每个插件程序可以彼此不同,可以由不同的用户执行,可以单独启动或停止,在单个平台中集中管理多个用户的后台散乱任务,同样具有自我诊断与实时运行监视功能;
6内置透明转发模块,充当代理的角色,可以将客户端的请求透明转发到指定的目标地址与端口,从客户端的角度来看,自己是直接连接目标地址与端口。
7灵活的日志管理,可以根据日志级别过滤日志信息,可以设定循环使用的日志文件的数目,避免持续消耗磁盘空间,实现日志文件的自我管理,无需管理员手工定期清理日志信息。
具体实施方式:
下面结合附图对本发明进行详细说明:
SOCKET通信与进程管理通用开发平台发布为一个静态库文件,附带一组头文件、配套资料及代码样例,提供编程接口供开发人员编程调用,支持各种类UNIX操作系统,支持C/C++开发语言。
对于SOCKET服务场景,通信报头的格式可灵活配置,报头字段的数据类型支持整型与字符型,开发人员可以根据字段序号读取或设置报头字段的内容,方便编程,支持定长、变长报文;
开发平台自身支持中英文两种语言,通过环境变量控制切换,全面切换屏幕显示与日志记录采用的语言;
开发人员可以在进程管理共享内存中记录交易关键信息,有效控制多个服务进程同时处理相关交易时产生的冲突;
内置FTP客户端编程接口,便于开发人员编写FTP客户端程序;
对于SOCKET服务场景,支持通过SOCKET端口传递文件内容,便于开发人员编程通过同一个通道传递文件;
开发库中包含常用的字符串处理、时间处理等功能函数,开发人员可以直接使用,提高编程效率。
开发平台适用于两类应用开发场景:SOCKET服务场景、常驻进程管理场景,在SOCKET服务场景中开发运行SOCKET服务,在常驻进程管理场景中开发运行插件形式的后台应用。
开发人员按照项目要求更改样例代码,编写个性化业务处理逻辑,调用编程接口注册业务逻辑回调函数,调用平台入口函数,编写完毕与开发平台提供的静态库文件联合编译,生成平台程序与运行监视程序;
不论SOCKET服务场景或常驻进程管理场景,在同一台机器上可以同时运行多个平台,通过平台关键字区分,平台关键字唯一标识一个平台。
SOCKET服务场景中,与客户端的通信协议支持TCP、UDP,通信模式支持长连接、短连接、同步、异步。
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议;UDP(User Datagram Protocol,用户数据报协议),是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。
长连接表示通信连接的持续性,通信双方在单个连接中交换多个报文;与之相对,短连接表示通信双方在单个连接中只交换一次报文,交换完毕关闭当前连接,下次交换报文时重新创建网络连接;
异步通信模式时,允许客户端批量发送一批请求,在上一个请求处理完成之前,客户端可以发送新的请求,从而提升交易请求吞吐量,服务端的应答返回时客户端根据应答结果中的消息标识关联自己的请求消息,辨识应答结果的归属;与之相对,同步通信模式时,客户端发送请求后,同步等待服务端的应答,在此之前不会发送新的请求报文。
平台运行依赖一个配置文件指导自己的运行行为,上述平台关键字、平台类型(SOCKET服务或常驻进程管理)、通信协议、通信模式作为配置参数在配置文件中定义。
平台程序运行时,控制逻辑由开发平台接管,创建管理设施,如:SOCKET管理描述符、进程管理共享内存、信号灯等,启用自我诊断功能,在常驻进程管理场景中需要用户启动插件程序,此后整个平台进入自我管理的运行状态,在特定的运行上下文会调用开发人员事先注册的相应功能逻辑,此时可以通过运行监视界面实时查看整个平台的运行状态。
共享内存机制采用类UNIX系统内置支持的System V标准的shared memory,为协调多个进程对共享内存的同步访问,采用System V标准的信号灯semaphore作为加锁同步机制,异步通信队列采用System V标准的消息队列,支持消息优先级。
自我诊断模块运行时读取命令行指定的配置文件,获取管理参数(如平台关键字、睡眠间隔等),之后后台常驻执行,周期性检测各个进程的运行状态,配合平台进程自动重启异常终止或僵死的服务进程,确保整个平台持续稳定运行,对于SOCKET服务场景同时实时监控整个平台的繁忙比率,达到设定阈值时通知平台进程在线增减服务进程的数目,实现处理能力的动态扩展。
典型的SOCKET服务场景包括如下步骤:
步骤(1):开发人员编写编译程序:开发人员按照项目要求更改样例代码,编写个性化业务处理逻辑,调用编程接口注册业务逻辑回调函数,调用平台入口函数;编写完毕与开发平台提供的静态库文件联合编译,生成平台程序与运行监视程序;
步骤(2):程序部署:按照项目要求调整开发平台附带的样例配置文件,提供必需的配置参数,定制平台运行行为;
步骤(3):基础框架运行:平台运行时创建一组进程(一个平台进程、一个诊断进程、一组服务进程),服务进程的数目由配置参数决定,平台进程根据配置文件中的平台关键字创建进程管理共享内存、信号灯,创建一个SOCKET监听描述符、一个SOCKET管理描述符、一组描述符传递通道、一个空闲通道,平台进程通过SOCKET监听描述符等待客户端连接请求,通过SOCKET管理描述符等待用户操作指令或诊断进程的汇报,采用IO多路复用技术(poll系统调用)同时兼顾这两个描述符;
步骤(4):诊断进程运行:实时检测各个服务进程的运行状态,对于单个周期运行持续时间超过设定时限的服务进程,强行杀死并向平台进程汇报,由平台进程予以重启,避免服务进程的无限期挂起,确保服务行为可控;同时实时检测各个服务进程存活与否,服务进程异常终止时向平台进程汇报,由平台进程予以重启,确保整个平台持续稳定运行;同时实时监控整个平台的繁忙比率,达到设定阈值时向平台进程汇报,在线增减服务进程的数目,实现处理能力的动态扩展;
步骤(5):业务逻辑处理:服务进程启动时在空闲通道中登记自己的进程编号,并等待读取自己专属的描述符传递通道。客户端请求到达时,由平台进程接受,从空闲通道中提取第一个空闲的服务进程编号,通过进程编号对应的描述符传递通道发送客户端描述符,对应的服务进程接收客户端描述符,处理请求的业务逻辑,之后向客户端返回应答结果,最后再次在空闲通道中登记自己的进程编号;
步骤(6):运行监视(可选):启动监视界面,从平台的进程管理共享内存中提取平台全局信息,如服务进程数目、繁忙比率,以及每个服务进程的运行信息,如:进程ID、通信报头信息、当前状态、单个周期运行持续时间、开发人员设定的自定义信息等,在屏幕上实时直观显示,采用定时信号驱动周期性自动刷新。
步骤(1)中:开发人员可以注册平台初始化逻辑、平台终止逻辑、服务进程初始化逻辑、客户端请求处理逻辑、等待客户端连接请求超时后的处理逻辑等个性化功能逻辑,进一步丰富平台功能,功能逻辑大多是可选的,开发人员按需注册,每个逻辑实现为一个独立的回调函数,注册过程相当于为平台注入了对应的扩展功能,平台运行时,在特定的运行上下文会调用开发人员事先注册的相应功能逻辑。
步骤(2)中:平台运行依赖一个配置文件指导自己的运行行为,配置文件中包含一组配置参数,有些参数是必须的,有些参数是可选的,如果可选参数没有配置,平台将使用其缺省值,配置参数包括平台关键字、服务进程数目、服务端口、通信报头格式定义、单个报文最大长度、服务进程繁忙比率上限下限、一组日志参数、一组通信超时参数等。
步骤(3)中:对于UDP通信协议,额外创建一个令牌通道,用以同步平台进程与服务进程对SOCKET监听描述符的争用,令牌通道中初始放入一个令牌,平台进程从中提取令牌,服务进程读取客户端请求报文后再次放入一个令牌,避免多个进程同时读取客户端请求报文;
进程管理共享内存包含平台全局信息,如:服务进程数目、服务端口、日志级别、服务进程繁忙比率,繁忙比率上限下限、平台进程ID、诊断进程ID、用户ID、启动时间、上次增加进程时间等,以及一组管理槽位,每个服务进程占用其中一个槽位,存放服务进程的私有信息,如:进程ID、运行状态、用户ID、组ID、执行时间和执行时限信息等;
信号灯作为多个进程同时访问进程管理共享内存时的同步加锁机制,避免共享内存数据读写混乱,只有两个取值0和1(0表示加锁,1表示解锁);描述符传递通道与空闲通道用以传递客户端的连接请求描述符。
步骤(4)中具体诊断步骤为:
步骤(a-1):诊断进程读取配置文件,对文件加锁,并记录诊断进程ID;
步骤(a-2):判断加锁是否失败,失败则结束,否则进入步骤(a-3);
步骤(a-3):连接进程管理共享内存;
步骤(a-4):判断所有服务进程是否检查完毕,是则进入步骤(a-8);否则对信号灯加锁并读取下一个服务进程的相关信息,解锁信号灯,进入步骤(a-5);
步骤(a-5):判断服务进程是否异常终止,是则通知平台进程对其重新启动,进入步骤(a-4);否则进入步骤(a-6);
步骤(a-6):获取当前时间,计算服务进程运行的持续时间,进入步骤(a-7);
步骤(a-7):判断持续时间是否超过设定时限,是则强行杀死服务进程并通知平台进程对其重新启动;进入步骤(a-4);
步骤(a-8):计算服务进程繁忙比率,判断繁忙比率是否超过设定的上限,是则通知平台进程增加服务进程,进入步骤(a-10);否则进入步骤(a-9);
步骤(a-9):判断繁忙比率是否小于设定的下限,并且当前服务进程数目大于配置文件中指定的服务进程数目,并且上次增加服务进程的时间在设定的间隔时间之前,是则通知平台进程减少服务进程;进入步骤(a-10);
步骤(a-10):断开与进程管理共享内存的连接,睡眠一个周期后返回步骤(a-3)。
步骤(5)中:由平台进程对外统一接受客户端请求,并通过描述符传递通道将客户端的请求描述符转交给空闲的服务进程,而不是多个服务进程同时抢夺客户端请求,可以避免某些版本的类UNIX系统中的惊群效应,所谓惊群效应指多个进程同时等待同一个描述符的事件,当描述符的事件触发时,所有等待这个事件的进程都被唤醒,但是只有一个进程能成功处理这个事件,其他进程都会失败,由此导致无谓的进程调度,降低系统性能;
对于UDP通信协议,平台进程并不接受客户端连接,因为UDP协议是无连接的,平台进程只是探测客户端的请求到达,通过描述符传递通道向空闲的服务进程发送一个通知,由具体的服务进程负责接收客户端请求报文。
对于常驻进程管理场景,操作步骤与典型的SOCKET服务场景类似,包括如下步骤:
步骤(1):开发人员编写编译程序:开发人员编写业务逻辑,与开发平台提供的静态库文件联合编译,生成平台程序与一组插件程序;
步骤(2):程序部署:按照项目要求调整开发平台附带的样例配置文件,提供必需的配置参数,在配置文件中指定平台类型为常驻进程管理平台;
步骤(3):基础框架运行:平台运行时创建一个平台进程、一个诊断进程,平台进程根据配置文件中的平台关键字创建进程管理共享内存、信号灯,创建一个SOCKET管理描述符,等待用户操作指令或诊断进程的汇报;
步骤(4):诊断进程运行:与平台进程配合,自动重启异常终止或僵死的插件进程,确保整个平台持续稳定运行;
步骤(5):业务逻辑处理:业务逻辑由插件程序承载,平台运行后可以通过用户指令依次启动多个插件程序,采用唯一的进程编号区分,插件程序独立于平台进程自主运行;
步骤(6):运行监视(可选):启动监视界面,采用定时信号驱动周期性自动刷新。
步骤(4)中,诊断进程不再监控平台的繁忙比率。
适合多种场景的SOCKET通信与进程管理通用平台发布为一个静态库,附带一组头文件、配套资料及代码样例,开发人员可以用来快速开发部署网络通信程序,平台内置功能包括:
配置参数管理模块:平台运行依赖一个配置文件指导自己的运行行为,配置文件中包含一组配置参数,有些参数是必须的,有些参数是可选的,如果可选参数没有配置,平台将使用其缺省值,配置参数包括平台类型(用以区分SOCKET服务场景与常驻进程管理场景)、平台关键字、服务进程数目、服务端口、同步异步通信模式、长连接标志、通信报头格式定义、单个报文最大长度、服务进程繁忙比率上限下限、一组日志参数、一组通信超时参数等,通信超时参数用以控制网络通信时限,避免接收或发送报文时长时间阻塞;
用户指令处理模块:通过命令行启动或停止平台,平台启动后可以查看平台运行概要信息,如:平台类型、平台关键字、服务端口、通信模式、服务进程数目、上次增减服务进程的时间、当前日志级别、诊断进程ID、已运行时间等,可以查看单个槽位中服务进程的详细信息,在线更新平台的配置参数;在SOCKET服务场景中,可以在线增减服务进程,可以在线开启关闭统计分析功能,以便跟踪交易请求在服务进程中的处理耗时,可以查看统计结果,如:交易处理最小时间、最大时间、平均时间等,并根据交易请求代码分组,维护人员可以根据耗时最长的交易处理记录进一步定位内在原因;对于常驻进程管理平台,可以根据进程编号单独启动或停止一个插件进程;
基础框架模块:平台运行时创建一个平台进程、一个诊断进程,平台进程根据配置文件中指定的平台关键字创建进程管理共享内存、信号灯、消息队列,创建一个SOCKET管理描述符,等待用户操作指令、服务进程的交易耗时数据或诊断进程的通知,根据诊断进程的通知重新启动异常终止的服务进程,确保整个平台持续稳定运行;在常驻进程管理场景中,接收用户操作指令运行插件程序承载业务逻辑,每个插件程序可以彼此不同,可以由不同的用户执行,可以单独启动或停止,在单个平台中集中管理多个用户的后台散乱任务;在SOCKET服务场景中,平台进程还创建一组服务进程处理具体的业务逻辑,其数目由配置参数决定,创建一个SOCKET监听描述符、一组描述符传递通道、一个空闲通道,对于UDP通信协议额外创建一个令牌通道,采用IO多路复用技术(poll系统调用)同时兼顾SOCKET管理描述符与SOCKET监听描述符:对于客户端的连接请求,接受并通过描述符传递通道将客户端的请求描述符转交给空闲的服务进程;根据用户指令在线增减服务进程或开启统计分析功能;接收并记录服务进程的交易耗时数据,前提是开启了统计分析功能;
诊断模块:实时监控各个服务进程的运行状态,对于单个周期运行持续时间超过设定时限的服务进程,强行杀死并向平台进程汇报,由平台进程予以重启,避免服务进程的无限期挂起,确保服务行为可控;同时实时监控各个服务进程存活与否,如果服务进程异常终止则向平台进程汇报,由平台进程予以重启,确保整个平台持续稳定运行;对于SOCKET服务场景同时实时监控整个平台的繁忙比率,达到设定阈值时向平台进程汇报,在线增减服务进程的数目,实现处理能力的动态扩展。
运行监视模块:启动监视界面,从平台的进程管理共享内存中提取平台全局信息,如服务进程数目、繁忙比率,以及每个服务进程的运行信息,如:进程编号、进程ID、通信报头信息、当前状态、单个周期运行持续时间、开发人员设定的自定义信息等,在屏幕上实时直观显示,采用定时信号驱动周期性自动刷新,内容较多时,分屏显示,通过按键上下翻屏;
日志管理模块:平台中每个进程对应一组日志文件,可以根据日志级别过滤日志信息,减少磁盘空间占用,提高性能并突出重要的日志信息,日志文件可以根据日期命名,可以设定日志文件的上限尺寸,超过设定上限时,自动备份并打开一个新的日志文件,原有备份副本被覆盖,可以设定循环使用的日志文件的数目,避免持续消耗磁盘空间,实现日志文件的自我管理,无需管理员手工定期清理日志信息。
配置参数管理模块中,对于SOCKET服务场景,一个关键的配置参数是通信报头格式定义,只有正确的定义了通信双方约定的通信格式,平台才能自动读取客户端的请求报文,通信报文由两部分组成:报头、报体,其中报头表示通信报文的元数据,报体表示具体的通信数据;报头格式定义通信报头中的字段组成,由逗号分隔的报头字段定义组成,每个报头字段定义由冒号分隔的4部分组成:标识:长度:数据类型:对齐方式;“标识”表示报头字段的含义(如:存放整个通信报文的长度),“长度”表示报头字段自身的长度占用,“数据类型”表示报头字段中携带数据的类型,支持字符型或整型,“对齐方式”表示数据的对齐与补齐方式,平台根据报头中的报文长度字段读取整个通信报文;
用户指令处理模块中,对于SOCKET服务场景,在线增减服务进程及统计分析相关功能需要平台框架的协助,对于常驻进程管理场景,根据进程编号单独启动一个服务进程需要平台框架的协助;向平台进程发送相应的指令,由平台进程执行请求的操作。
基础框架模块中:进程管理共享内存包含平台全局信息,如:平台类型、服务进程数目、服务端口、日志级别、服务进程繁忙比率,繁忙比率上限下限、平台进程ID、诊断进程ID、用户ID、启动时间、上次增加进程时间、同步异步通信模式标志等,以及一组管理槽位,每个服务进程占用其中一个槽位,存放服务进程的私有信息,如:进程ID、运行状态、用户ID、组ID、执行时间和执行时限信息等,对于常驻进程管理场景,还包含进程编号、插件程序名称等;
对于UDP通信协议,令牌通道用以同步平台进程与服务进程对SOCKET监听描述符的争用,令牌通道中初始放入一个令牌,平台进程从中提取令牌,服务进程读取客户端请求报文后再次放入一个令牌,避免多个进程同时读取客户端请求报文;
平台以异步通信模式运行时所述消息队列作为客户端请求消息的缓存,完整功能的实现需要一个额外的业务处理平台的协助,异步通信平台接收客户端请求消息,放入消息队列,由业务处理平台从中提取并处理,应答结果再次通过异步通信平台返回客户端;一个通信进程可以搭配一组处理进程,通信进程专职通信,处理进程专职业务逻辑处理,两者通过消息队列交换数据,灵活扩展处理能力,提升交易吞吐量。
用户指令要求开启统计分析功能时,平台框架分配一段局部内存,之后从服务进程接收的交易耗时数据在其中记录,用户指令要求显示统计分析结果时,平台框架从中导出所有的交易耗时数据由用户指令进一步加工显示,用户指令要求关闭统计分析功能时,平台框架释放之前分配的内存;
对于单纯的常驻进程管理场景,在平台框架中集中管理多个用户的后台散乱任务,每个进程可以以不同的用户身份执行,充分利用操作系统的用户管理功能实现权限隔离,用户只能启动停止或查看自己所辖的进程,而无权处理其他用户的进程,此时要求基础框架自身使用超级用户的身份执行。
为了更好的说明本申请的思想,下面给出更为详细的说明,结合附图对本发明进一步说明。
如图1所示,描述使用开发平台开发应用程序的整体流程。
开发平台附带了配套资料、静态库文件、头文件、样例源代码、样例Makefile、样例配置文件;
开发人员阅读配套资料,了解开发平台编程接口与运行机制;
结合项目需求完善修改样例源代码,编写个性化业务处理逻辑,调用编程接口注册业务逻辑回调函数,生成最终的源程序;
完善修改样例Makefile,执行make命令编译项目工程,编译源程序并连接静态库文件,生成最终的执行程序;
完善修改样例配置文件,与执行程序一起发布运行,运行时可以通过运行监视界面实时查看整个平台的运行状态。
make是一个命令工具,它解释Makefile中的指令完成目标工程的编译,在Makefile文件中描述了整个工程所有文件的编译顺序、编译规则。
如图2所示,描述同步通信模式SOCKET服务整体架构。
平台运行时创建一组进程(一个平台进程、一个诊断进程、一组服务进程),服务进程的数目由配置参数决定,平台进程根据配置文件中的平台关键字创建进程管理共享内存、信号灯,创建一个SOCKET监听描述符、一个SOCKET管理描述符、一组描述符传递通道、一个空闲通道,对于UDP通信协议额外创建一个令牌通道,平台进程通过SOCKET监听描述符等待客户端连接请求,通过SOCKET管理描述符等待用户操作指令、服务进程的交易耗时数据或诊断进程的汇报,采用IO多路复用技术(poll系统调用)同时兼顾这两个描述符;
所述进程管理共享内存包含平台全局信息,如:平台类型、服务进程数目、服务端口、日志级别、服务进程繁忙比率,繁忙比率上限下限、平台进程ID、诊断进程ID、用户ID、启动时间、上次增加进程时间、同步异步通信模式标志等,以及一组管理槽位,每个服务进程占用其中一个槽位,存放服务进程的私有信息,如:进程ID、运行状态、用户ID、组ID、执行时间和执行时限信息等;
信号灯作为多个进程同时访问进程管理共享内存时的同步加锁机制,避免共享内存数据读写混乱,只有两个取值0和1(0表示加锁,1表示解锁);
描述符传递通道与空闲通道协作,用以传递客户端的连接请求描述符,描述符传递通道采用UNIX域SOCKET机制实现,空闲通道可以采用普通的管道机制实现;
服务进程启动时在空闲通道中登记自己的进程编号,并等待读取自己专属的描述符传递通道,客户端请求到达时,由平台进程通过SOCKET监听描述符接受,从空闲通道中提取第一个服务进程编号,通过进程编号对应的描述符传递通道发送客户端描述符,对应的服务进程接收客户端描述符,处理请求的业务逻辑,之后向客户端返回应答结果,最后再次在空闲通道中登记自己的进程编号;
对于UDP通信协议,令牌通道用以同步平台进程与服务进程对SOCKET监听描述符的争用,令牌通道中初始放入一个令牌,平台进程从中提取令牌,服务进程读取客户端请求报文后再次放入一个令牌,避免多个进程同时读取客户端请求报文;
用户操作指令通过命令行启动或停止平台,在线控制平台行为;平台运行时查看运行概要信息,如:平台类型、平台关键字、服务端口、通信模式、服务进程数目、上次增减服务进程的时间、当前日志级别、诊断进程ID、已运行时间等,查看单个槽位中服务进程的详细信息,在线更新平台的配置参数,在线增减服务进程,在线开启关闭交易统计分析功能,以便跟踪交易请求在服务进程中的处理耗时,查看交易统计分析结果,如:交易处理最小时间、最大时间、平均时间等,并根据交易请求代码分组,维护人员可以根据耗时最长的交易处理记录进一步定位内在原因;
其中,在线增减服务进程及交易统计分析相关功能需要平台框架的协助,向平台进程发送相应的指令,由平台进程执行请求的操作;
用户指令要求开启统计分析功能时,平台框架分配一段局部内存,之后从服务进程接收的交易耗时数据在其中记录,用户指令要求显示统计分析结果时,平台框架从中导出所有的交易耗时数据由用户指令进一步加工显示,用户指令要求关闭统计分析功能时,平台框架释放之前分配的内存;
诊断进程运行时周期性检测各个服务进程的运行状态,对于单个周期运行持续时间超过设定时限的服务进程,强行杀死并向平台进程汇报,由平台进程予以重启,避免服务进程的无限期挂起,确保服务行为可控;实时监控各个服务进程存活与否,如果服务进程异常终止则向平台进程汇报,由平台进程予以重启,确保整个平台持续稳定运行;同时实时监控整个平台的繁忙比率,达到设定阈值时向平台进程汇报,在线增减服务进程的数目,实现处理能力的动态扩展;
运行监视程序运行时启动监视界面,从平台的进程管理共享内存中提取平台全局信息,如服务进程数目、繁忙比率,以及每个服务进程的运行信息,如:进程编号、进程ID、通信报头信息、当前状态、单个周期运行持续时间、开发人员设定的自定义信息等,在屏幕上实时直观显示,采用定时信号驱动周期性自动刷新。
如图3所示,描述常驻进程管理整体架构。
平台运行时创建一个平台进程、一个诊断进程,平台进程根据配置文件中的平台关键字创建进程管理共享内存、信号灯,创建一个SOCKET管理描述符,等待用户操作指令或诊断进程的汇报;
所述进程管理共享内存包含平台全局信息以及一组管理槽位,每个服务进程占用其中一个槽位,存放服务进程的私有信息,如:进程ID、运行状态、用户ID、组ID、执行时间、执行时限、进程编号、插件程序名称等,进程编号在整个平台中全局唯一,唯一标识一个插件进程;
业务逻辑由插件程序承载,每个插件程序可以彼此不同(图中分别使用六角形与圆形表示两类不同的插件程序),可以由不同的用户执行,可以独立启动或停止,平台运行后可以通过用户指令依次启动多个插件程序,采用唯一的进程编号区分,插件程序独立于平台进程自主运行;
启动插件程序时,用户操作指令获取自身的用户ID与组ID,解析命令行参数,如:进程编号、插件程序名称、附加参数等,通过SOCKET管理描述符发送给平台进程,平台进程在进程管理共享内存中查找空闲槽位,通过fork系统调用克隆一个子进程,在对应槽位中记录插件程序的私有信息,如:进程ID,以及用户指令传递的其他参数;获取自身的用户ID,如果自身ID是普通用户,则使用自身ID覆盖用户指令发送的用户ID;在子进程中,检查自身的用户ID,如果自身ID为超级用户,则首先切换自己的身份,成为用户指令对应的用户,最后执行插件程序覆盖当前执行映像,插件程序在子进程中独立运行;
上述启动插件程序的过程中,平台进程与子进程之间使用了一个临时的同步管道,子进程启动后等待同步管道中的通知,平台进程完成进程管理共享内存中相应槽位的数据维护之后,通过同步管道向子进程发送一个通知,然后子进程才得以继续运行;
在平台框架中集中管理多个用户的后台散乱任务,每个插件程序可以以不同的用户身份执行,充分利用操作系统的用户管理功能实现权限隔离,用户只能启动停止或查看自己所辖的进程,而无权处理其他用户的进程,此时要求基础框架自身使用超级用户的身份执行;
诊断进程与平台进程配合,自动重启异常终止或僵死的插件进程,确保整个平台持续稳定运行;
运行监视启动监视界面,实时查看平台全局信息与插件程序的运行状态,采用定时信号驱动周期性自动刷新。
如图4所示,描述异步通信模式整体架构。
平台以异步通信模式运行时所述消息队列作为客户端请求消息的缓存,完整功能的实现需要一个额外的业务处理平台的协助,异步通信平台接收客户端请求消息,放入消息队列,由业务处理平台从中提取并处理,应答结果再次通过异步通信平台返回客户端;一个通信进程可以搭配一组处理进程,通信进程专职通信,处理进程专职业务逻辑处理,两者通过消息队列交换数据,灵活扩展处理能力,提升交易吞吐量;
异步通信平台以SOCKET服务模式运行,处理平台以常驻进程管理模式运行;
在通信平台中,客户端请求到达之后由平台进程接受,得到客户端连接描述符,通过描述符传递通道发送给空闲的通信进程,通信进程创建一个UNIX域的监听SOCKET,作为与处理平台中的处理进程交互的通道,之后通信进程通过IO多路复用技术(poll系统调用)同时兼顾客户端描述符、UNIX域监听SOCKET:客户端发送请求数据时,通信进程接收,绑定自己的进程序号后写入请求队列;处理进程读取客户端请求消息,处理业务逻辑,根据消息绑定的通信进程序号连接对应的通信进程的UNIX域监听SOCKET并发送应答结果,通信进程接受处理进程连接请求,得到处理进程连接描述符,之后通信进程的IO多路复用操作将兼顾这个新的处理进程连接描述符,从中读取处理进程应答结果并转发给客户端;
在处理平台内部,采用了与SOCKET服务模式类似的分发逻辑,避免多个处理进程同时抢夺客户端请求队列,可以避免某些版本的类UNIX系统中的惊群效应;平台启动时创建一个空闲通道与一组数据传输通道,再采用插件程序的方式运行一个分发进程与一组处理进程,处理进程启动时在空闲通道中登记自己的进程编号,并等待读取自己专属的数据传输通道,分发进程从请求队列中提取客户端请求,从空闲通道中提取第一个空闲的处理进程编号,通过进程编号对应的数据通道发送客户端的请求数据,对应的处理进程接收并处理请求的业务逻辑,之后向请求数据对应的通信进程发送应答结果,最后再次在空闲通道中登记自己的进程编号;
随着处理平台中处理进程的增多,通信进程的IO多路复用操作将兼顾更多的描述符,通信平台中每个通信进程都有机会收到所有处理进程的连接请求,因为通信进程接收并写入请求队列的客户端请求可能被任何一个处理进程处理;
完整的数据流程包含:
1、客户端发起连接请求;
2、通信平台中的平台进程接受连接请求,得到客户端连接描述符,通过事先创建的描述符传递通道传递给某个空闲的通信进程,关闭与客户端的连接;
3、通信进程接管与客户端的连接,读取客户端请求消息,绑定自己的进程序号后,放入请求队列;
4、处理平台中的分发进程从请求队列中读取请求,通过事先创建的数据传输通道分发给某个空闲的处理进程;
5、处理进程处理完成之后,连接请求消息中的进程序号对应的通信进程,并发送应答结果;
6、通信进程转发应答结果给客户端;
7、最终,请求消息由哪个通信进程接收,应答结果就由哪个通信进程返回。
如图5所示,诊断模块运行时读取命令行指定的配置文件,获取管理参数(如平台关键字、睡眠间隔等),之后后台常驻执行,连接进程管理共享内存,从中提取服务进程运行信息,周期性检测各个进程的运行状态;
为避免自我诊断模块重复启动造成的混乱,程序启动后在一个文件(通常放置在/var/run目录下)中记录当前进程的进程ID,并对文件本身加锁,重复启动的自我诊断模块再次对同一个文件加锁时,因失败退出,自我诊断模块退出(无论正常或异常退出)时,文件锁自动释放;
进程管理共享内存中记录着服务进程的进程ID,自我诊断模块据以判断进程存活与否,如果服务进程异常终止,则通知平台进程对其重新启动,确保整个平台持续稳定运行;
进程管理共享内存中记录着服务进程的单个周期运行开始时间、执行时限信息,自我诊断模块据以计算服务进程的单个周期运行持续时间,对于超过设定时限的进程,强行杀死,并通知平台进程对其重新启动,避免进程的无限期挂起,确保服务行为可控;
在SOCKET服务场景中,自我诊断模块实时监控整个平台的繁忙比率,达到设定阈值时向平台进程汇报,在线增减服务进程的数目,实现处理能力的动态扩展。
如图6所示,透明转发平台以SOCKET服务同步通信模式运行,为了突出与客户端及目标之间的协作关系,图中简化了通信平台自身的一些细节;
在通信平台的配置文件中添加透明转发参数,指定目标的IP及端口,客户端发起连接请求时,首先依然由平台进程接受,通过空闲通道转发给空闲的服务进程,服务进程接收客户端描述符,之后建立与目标的SOCKET连接,得到目标描述符,然后采用IO多路复用技术(poll系统调用)同时兼顾这两个描述符;
其中任何一个描述符具备可以读取的数据时,服务进程读取数据,并发送给另外一个描述符,周而复始。
服务进程收到客户端描述符之后,与客户端的后续交互不再通过平台进程,直接对话。
任何一方关闭连接时,整个通信流程结束,回到初始状态。
上述虽然结合附图对本发明的具体实施方式进行了描述,但并非对本发明保护范围的限制,所属领域技术人员应该明白,在本发明的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本发明的保护范围以内。