CN113660307B - 一种算法综合集成服务系统 - Google Patents
一种算法综合集成服务系统 Download PDFInfo
- Publication number
- CN113660307B CN113660307B CN202110814006.2A CN202110814006A CN113660307B CN 113660307 B CN113660307 B CN 113660307B CN 202110814006 A CN202110814006 A CN 202110814006A CN 113660307 B CN113660307 B CN 113660307B
- Authority
- CN
- China
- Prior art keywords
- algorithm
- data
- module
- service system
- request
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000004422 calculation algorithm Methods 0.000 title claims abstract description 188
- 230000006870 function Effects 0.000 claims abstract description 91
- 230000006854 communication Effects 0.000 claims abstract description 65
- 238000004891 communication Methods 0.000 claims abstract description 64
- 238000012545 processing Methods 0.000 claims abstract description 64
- 238000007405 data analysis Methods 0.000 claims abstract description 54
- 238000004364 calculation method Methods 0.000 claims abstract description 46
- 230000003068 static effect Effects 0.000 claims abstract description 23
- 238000000034 method Methods 0.000 claims description 42
- 230000008569 process Effects 0.000 claims description 26
- 230000008859 change Effects 0.000 claims description 13
- 238000012544 monitoring process Methods 0.000 claims description 10
- 238000004458 analytical method Methods 0.000 description 8
- 230000008901 benefit Effects 0.000 description 6
- 238000006243 chemical reaction Methods 0.000 description 6
- 230000005540 biological transmission Effects 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000000694 effects Effects 0.000 description 2
- 230000010354 integration Effects 0.000 description 2
- 238000009795 derivation Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000002243 precursor Substances 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 238000010845 search algorithm Methods 0.000 description 1
- 239000000725 suspension Substances 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/02—Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/2866—Architectures; Arrangements
- H04L67/30—Profiles
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/34—Network arrangements or protocols for supporting network services or applications involving the movement of software or configuration parameters
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/60—Scheduling or organising the servicing of application requests, e.g. requests for application data transmissions using the analysis and optimisation of the required network resources
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/161—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields
- H04L69/162—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields involving adaptations of sockets based mechanisms
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/22—Parsing or analysis of headers
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Computer And Data Communications (AREA)
- Stored Programmes (AREA)
Abstract
本公开提出了一种算法综合集成服务系统,包括:HTTP通信模块,被配置为将数据请求作为输入数据,并向数据分析处理模块发送所述数据请求。数据分析处理模块,内置有静态库和算法数据表,所述数据分析处理模块被配置为基于所述静态库确定所述数据请求对应的算法相关参数;以及基于所述算法数据表调用所述算法相关参数对应的算法函数,依据所述算法函数获得计算结果作为输出数据发送给所述HTTP通信模块。本公开的算法综合集成服务系统可以为各类业务系统提供统一算法模型支撑,实现统一的调用方式和算法参数规范,大大提高不同语言开发的系统之间的调用效率。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种算法综合集成服务系统。
背景技术
随着信息技术蓬勃发展,编程语言增多,各语言优势各有特点,适用场景不同。很多科学问题研究方法复杂,综合性极强,众多研究人员采用的编程语言不同,算法接口种类繁多,很难实现成果集成和高效使用。
现有技术无法解决跨语言、多平台调用问题,不能广泛应用于工程领域,也没有解决并发调用的问题。
发明内容
本发明实施例提供一种算法综合集成服务系统,实现不需要进行侵入式修改,为各类业务系统(客户端)提供统一算法模型支撑,实现统一的调用方式和算法参数规范,大大提高不同语言开发的系统之间的调用效率。
本公开实施例提出一种算法综合集成服务系统,包括:
HTTP通信模块,被配置为将数据请求作为输入数据,并向数据分析处理模块发送所述数据请求;
数据分析处理模块,内置有静态库和算法数据表,所述数据分析处理模块被配置为基于所述静态库确定所述数据请求对应的算法相关参数;以及基于所述算法数据表调用所述算法相关参数对应的算法函数,依据所述算法函数获得计算结果作为输出数据发送给所述HTTP通信模块。
在一些实施例中,所述HTTP通信模块内置有小型HTTP服务器静态库libmicrohttpd,所述小型HTTP服务器静态库被配置为建立Socket套接字,并基于配置文件所设定的端口接收各个业务系统发送数据请求。
在一些实施例中,所述HTTP通信模块还被配置为基于各个业务系统发送的数据请求进行HTTP协议解析,并将解析结果封装后发送至所述数据分析处理模块,以及将所述输出数据进行封装处理;
其中各个业务系统发送的数据请求包括HTTP请求头,所述HTTP请求头部包括用于指示各数据请求的来源。
在一些实施例中,所述HTTP通信模块还被配置为在所述Socket套接字启动后,启动一个主监听进程daemon,在接收到数据请求的情况下,通过所述主监听进程daemon根据线程池中的子线程的工作情况,将所述数据请求分配给当前空闲或任务量低的子线程。
在一些实施例中,所述HTTP通信模块还被配置为若同时接收到多个数据请求,则按照接收多个数据请求的顺序利用多个子线程进行并行处理,超出最大连接数量的数据请求被丢弃。
在一些实施例中,所述HTTP通信模块还被配置为生成状态变更数据;
所述算法综合集成服务系统还包括日志记录模块,被配置为记录所述输入数据、所述输出数据以及所述状态变更数据。
在一些实施例中,还包括算法库管理模块,其配置有多个算法功能库,且各算法功能库配置有对应的算法编号;
所述数据分析处理模块基于所述算法数据表调用所述算法相关参数对应的算法函数,依据所述算法函数获得计算结果的过程包括:
所述数据分析处理模块基于所述静态库将所述数据请求转换为包含算法编号和入参主体的所述算法相关参数,并基于所述算法数据表向所述算法库管理模块传递所述算法相关参数;
所述算法库管理模块接收到所述算法相关参数后,基于所述算法编号匹配相应的算法函数,并在相应的算法功能库完成函数运算并向所述数据分析处理模块返回计算结果。
在一些实施例中,所述算法库管理模块还被配置为在计算失败的情况下,返回错误信息。
在一些实施例中,还包括算法监控模块,被配置为基于配置文件对所述HTTP通信模块进行状态变更,以及提供用户界面,并通过所述用户界面向用户展示系统的运行状态。
本发明实施例通过HTTP通信模块实现数据请求的分配,并通过数据分析处理模块完成数据函数的调用从而获得计算结果,本公开的技术方案不需要进行侵入式修改,为各类业务应用系统提供统一算法模型支撑,实现统一的调用方式和算法参数规范,大大提高不同语言开发的系统之间的调用效率。同时本发明方法还能实现多平台之间的兼容。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1为本公开实施例的系统模块关系。
图2为本公开实施例的HTTP通信模块执行流程和数据流动。
图3为本公开实施例的并发处理流程.
图4为本公开实施例的系统启动工作流程。
图5为本公开实施例的日志记录模块工作原理。
图6为本公开实施例的算法计算流程。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
本公开实施例提出一种算法综合集成服务系统,包括:HTTP通信模块,被配置为将数据请求作为输入数据,并向数据分析处理模块发送所述数据请求。数据分析处理模块,内置有静态库和算法数据表,所述数据分析处理模块被配置为基于所述静态库确定所述数据请求对应的算法相关参数;以及基于所述算法数据表调用所述算法相关参数对应的算法函数,依据所述算法函数获得计算结果作为输出数据发送给所述HTTP通信模块。
如图1、如图2所示,本公开的算法综合集成服务系统解决跨语言调用、多平台运行的算法综合集成组件,可以使用C/C++语言实现,并利用Qt的图形界面库。包括HTTP通信模块用于实现建立HTTP服务通信,以及用于处理并发式通讯和计算。例如用于可以接收多个不同业务系统的数据请求进行并发调度和运算。本示例中HTTP通信模块还用于数据的传递,例如HTTP通信模块在接收到数据请求之后,可以提取、解析其主体内容,然后以JSON字符串的格式封装后发送给数据分析处理模块。
本示例的系统还包括数据分析处理模块主要用于解析HTTP通信模块发送的数据请求。数据分析处理模块可以内嵌JSON静态库和算法数据表,数据分析处理模块可以利用静态库和算法数据表来实现算法函数的调用。例如数据分析处理模块可以基于所述静态库确定所述数据请求对应的算法相关参数;以及基于所述算法数据表调用所述算法相关参数对应的算法函数。然后可以依据算法函数获得计算结果作为输出数据发送给所述HTTP通信模块。HTTP通信模块根据该输出数据向用户反馈。
本发明实施例通过HTTP通信模块实现数据请求的分配,并通过数据分析处理模块完成数据函数的调用从而获得计算结果,本公开的技术方案不需要进行侵入式修改,为各类业务应用系统提供统一算法模型支撑,实现统一的调用方式和算法参数规范,大大提高不同语言开发的系统之间的调用效率。同时本发明方法还能实现多平台之间的兼容。
在一些实施例中,所述HTTP通信模块内置有小型HTTP服务器静态库libmicrohttpd,所述小型HTTP服务器静态库被配置为建立Socket套接字,并基于配置文件所设定的端口接收各个业务系统发送数据请求。也即本示例中HTTP通信模块可以内嵌一个C语言编写的小型HTTP服务器静态库libmicrohttpd,可以在Linux和Windows系统下编译和运行,从而实现多系统的兼容。在HTTP通信模块启动时,还可以建立IPv4 Socket套接字。通过该Socket套接字绑定配置文件所设定的端口,实现接收各个业务系统发送数据请求的功能。当然还可以利用MHD_start_daemon()API即可建立通信服务,不同方式的通信(poll、epoll等)及其配置参数(最大连接数量、请求处理回调函数等)可由其支持的可变参数列表设定。
在一些实施例中,所述HTTP通信模块还被配置为基于各个业务系统发送的数据请求进行HTTP协议解析,并将解析结果封装后发送至所述数据分析处理模块,以及将所述输出数据进行封装处理;其中各个业务系统发送的数据请求包括HTTP请求头,所述HTTP请求头部包括用于指示各数据请求的来源。本示例中,HTTP通信模块还可以用于实现HTTP协议解析和封装。各业务系统发送的数据请求的序列化数据包括HTTP请求头部、请求内容和内容类型。本示例中HTTP通信模块可以检查请求内容类型,根据结果完成解析和计算,并将结果传入数据分析处理模块。数据分析处理模块的返回结果通过HTTP通信模块封装上HTTP请求头部和内容类型,返回给相应的请求地址,从而完成一次请求流程。
HTTP请求的头部可以是业务系统(客户端)的HTTP地址,表示该请求的来源;尾部是说明字段(如plain-text、urlencoded等),说明主体部分内容的解析方式;主体部分内容是被编码过的字符串,服务端和客户端解析请求内容时均会将其转换成可阅读的文字。例如,在尾部是plain-text类型时,请求内容应当直接以字符串格式提取。尾部是urlencoded类型时,请求内容是被编码过的。为支持跨平台的通信,本示例中可以除英文字母和数字之外的字符以其UTF-8格式的字节编码进行标示,用%后面加两个十六进制数位表示一个字节(如%AB表示字节0xAB)。
在一些实施例中,所述HTTP通信模块还被配置为在所述Socket套接字启动后,启动一个主监听进程daemon,在接收到数据请求的情况下,通过所述主监听进程daemon根据线程池中的子线程的工作情况,将所述数据请求分配给当前空闲或任务量低的子线程。本示例中HTTP通信模块用于处理并发式通讯和计算的过程可以是,当socket套接字启动成功后建立一个主监听进程daemon,实时监听业务系统发送的算法请求。如图3所示,该daemon启动时还会同时建立、维护一个由子线程(worker线程)构成的线程池,线程池的大小、每个子线程支持的最大连接数量和分配的最大内存空间均由MHD_start_daemon()预先指定。每个子线程均可与多个客户端(业务系统)IP地址建立HTTP连接。当接收到客户端发送过来的HTTP请求时,daemon将根据线程池中的子线程的工作情况(正在处理的请求数量),将该请求分配给当前空闲的或任务量最低的子线程,实现并发计算。如所有线程池均满则丢弃此条请求。
在一些实施例中,所述HTTP通信模块还被配置为若同时接收到多个数据请求,则按照接收多个数据请求的顺序利用多个子线程进行并行处理,超出最大连接数量的数据请求被丢弃。也即每个子线程若收到多个请求,则将其按照接收顺序串行处理,超出最大连接数量的请求会被丢弃,全部处理完成之后回到空闲状态。并发数量的理论上限是线程池的大小乘以每个子线程允许的最大连接数量。处理请求时,多个子线程会解析请求内容,调用由MHD_start_daemon()指定的回调函数与数据分析处理模块进行数据交换。收到数据分析处理模块的返回结果后,将其重新封装成HTTP URL(默认采用urlencode方式),发送回对应的客户端系统,完成一次请求处理流程。
在并发方面,本示例中HTTP通信模块支持select,poll和epoll三种I/O复用机制。select是三者中最早的I/O复用机制,用fd(file descriptor,文件描述符)建立和I/O流一对一的关系,根据超时时间设置,遍历fd表,把活跃的fd拷贝到用户地址空间进行操作。这种方式所支持的并发数量受到fd_set(整数值,一般是1024)限制,而且操作时需要遍历整个fd表,运行开销较大,时间复杂度为O(n),当并发数量增加时效率会显著下降。若要修改fd_set的值,需要对程序进行重新编译(换句话说,用户无法灵活配置fd_set的值)。poll是对select的改进,用pollfd链表结构代替了fd_set,消除了最大fd数量的限制,但仍需遍历链表对fd进行操作,时间复杂度为O(n)。epoll(event poll)对select和poll进行了大改进,不采用遍历列表的低效率方式。在epoll中,每个fd注册了一个回调函数。当fd状态变更时,会调用此回调函数通知epoll,提醒系统对其进行适当的操作。这种方式大幅提高了性能,对流操作的时间复杂度降到O(1),在并发数量较大时优势较为明显。epoll是Linux特有的I/O复用机制,Windows不支持。
在一些实施例中,所述HTTP通信模块还被配置为生成状态变更数据;所述算法综合集成服务系统还包括日志记录模块,被配置为记录所述输入数据、所述输出数据以及所述状态变更数据。如图1所示,算法综合集成服务系统还包括日志记录模块,HTTP通信模块还可以用于生成状态变更数据。模块状态发生变更时,会将状态变更的具体内容和发生时间输出到日志记录模块。日志记录模块还可以记录相应的输入数据以及输出数据。
在一些实施例中,还包括算法库管理模块,其配置有多个算法功能库,且各算法功能库配置有对应的算法编号;所述数据分析处理模块基于所述算法数据表调用所述算法相关参数对应的算法函数,依据所述算法函数获得计算结果的过程包括:所述数据分析处理模块基于所述静态库将所述数据请求转换为包含算法编号和入参主体的所述算法相关参数,并基于所述算法数据表向所述算法库管理模块传递所述算法相关参数;所述算法库管理模块接收到所述算法相关参数后,基于所述算法编号匹配相应的算法函数,并在相应的算法功能库完成函数运算并向所述数据分析处理模块返回计算结果。
如图1所示,本示例中数据分析处理模块可以用于解析请求数据。数据分析处理模块内嵌JSON静态库,利用其内置的reader类的parse函数将HTTP通信模块的请求内容转换为JSON对象。转换成功后,即可利用下标运算读取JSON对象的任何内容,从而符合格式规范的请求。转换后的JSON对象至少应当包含算法编号和入参主体。算法编号是数据分析处理模块查询和调用对应算法功能库的关键字依据,入参主体(为嵌套的JSON子对象)则为各算法功能库的请求参数。其中算法功能库可以配置于算法库管理模块。
数据分析处理模块还可以用于匹配传递,数据分析处理模块内置算法数据表,为一字符串结构体数组,数组的每个元素的结构体可以表示算法头部信息。算法编号可以为关键字,所有输入参数均需包含。算法模块名称是从系统运行根目录到算法功能库的相对路径。算法函数表示算法功能库所指示的函数接口。数据分析处理模块还可以根据内置算法数据表和请求内容中的算法编号匹配实现向对应算法功能库中的算法函数传递参数。在一些实施例中,所述算法库管理模块还被配置为在计算失败的情况下,返回错误信息。
算法库管理模块集成有若干算法功能库,每个算法功能库可以对应一个算法编号。算法库管理模块可以从来自数据分析处理模块特定算法请求的JSON对象提取请求参数,结构化后再输出至对应的算法功能库,并且接收算法功能库的返回结构化数据转换成JSON对象输出至数据分析处理模块。算法功能库是一个运行某种特定算法的程序和文件集合,通常一个特定的算法功能包含若干个按顺序排列的步骤,接收算法库管理模块发送的传递参数并返回计算结果。若计算失败,会返回错误信息给算法库管理模块。算法功能库可以仅在需要使用时被加载和调用,调用完毕后会被卸载(释放资源)。
数据分析处理模块还可以用于分析处理,根据相应算法功能库的算法函数的返回值表示结果码,结果码为0表示计算成功,非0表示失败。每一次的计算均为独立的工作,单次计算失败不会影响以后的运行。若算法库管理模块返回异常,数据分析处理模块还可以解析异常状态,并执行异常处理流程,将相关错误信息反馈至HTTP通信模块。
系统可能返回的结果码的一览表如表1所示。在系统设计优化的过程中,消除了部分错误产生的根源,对应的结果码不在下表列出。
表1系统结果码一览
错误码 | 值 | 含义 |
EUNKN | -1 | 未知错误 |
SUCCESS | 0 | 计算成功 |
EMODLOAD | 1 | 加载外部模块失败 |
EMODFUNC | 2 | 没有找到模块导出函数 |
EJSPARSE | 3 | 从JSON字符串转换到Json::Value出错 |
EJSTYCONV | 4 | JSON参数类型转换错误 |
EPARRANGE | 5 | JSON参数超出规定范围 |
ECALC | 6 | 调用算法文件时返回错误信息 |
EUNSUP | 8 | 不支持的算法接口 |
ENULLREQ | 10 | 输入请求为空指针 |
EMUTEX | 13 | 在需要启用互斥锁的算法中未能启动互斥锁 |
在一些实施例中,还包括算法监控模块,被配置为基于配置文件对所述HTTP通信模块进行状态变更,以及提供用户界面,并通过所述用户界面向用户展示系统的运行状态。
如图1所示,还包括算法监控模块,本示例中算法监控模块可以用于从配置文件中加载通信配置,控制HTTP通信模块的运行状态,产生的状态变更信息通过日志记录模块显示在界面上,实时监控算法运行情况,方便用户监视和处理。支持通过对话框界面修改通信配置信息,并保存到配置文件,方便用户根据需要选择运行的通信端口。当配置修改生效后,可以自动重新启动HTTP通信服务。
下面进一步给出本公开的算法综合集成服务系统如图4所示,可以包括如下步骤。
步骤10:启动系统,加载配置。
步骤101读取配置
系统开始运行后,首先启动算法监控模块,在config文件夹下找到配置文件config.ini,加载关于通信的配置信息,包含IP地址和端口。读取到的配置信息存储在Config结构体中。Config结构体定义如下:
步骤102生成用户界面
系统实例化一个主窗口类,用于实时在界面上显示日志记录。界面上显示最新的100条日志,完整的日志被记录在log文件夹下的日志文件中。
步骤20:启动HTTP通信服务,进入监听
步骤201加载数据分析处理模块
在主窗口实例化的过程中,会加载数据分析处理模块,若加载失败,将失败信息传入日志记录模块并显示在界面上,日志记录的原理和步骤详见步骤3。只有加载成功,才会启动HTTP服务。加载成功后,数据分析处理模块的导出函数的地址被存放在一个全局函数指针变量entry中。数据分析处理模块在系统的整个运行期间均处于被加载状态,即使HTTP服务重新启动也不会中止。
函数指针entry的定义如下:
typedef int(*entry)(const char*request,std::string&answer);
步骤202启动daemon
加载数据分析处理模块后,系统根据Config的配置信息加载HTTP通信模块。HTTP通信模块的加载通过libmicrohttpd库的MHD_start_daemon()API完成,启动成功会生成一个守护进程daemon。该函数包含一个可变长度的参数列表,通过传入相应的属性和配置数据,可以实现不同的配置。
MHD_start_daemon()执行的过程中会调用Windows下的ws2_32.dll或Linux下的socket.so的API,根据配置信息尝试绑定IP地址和端口,建立socket。通过MHD_start_daemon()传入一个用于执行请求处理的回调函数callback(),使得daemon能够处理请求。callback()函数返回值必须是int类型,且参数列表如下形式:
例如,若绑定Config配置的端口号,用上述callback()函数处理请求,超时时间120秒,建立一个大小100的线程池,每个连接使用64KB的内存,则MHD_start_daemon()的入参列表应当如下所示(可以根据业务需求增加新的属性字段和参数):
可变参数列表部分的所有参数均会存储在一个struct MHD_daemon结构体相应的属性字段中。最后一个参数是MHD_OPTION_END,用于结束参数列表。
如果daemon建立失败,将失败信息传入日志记录模块并显示在界面上,并且HTTP服务不会运行,直至用户手动更改配置。
如果daemon建立成功,则HTTP服务将启动,开始监听客户系统发送的数据,同时启动成功的日志会显示在界面上并记录进日志。
步骤203更改配置与重新启动HTTP服务
无论HTTP服务是否启动成功,用户均可在用户界面手动更改配置。更改生效后,会写入配置文件,同时修改Config结构体的属性,调用HTTP通信模块的MHD_stop_daemon()终止当前的HTTP服务,再调用MHD_start_daemon()重新启动服务。HTTP服务的中止和重启均视为状态变更,会被写入日志文件并显示在界面上。
步骤30:接收、解析请求信息
步骤301接收、解析URL
算法综合集成服务组件和各业务系统可以分布在不同计算机上,采用不同语言开发,通过IPv4 socket套接字互相传递信息。为了在跨平台环境下正确读取信息,所有的字符编码统一采用UTF-8格式。
当各业务系统发送一条请求消息时,libmicrohttpd会根据其尾部说明信息解析其URL的主体部分。默认情况下,请求的URL尾部为application/x-www-form-urlencoded,主体部分是请求字符串的UTF-8编码,解析成功后转换为const char*格式的C字符串request。
步骤302记录请求日志
如图5所示,解析成功后,request以(*cls)->request的形式被传入回调函数callback(),callback()函数调用日志记录函数reclog(QString&info)记录日志文件。日志记录和显示的同步通过信号槽实现。主窗口类中定义了一个显示日志的槽函数showLog(QString&info),该函数被QObject::connect()函数和信号logSig(QString&info)关联。在reclog()函数内部有一条语句emit logSig(info)。在reclog执行时,日志的内容也会通过logSig()信号触发showLog()的调用,日志的内容通过info形参传递。
步骤40:传递输入参数
步骤401输入request参数
记录日志后,callback()函数对entry指针解引用访问数据分析处理模块。entry指针指向的是一个导出函数int analysis(const char*request,std::string&answer)。其中request参数即为callback()函数接收到的解析过的请求数据,正常情况下应当是满足格式规范的JSON字符串;answer是最终由算法文件所产生的计算结果,当计算成功时是JSON字符串,失败时则是错误信息。analysis()函数的返回值代表结果码,为0(SUCCESS)时计算成功,非0则是失败。
步骤402将request转换为JSON对象
analysis()函数执行的过程中会使用到数据分析处理模块中内嵌的JSON CPP库,调用Json::Reader类的bool parse(const char*request,Json::Value&out)方法,将request转换成可以通过下标访问数据属性的Json::Value对象(以下简称Value对象)。如果转换成功,通过引用形参返回out对象,并返回true,否则返回false。转换失败时,analysis()跳过后续步骤,在answer中记录错误信息并返回错误码EJSPARSE。
步骤50:查找算法模块
转换成功后的Value对象至少应当包含两个数据属性。其一是算法编号code,是算法查询和调用的依据;其二是入参主体,为嵌套的JSON子对象,是算法功能库入参的前身。
数据分析处理模块内置一个算法列表,为一个类型为struct AlgoSet的一维数组,数组中的每个元素为AlgoSet类型的算法头部信息。算法头部包含如下属性:
其中,code表示算法编号,lib表示指向算法模块的路径,entry表示算法模块的导出函数名称。当算法数量比较多时,可以采用二分查找法等方法提高查找效率。
模块在AlgoSet[]数组中查找有对应算法编号的头部。若未查找到,返回错误码EUNSUP。若查找到,则会通知算法库管理模块加载相应的算法功能库,并将JSON对象传入算法管理模块。
下面将以计算斐波那契数列某一项的简单算法为示例描述算法计算模块工作的过程,实际应用时的算法可能远远比其复杂。步骤60~80同理。
例如,如果AlgoSet[10]={“S10”,“fibonacci”,“calculate”},而传入数据分析管理模块的JSON是{“code”:“S10”,“param”:{“a1”:1,“a2”:1,“order”:2,“index”:10}},则数据分析处理模块会通知算法库管理模块加载fibonacci库的calculate()导出函数,并将JSON对象的“param”嵌套对象提取出来,作为输入参数传入算法库管理模块。
步骤60:结构化输入数据
步骤601将JSON对象转换为C/C++类型
算法库管理模块收到JSON并加载算法功能库fibonacci后,会按照calculate()导出函数的参数列表对param对象进行结构化。例如,如果calculate()函数的声明是:
int calculate(int a1,int a2,int order,int index,char*errmsg);
则算法库管理模块会建立四个变量:
int a1=param[“a1”].asInt();
int a2=param[“a2”].asInt();
int order=param[“order”].asInt();
int index=param[“index”].asInt();
建立变量语句被套在try-catch语句块中,JSON CPP的as[Type]()系列方法在类型不匹配时会抛出std::runtime_error异常。如果try-catch捕获到异常,则跳过下述计算步骤,返回错误码EJSTYCONV。
步骤602验证参数合理性
读取参数后,还要检验参数的合理性,如a1、a2不能是负数,order必须大于等于2,index必须是正整数。如果不满足这些条件,将返回EPARRANGE。对于其他算法,如果能确保参数一定满足合理性范围,可以省略合理性检验来提高正式发布版的运行效率。
步骤70:计算
如图6所示,参数转换成功之后,算法库管理模块将这些参数传入calculate()函数进行计算。如果计算成功,calculate()函数会返回首项和第二项均为1的二阶斐波那契数列的第10个元素,即34。计算成功时,错误信息errmsg为nullptr。
如果传入的参数过大,容易导致溢出错误。当calculate()函数检测到溢出时,会在错误信息errmsg中写入“参数过大,结果溢出”,并返回-1(无效结果,该结果不会被写入answer中)。
步骤80:反馈计算结果
如图6所示,计算完成后,计算结果和错误信息被反馈至算法库管理模块。算法库管理模块据此建立一个Value对象j_ans,并设定
j_ans[“answer”]=34;//计算失败时,j_ans[“answer”]=Json::nullValue
j_ans[“errcode”]=SUCCESS;//计算失败时,j_ans[“errcode”]=ECALC
j_ans[“errmsg”]=Json::nullValue;//计算失败时,j_ans[“errmsg”]=errmsg
再利用JSON CPP的toStyledString()方法将j_ans序列化为JSON字符串,和结果码一同反馈给数据分析处理模块的调用函数analysis()。数据分析处理模块将JSON字符串写入引用形参answer,卸载算法库释放资源,再将answer错误码返回给HTTP通信模块的callback()函数。
步骤90:发送计算结果,回到监听状态
HTTP通信模块收到结果数据answer,将其转换为UTF-8编码并封装成HTTP URL(默认添加头部为系统服务端HTTP地址,尾部为application/x-www-form-urlencoded),发送回相应的业务系统端,并将输出数据和状态变化传输给日志记录模块,callback()返回MHD_YES,完成一次完整的计算通信过程,回到监听状态,直至接收到下一条请求或系统退出为止。
上述情况是callback()调用成功的情形。如果callback()函数执行中间发生错误(例如用new分配内存空间时抛出std::bad_alloc异常),则会跳过后面的计算过程并返回MHD_NO。每次的调用均为独立工作,互不影响。
步骤100:退出系统
系统退出时,会调用MHD_stop_daemon(),强制终止当前正在处理的请求,销毁线程池,释放daemon资源,关闭socket,停止HTTP服务。
本公开的算法综合集成服务系统将各个算法模型封装成符合HTTP协议标准、输入输出参数规范的统一算法调用方式,兼容Linux和Windows系统,技术原理是将libmicrohttpd库嵌入算法服务集成组件中提供http协议服务端,通过规范化输入输出参数格式,实现不需要进行侵入式修改,为各类业务应用系统提供统一算法模型支撑,实现统一的调用方式和算法参数规范,大大提高不同语言开发的系统之间的调用效率。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,这些均属于本发明的保护之内。
Claims (8)
1.一种算法综合集成服务系统,其特征在于,包括:
HTTP通信模块,被配置为将数据请求作为输入数据,并向数据分析处理模块发送所述数据请求;
数据分析处理模块,内置有静态库和算法数据表,所述数据分析处理模块被配置为基于所述静态库确定所述数据请求对应的算法相关参数;以及基于所述算法数据表调用所述算法相关参数对应的算法函数,依据所述算法函数获得计算结果作为输出数据发送给所述HTTP通信模块;
还包括算法库管理模块,其配置有多个算法功能库,且各算法功能库配置有对应的算法编号;
所述数据分析处理模块基于所述算法数据表调用所述算法相关参数对应的算法函数,依据所述算法函数获得计算结果的过程包括:
所述数据分析处理模块基于所述静态库将所述数据请求转换为包含算法编号和入参主体的所述算法相关参数,并基于所述算法数据表向所述算法库管理模块传递所述算法相关参数;
所述算法库管理模块接收到所述算法相关参数后,基于所述算法编号匹配相应的算法函数,并在相应的算法功能库完成函数运算并向所述数据分析处理模块返回计算结果。
2.如权利要求1所述的算法综合集成服务系统,其特征在于,所述HTTP通信模块内置有小型HTTP服务器静态库libmicrohttpd,所述小型HTTP服务器静态库被配置为建立Socket套接字,并基于配置文件所设定的端口接收各个业务系统发送数据请求。
3.如权利要求2所述的算法综合集成服务系统,其特征在于,所述HTTP通信模块还被配置为基于各个业务系统发送的数据请求进行HTTP协议解析,并将解析结果封装后发送至所述数据分析处理模块,以及将所述输出数据进行封装处理;
其中各个业务系统发送的数据请求包括HTTP请求头,所述HTTP请求头部包括用于指示各数据请求的来源。
4.如权利要求2所述的算法综合集成服务系统,其特征在于,所述HTTP通信模块还被配置为在所述Socket套接字启动后,启动一个主监听进程daemon,在接收到数据请求的情况下,通过所述主监听进程daemon根据线程池中的子线程的工作情况,将所述数据请求分配给当前空闲或任务量低的子线程。
5.如权利要求4所述的算法综合集成服务系统,其特征在于,所述HTTP通信模块还被配置为若同时接收到多个数据请求,则按照接收多个数据请求的顺序利用多个子线程进行并行处理,超出最大连接数量的数据请求被丢弃。
6.如权利要求1所述的算法综合集成服务系统,其特征在于,所述HTTP通信模块还被配置为生成状态变更数据;
所述算法综合集成服务系统还包括日志记录模块,被配置为记录所述输入数据、所述输出数据以及所述状态变更数据。
7.如权利要求1所述的算法综合集成服务系统,其特征在于,所述算法库管理模块还被配置为在计算失败的情况下,返回错误信息。
8.如权利要求1-7任一项所述的算法综合集成服务系统,其特征在于,还包括算法监控模块,被配置为基于配置文件对所述HTTP通信模块进行状态变更,以及提供用户界面,并通过所述用户界面向用户展示系统的运行状态。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110814006.2A CN113660307B (zh) | 2021-07-19 | 2021-07-19 | 一种算法综合集成服务系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110814006.2A CN113660307B (zh) | 2021-07-19 | 2021-07-19 | 一种算法综合集成服务系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113660307A CN113660307A (zh) | 2021-11-16 |
CN113660307B true CN113660307B (zh) | 2024-01-19 |
Family
ID=78477466
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110814006.2A Active CN113660307B (zh) | 2021-07-19 | 2021-07-19 | 一种算法综合集成服务系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113660307B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116204577A (zh) * | 2023-05-04 | 2023-06-02 | 神州数码融信云技术服务有限公司 | 数据导出方法及装置、计算机设备及计算机可读存储介质 |
CN117009251B (zh) * | 2023-09-26 | 2024-01-02 | 中船奥蓝托无锡软件技术有限公司 | 数据分析系统、数据分析算法库、动态加载方法及系统 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7617504B1 (en) * | 2002-09-12 | 2009-11-10 | Sprint Communications Company L.P. | Computer method and system for integrating enterprise JavaBeans into non-Java environments |
JP2010108076A (ja) * | 2008-10-28 | 2010-05-13 | Internatl Business Mach Corp <Ibm> | ソースコード変換方法、サーバシステム、およびサーバプログラム |
CN104821954A (zh) * | 2015-03-27 | 2015-08-05 | 中国海洋大学 | 一种跨平台远程过程调用方法 |
CN108073435A (zh) * | 2016-11-18 | 2018-05-25 | 中国电子科技集团公司第十五研究所 | 一种多信息集成显示方法及系统 |
CN110166530A (zh) * | 2019-04-17 | 2019-08-23 | 平安普惠企业管理有限公司 | 基于微服务返回值的处理方法、电子装置及计算机设备 |
CN110751592A (zh) * | 2019-08-21 | 2020-02-04 | 北京达佳互联信息技术有限公司 | 图形资源转换方法、装置、电子设备及存储介质 |
CN112015483A (zh) * | 2020-08-07 | 2020-12-01 | 北京浪潮数据技术有限公司 | Post请求参数自动化处理方法、装置及可读存储介质 |
CN112765243A (zh) * | 2019-10-21 | 2021-05-07 | 千寻位置网络有限公司 | 在设备和云端构建gnss算法统一运行环境的方法、系统 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101432128B1 (ko) * | 2013-01-29 | 2014-08-21 | 주식회사 케이티 | M2m 네트워크상에서의 리소스를 디바이스 오브젝트로 추상화하는 m2mm 플랫폼 |
US9740779B2 (en) * | 2013-10-01 | 2017-08-22 | AsterionDB, Inc. | System, method and program instructions for tying together a media URL and multimedia in a database |
WO2018120813A1 (zh) * | 2016-12-27 | 2018-07-05 | 华为技术有限公司 | 一种智能推荐方法和终端 |
-
2021
- 2021-07-19 CN CN202110814006.2A patent/CN113660307B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7617504B1 (en) * | 2002-09-12 | 2009-11-10 | Sprint Communications Company L.P. | Computer method and system for integrating enterprise JavaBeans into non-Java environments |
JP2010108076A (ja) * | 2008-10-28 | 2010-05-13 | Internatl Business Mach Corp <Ibm> | ソースコード変換方法、サーバシステム、およびサーバプログラム |
CN104821954A (zh) * | 2015-03-27 | 2015-08-05 | 中国海洋大学 | 一种跨平台远程过程调用方法 |
CN108073435A (zh) * | 2016-11-18 | 2018-05-25 | 中国电子科技集团公司第十五研究所 | 一种多信息集成显示方法及系统 |
CN110166530A (zh) * | 2019-04-17 | 2019-08-23 | 平安普惠企业管理有限公司 | 基于微服务返回值的处理方法、电子装置及计算机设备 |
CN110751592A (zh) * | 2019-08-21 | 2020-02-04 | 北京达佳互联信息技术有限公司 | 图形资源转换方法、装置、电子设备及存储介质 |
CN112765243A (zh) * | 2019-10-21 | 2021-05-07 | 千寻位置网络有限公司 | 在设备和云端构建gnss算法统一运行环境的方法、系统 |
CN112015483A (zh) * | 2020-08-07 | 2020-12-01 | 北京浪潮数据技术有限公司 | Post请求参数自动化处理方法、装置及可读存储介质 |
Non-Patent Citations (10)
Title |
---|
A Parameter Self-learning Proportion-Cycle Algorithm in The Application of Temperature Control System;An Wen等;International Conference on Computer Science and Information Technology;全文 * |
An Wen等.A Parameter Self-learning Proportion-Cycle Algorithm in The Application of Temperature Control System.International Conference on Computer Science and Information Technology.2010,全文. * |
RPAD: An Unsupervised HTTP Request Parameter Anomaly Detection Method;Yizhen Sun等;2020 IEEE 19th International Conference on Trust, Security and Privacy in Computing and Communications (TrustCom);全文 * |
Yizhen Sun等.RPAD: An Unsupervised HTTP Request Parameter Anomaly Detection Method.2020 IEEE 19th International Conference on Trust, Security and Privacy in Computing and Communications (TrustCom).2021,全文. * |
基于函数截获的、面向图形应用的远程交互分布式设备框架;吕回;计算机应用与软件;27(9);第1-3节 * |
基于机器学习的数据库小数据集并行集成方法;王俊等;科学技术与工程;第19卷(第16期);全文 * |
王俊等.基于机器学习的数据库小数据集并行集成方法.科学技术与工程.2019,第19卷(第16期),全文. * |
移动内客分发关键技术研究;朱西鹏;中国博士学位论文电子期刊网;全文 * |
移动内容分发关键技术研究;朱西鹏;中国博士学位论文电子期刊网;全文 * |
空间数据网络处理服务模型及关键技术;高昂等;计算机工程与应用;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN113660307A (zh) | 2021-11-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111600909B (zh) | 数据处理方法、装置、协议转换设备及存储介质 | |
CN111625452B (zh) | 流量回放方法和系统 | |
CN109308224B (zh) | 跨平台数据通信、跨平台数据处理的方法、装置及系统 | |
CN113660307B (zh) | 一种算法综合集成服务系统 | |
US7752598B2 (en) | Generating executable objects implementing methods for an information model | |
CN112306586B (zh) | 数据处理方法、装置、设备及计算机存储介质 | |
JP2001502823A (ja) | インターフェイス定義言語によって定義されたデータ構造体を異種システム間で移送するための方法および装置 | |
CN112738216B (zh) | 一种设备适配方法、装置、设备和计算机可读存储介质 | |
US20030233477A1 (en) | Extensible infrastructure for manipulating messages communicated over a distributed network | |
US7284060B2 (en) | Method for transferring data in a system having multiple transports | |
US7120639B1 (en) | Pluggable formatters | |
CN114595199B (zh) | 文件解析方法、装置、计算机设备和存储介质 | |
CN113467972A (zh) | 通信接口构造方法、装置以及计算机设备、存储介质 | |
CN113296987B (zh) | 调用模块的接口调用方法、装置、计算机设备及存储介质 | |
CN116743833B (zh) | 增强终端与服务通讯能力和网络控制能力的方法和装置 | |
CN109005163B (zh) | 一种http动态请求服务调用方法 | |
CN113992644B (zh) | 一种基于无服务技术的物联网关系统及其数据处理方法 | |
CN111611307B (zh) | 报表导出方法及装置 | |
CN113626001A (zh) | 一种基于脚本的api动态编排方法及装置 | |
CN113918245A (zh) | 一种数据调用方法、装置、设备及计算机可读存储介质 | |
CN113835904A (zh) | 一种远程过程调用控制方法、装置、设备及存储介质 | |
CN114490101B (zh) | 跨平台的远程命令执行控制系统及方法 | |
CN116483479A (zh) | 多维度调用接口的方法和装置、设备、介质 | |
CN116233187A (zh) | 消息服务方法及消息服务器 | |
CN116483366A (zh) | 业务数据的传输方法和装置、存储介质及电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |