CN114237760B - 一种将工业机理模型封装为容器镜像并发布web服务的方法 - Google Patents

一种将工业机理模型封装为容器镜像并发布web服务的方法 Download PDF

Info

Publication number
CN114237760B
CN114237760B CN202111575245.3A CN202111575245A CN114237760B CN 114237760 B CN114237760 B CN 114237760B CN 202111575245 A CN202111575245 A CN 202111575245A CN 114237760 B CN114237760 B CN 114237760B
Authority
CN
China
Prior art keywords
file
mechanism model
dynamic link
link library
java
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
Application number
CN202111575245.3A
Other languages
English (en)
Other versions
CN114237760A (zh
Inventor
林忠伟
吕广华
陈江
王传玺
李军
陈佩
陈丰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
North China Electric Power University
Xian Thermal Power Research Institute Co Ltd
Huaneng Group Technology Innovation Center Co Ltd
Original Assignee
North China Electric Power University
Xian Thermal Power Research Institute Co Ltd
Huaneng Group Technology Innovation Center Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by North China Electric Power University, Xian Thermal Power Research Institute Co Ltd, Huaneng Group Technology Innovation Center Co Ltd filed Critical North China Electric Power University
Priority to CN202111575245.3A priority Critical patent/CN114237760B/zh
Publication of CN114237760A publication Critical patent/CN114237760A/zh
Application granted granted Critical
Publication of CN114237760B publication Critical patent/CN114237760B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/315Object-oriented languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/61Installation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45562Creating, deleting, cloning virtual machine instances

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种将发电行业工业机理模型封装并发布web服务的方法。首先,将模型算法编译成无法反编译的动态链接库;然后,通过java构建web工程并发布服务,使用者可以通过工业互联网平台轻松的获取算法服务;最后,将java构建的服务工程封装到独立的容器镜像中。本发明既为模型算法的运行使用提供了独立的运行环境,又能保证运行数据的独立性和安全性。

Description

一种将工业机理模型封装为容器镜像并发布web服务的方法
技术领域
本发明属于工业软件技术领域,涉及一种将发电行业工业机理模型编译成可执行的动态链接库并封装到镜像中的解决方案,具体涉及一种将工业机理模型封装为容器镜像并发布web服务的方法。
背景技术
工业互联网作为新一代信息技术与制造业深度融合的产物,正日益成为新工业革命的关键支撑和新型工业化的超级引擎。能源工业互联网是国家在工业互联网和能源领域的新型重大基础设施,是一种工业互联网与能源生产、传输、存储、消费以及能源市场深度融合的能源产业发展新业态。工信部与国资委、能源局共同签署的《共同支持建设国家能源智慧信息平台保障网络安全方案》,明确提出支持能源工业互联网。平台建设面向能源行业建设的工业互联网赋能与公共服务平台旨在充分发挥国家战略规划导向作用,推动发电行业设备、产品、工具等上云,实现能源行业人、机、物和生产、调度、能耗系统的互联。在应用方面,能源工业互联网平台支持通过行业积累形成的工业机理,以工业机理模型为工业微服务及工业应用的基石。
互联网平台将机理模型接入的方式一般是创建一个机理模型算法库,将机理模型算法统一放入算法库中,再通过创建模型调用算法按需取用模型算法,这种方式通常要求构建机理模型的研究人员按照平台预先设定的语言和格式进行模型开发,然后将模型放入模型算法库中统一管理和调用。由于互联网平台开发以后端网络服务为基础,而机理模型开发则通常以高级程序语言实现计算功能,例如使用C++/Python开发机理模型算法模块。但是,通常情况下后端网络服务由Java程序实现,虽然C++#也具备开发后端服务的能力,但其泛用性与稳定性则比Java相差甚远。因此,亟需找寻一种将机理模型封装,通过C++语言构建研发生产过程中的算法复杂度较低的普通机理模型,通过python语言构建研发生产过程中的算法复杂度较高复杂机理模型,包括数据挖掘、聚类分析和神经网络等算法的模型,并通过Java编写web服务框架,实现服务发布的跨平台调用及服务发布方法。
发明目的
为了摆脱工业软件平台对模型算法开发的限制,降低模型开发的编程难度,解决神经网络这类模型使用C++语言编程开发难度大的问题。本发明旨在让模型开发者使用合适的语言完成机理模型算法的编程开发。本发明提供了一种将工业机理模型封装为容器镜像并发布web服务的方法。首先,将模型算法编译成无法反编译的动态链接库,这种方式在保证算法可运行的前提下充分保证了算法的安全性;然后通过java构建web工程并发布服务,使用者可以通过工业互联网平台轻松的获取算法服务,这种方式保证了算法的可用性;最后将java构建的服务工程封装到独立的容器镜像中,这种方式既为模型算法的运行使用提供了独立的运行环境,又能保证运行数据的独立性和安全性。本发明主要解决了以下技术问题:
(1)Java工程调用Python编译的动态库问题。使用通常方法编译的以Python脚本在Java工程中无法正常调用,本方法提出一种在镜像中编译Python动态库的方法,可以在容器镜像中实现Java工程调用Python编译的动态链接库;
(2)C++/Python算法程序跨平台调用问题。基于Java Spring Boot工程下编写可编程程序接口,利用JNA库相应方法实现Java对动态链接库的调用,从而实现以C++/Python开发的机理模型跨平台的调用;
(3)机理模型的封装与管理问题。通过将机理模型算法编译为动态链接库文件以保证源代码的保密性,机理模型开发者仅需要向web服务开发者提供动态库的接口信息即可完成机理模型在web服务的发布,这使得后端开发人员无需掌握发电行业等其他领域专业知识,也可以顺利参与能源工业互联网平台的开发;
(4)机理模型独立运行及维护问题。基于Linux操作系统下使用容器镜像装载机理模型并发布web服务的方法,独立的机理模型被安装在每一个独立的镜像内,而镜像由独立的容器承载,网络服务器上部署数个独立容器并启动服务,就可以实现机理模型的在线使用服务,模型之间运行不会相互影响,也更加方便对特定模型的升级与维护
发明内容
本发明方法公开了一种将工业机理模型封装为容器镜像并发布web服务的方法,其中,所述容器镜像可在工业互联网平台上安全部署并发布web服务,所述工业机理模型采用C++语言和python语言构建,所述方法包括以下步骤:
步骤1、将基于C++语言构建的工业机理模型编译成动态链接库,具体为:利用C++语言开发工业机理模型并将所开发好的工业机理模型保存为.C++文件,然后将该.C++文件移动到linux系统下,利用linux操作系统的终端编写指令将该.C++文件编译成动态链接库,并保存为.so文件;
步骤2、jave构建web服务工程并调用动态链接库文件,具体为:将步骤1所编译成的动态链接库更名,通过linux操作系统终端指令将所述动态链接库添加到linux系统的根目录文件夹下,其中,该根目录文件夹下的文件必须以lib开头;用java构建web服务工程,并在所述web服务工程中,从所述根目录文件夹下加载所述动态链接库并定义接口函数,利用get请求获取前端输入,将该前端输入传入所述接口函数,调用所述动态链接库完成运算并返回结果;
步骤3、将所述jave构建web服务工程下载为jar包并构建镜像,具体为:将步骤2中所构建完成的web服务工程下载成jar包,构建具有C++语言和java语言运行环境的基础镜像,然后新建docker文件夹,将动态链接库和jar包放入docker文件夹中,编写dockerfile文件构建运行镜像,该运行镜像可运行调用利用C++语言构建的工业机理模型,且不受发布平台的限制;
步骤4、编写调用文件和动态链接库编译文件,具体为:封装调用基于python语言开发的工业机理模型,具体为:首先,利用python语言编写调用工业机理模型的python文件,包括调用和接口函数;然后,编写动态链接库编译文件,即将python文件编译成动态链接库文件并命名为setup.py;
步骤5、构建java工程调用python语言构建的工业机理模型,具体包括以下子步骤:
步骤S51.利用java构建web服务工程,用java编写post请求接口从前端接收数据,然后编写java程序将前端输入的数据写成文件并存放在指定路径;
步骤S52.用Java启动控制台并传入运行python指令、运行数据地址和运行参数;
步骤S53.python运行并调用所述工业机理模型完成运算,当python完成运行后,将运行结果存入指定地址并返回数据存放地址;
步骤S54.用java读取步骤S53中所述运行结果文件中的数据并返回给前端;构建完成java工程之后,运行工程发布web服务,接着运行postman进行测试,最后将测试成功之后的工程保存下载为jar包;
步骤6、将所述工业机理模型封装成镜像并保存,具体为:构建具有python和java运行环境的基础镜像,新建docker文件夹,将步骤1-5中所保存的jar包、所述工业机理模型原文件、所述工业机理模型调用python文件、构建动态链接库的setup.py文件放入所述docker文件夹,在该文件夹中新建dockerfile文件,利用该dockerfile文件构建运行镜像,之后进入该运行镜像容器内部,执行setup.py脚本,将所述工业机理模型编译成动态链接库,然后将所述工业机理模型原文件删除,并将其它多余文件也删除,仅保留动态链接库和调用文件;最后退出所述运行镜像,再次利用postman测试服务,测试成功后将该运行镜像保存。
优选地,步骤1中所述动态链接库是linux系统下的共享库文件,是一种编译好可供程序使用的代码和数据,可调用但无法反编译。
优选地,步骤2具体包括以下子步骤:
Step2.1,更改步骤1中所述动态链接库名称,在原名称之前加入“lib”,并将更名后的文件复制到根目录文件下;
Step2.2,创建java工程,在该java工程中编写脚本加载根目录下的所述动态链接库,并依照工业机理模型调用函数接口,定义接口函数为所述动态链接库传入参数,并接收所述动态链接库程序后返回的值;
Step2.3,java编写应用程序接口,发布http测试请求;其中,所述测试请求分为两种:第一种是java发布get请求获取url参数值,该url参数值为数值或字符串形式;第二种是java发布post请求获取用户所上传的文件,所上传的文件包含工业机理模型运算所需的输入数据,获取所上传的文件之后,java将该所上传的文件解析成动态链接库所需的输入形式,并将其传入动态链接库。
优选地,步骤3具体包括以下子步骤:
Step3.1、对C++动态链接库调用工程进行测试并下载该工程;运行java工程,在浏览器输入服务端口号和参数,对所编写完成的web服务工程测试,此时该所编写完成的web服务调用的是本机根目录下的动态链接库,完成运算并将结果返回;将测试成功的web服务程序停止,在java工程maven项目栏先选择C++lean,然后选择install完成java工程的下载;下载成功后在java工程文件夹下的target文件夹中将下载下来的.jar文件重命名,然后在系统终端尝试使用java指令运行下载好的.jar文件;
Step3.2、封装镜像并保存,具体是在系统终端安装镜像环境,通过dockerfile文件的方式构建一个包含C++和java环境的基础镜像,然后新建文件夹将需放入镜像中的所述动态链接库文件、JAR格式文件放入该新建文件夹中,并在该新建文件夹下新建一个dockerfile文件,在dockerfile文件中编写指令拉取基础镜像并构建运行镜像,完成镜像构建之后,运行镜像发布web服务并测试,测试成功之后将所述镜像保存下来。
优选地,步骤4具体包括以下子步骤:
Step4.1、安装将所述工业机理模型编译成所述动态链接库所需的环境和依赖包,创建一个将所述工业机理模型封装成动态链接库的python脚本,取名为setup.py;
Step4.2、新建一个python脚本调用动态链接库。
优选地,步骤6具体包括以下子步骤:
Step6.1、通过dockerfile文件构建具有java环境和python环境的基础镜像;
Step6.2、新建文件夹,将需要放入镜像中的所述工业机理模型、调用所述工业机理模型的python脚本、下载好的.jar文件和将所述工业机理模型编译成动态链接库的setup.py文件放入;
Step6.3、新建dockerfile文件,在该dockerfile文件中编写指令加载基础镜像、下载python运行时的外部依赖包、添加文件,并运行dockerfile文件构建镜像;所述添加文件包括工业机理模型、调用该工业机理模型的python脚本、setup.py文件;
Step6.4,运行构建完成的镜像并进入镜像中,在镜像中运行setup.py将所述工业机理模型编译成动态链接库,然后将所述工业机理模型和setup.py文件删除,退出镜像,然后运行镜像并进行web测试,将测试成功后的镜像下载保存。
附图说明
图1是本发明所述将工业机理模型封装并发布web服务的方法的流程图。
图2是本发明python调用脚本算法流程图。
图3是本发明java构建web工程程序算法流程图。
图4是本发明在docker文件夹所放入的文件的示意图。
图5是本发明docker容器与镜像的关系示意图。
具体实施方式
以下结合附图详细阐述本发明的具体实施方式。
本发明提供了一种将工业机理模型封装成具有发布web服务功能的容器镜像的方法,为了实现以C++或Python开发的机理模型在Java工程中调用,且具有源码保密性,因此需要将构建好的机理模型编译成动态链接库,然后利用java语言编写web服务工程。动态链接库是一种不可执行的二进制程序文件,它允许程序共享执行特殊任务所必需的代码和其他资源。相对于静态函数库,动态函数库在编译的时候并没有被编译进目标代码中,因此动态函数库所产生的可执行文件比较小。由于函数库没有被整合进你的程序,而是程序运行时动态的申请并调用,所以程序的运行环境中必须提供相应的库。动态链接库具有复用性,可扩展性,内存占用量小等多种优点,其中复用性,也即动态库能够实现代码在不同工程中重复使用的特点,奠定了本方法将工业机理模型封装并通过Java发布服务的基础。Java工程中包含web服务接口、C++编译的动态链接库调用、python编译的动态链接库调用等程序,在确保后端网络服务成功且运行正常的基础之上,将机理模型及Java工程以JAR格式文件压缩封装。由于JAR格式文件是一种与平台无关的文件格式,因此可以轻松实现跨平台的启动;docker是一种linux容器技术,容器有效的将由单个操作系统挂管理的资源划分到孤立的组中,以便更好的在组之间平衡有冲突的资源使用需求。可简单理解为一种沙盒。每个容器内运行一个应用,不同的容器之间相互隔离,容器之间也可以建立通信机制。容器的创建和停止都十分快速,资源需求远远低于虚拟机。将工业机理模型web服务包封装在Linux的容器镜像中,能高效地构建应用,且可以高校快速的交付和部署,实现资源的高效利用及简单的更新管理。本发明方法降低了语言对模型开发的限制,也降低了模型开发者发布模型时平台的限制。
图1是本发明所述将工业机理模型封装并发布web服务的方法的流程图,如图1所示,所述方法包括以下步骤:
Step1、将C++语言构建的工业机理模型编译成动态链接库,具体包括以下子步骤:
Step1.1,在linux系统下安装C++语言构建动态链接库所需环境,编写动态链接库构建脚本。
Step1.2,运行脚本将工业机理模型编译成动态链接库(.so文件)。动态链接库是linux系统下的共享库文件,类似于windows系统下的.dll文件,是一种编译好可供程序使用的代码和数据,具有可调用、无法反编译的特点。将工业机理模型编译成动态链接库可以将模型源码隐藏起来并且保证工业机理模型的使用不受影响。
Step2、构建java工程调用C++编译的动态链接库并发布服务,具体包括以下子步骤:
Step2.1,更改动态链接库名称,在原名称之前加入“lib”并将更名后的文件复制到根目录文件下。
Step2.2,创建java工程,在java工程中编写脚本加载根目录下的动态链接库,并依照工业机理模型调用函数接口定义接口函数为动态链接库传入参数并接收动态链接库程序后返回的值。
Step2.3,java编写应用程序接口,发布http测试请求。请求分为两种,第一种,java发布get请求获取url参数值,url参数值可以是数值、字符串等形式;第二种,java发布post请求获取用户上传的文件,文件包含工业机理模型运算所需的输入数据,获取文件之后java将文件解析成动态链接库所需的输入形式将输入传入动态链接库。
Step3、将可调用C++动态链接库的java工程封装成镜像并保存,具体包括以下子步骤:
Step3.1,对C++动态链接库调用工程进行测试并下载工程;运行java工程,在浏览器输入服务端口号和参数对编写完成的web服务工程测试。此时服务调用的是本机根目录下的动态链接库,完成运算并结果返回。将测试成功的web服务程序停止,在java工程maven项目栏先选择C++lean,然后选择install完成java工程的下载。下载成功后在java工程文件夹下的target文件夹中将下载下来的.jar文件重命名,然后可以在系统终端尝试使用java指令运行下载好的.jar文件。
Step3.2,封装镜像并保存。在系统终端安装镜像环境,通过dockerfile文件的方式构建一个包含C++和java环境的基础镜像,然后新建文件夹将需放入镜像中的动态链接库文件、JAR格式文件放入文件夹中,并在该文件夹下新建一个dockerfile文件,在dockerfile文件中编写指令(.so文件指定放入镜像的根目录文件夹下)拉取基础镜像并构建运行镜像,完成镜像构建之后运行镜像发布web服务并测试,测试成功之后将镜像保存下来。
Step4、编写将python语言构建的工业机理模型编译成动态链接库和调用的python脚本,具体包括以下子步骤:
Step4.1,安装将工业机理模型编译成动态链接库所需的环境和依赖包,创建一个将工业机理模型封装成动态链接库的python脚本,取名为setup.py。
Step4.2,新建一个python脚本调用动态链接库。新建python脚本调用动态链接库是为了调用动态链接库的同时对使用者暴露接口,而此时暴露出来的接口并不涉及工业机理模型从而保证了机理模型的安全性。python调用脚本算法流程如图2所示。
Step5、构建java工程调用python语言构建的工业机理模型,发布服务并下载jar包,具体包括以下子步骤:
Step5.1,利用java构建web服务工程,java采用post的方式从前端接收用户上传的数据并通过运算返回运算结果。
Step5.2,java编程调用python。运行时,java启动控制台并通过控制台指令运行python脚本。
Step5.3,运行python脚本调用python动态链接库。运行java工程时,java启动控制台并运行python脚本,python脚本运行时可以调用python编译出来的动态链接库。
Step5.4,运行构建完成后的java工程发布web服务,通过postman软件进行web服务测试。
Step5.5,web服务在postman软件上测试运行成功后将测试成功的web服务程序停止,在java工程maven项目栏先选择Clean,然后选择install完成java工程的下载。下载成功后在java工程文件夹下的target文件夹中将下载下来的.jar文件重命名,然后可以在系统终端尝试使用java指令运行下载好的.jar文件。java构建web工程程序算法流程如图3所示。
Step6、将python语言构建的工业机理模型封装成镜像并保存,具体包括以下子步骤:
Step6.1,通过dockerfile文件构建具有java环境和python环境的基础镜像。
Step6.2,新建文件夹将需要放入镜像中的工业机理模型(python语言构建)、调用工业机理模型的python脚本、下载好的.jar文件和将工业机理模型编译成动态链接库的setup.py文件放入。
Step6.3,新建dockerfile文件,在dockerfile文件中编写指令加载基础镜像(java-python)、下载python运行时的外部依赖包、添加文件(工业机理模型、调用工业机理模型的python脚本、setup.py文件),并运行dockerfile文件构建镜像。图4是docker文件夹所放入的文件的示意图。
Step6.4,运行构建完成的镜像并进入镜像中,在镜像中运行setup.py将工业机理模型编译成动态链接库然后将工业机理模型和setup.py文件删除,退出镜像然后运行镜像进行web测试并将镜像下载保存。docker与镜像之间的关系见图5。
本发明主要有以下几个创新点:
(1)本发明提出的将发电领域工业机理模型编译成动态链接库,通过java构建web工程发布服务,然后构建镜像实现发电行业工业机理模型在工业互联网平台集成汇聚的方法是以前的研究中没有的。
(2)本发明提出利用java编写指令启动控制台,通过控制台运行python脚本调用动态链接库的方法是以前的研究中没有的。
(3)本发明不仅实现了基于C++语言构建的机理模型封装成容器镜像,也实现了基于python语言构建的机理模型封装成容器镜像的方法。本方法是在linux系统环境下实践得出的,其中java工程的运行环境为idea环境。
本发明具有如下有益效果:
1、步骤1中将工业机理模型编译成动态链接库,动态链接库具有反编译的特点,编译成动态链接库之后的工业机理模型可以被调用但使用者无法获取工业机理模型的源程序,这保证了工业机理模型上传者的核心算法安全。
2、步骤2中在动态链接库名称前加入”lib”并将动态链接库放到根目录文件夹下,保证了java工程能成功的调用到C++编译的动态链接库。
3、步骤5中采用控制台运行python脚本的方式解决了jpython库缺少python外部依赖库的问题,消除了python工业机理模型依赖库受限的麻烦。
4、步骤5中java工程发布post请求解决了发电行业机理模型运算输入数据的数据量大的问题。Post请求可以以文件上传的方式将输入数据上传并经过java读取后调用工业机理模型完成运算。
5、步骤6中将python语言构建的工业机理模型放入镜像中编译成动态链接库,解决了python编译成的动态链接库在移动后运行环境之后无法导入的问题。

Claims (6)

1.一种将工业机理模型封装为容器镜像并发布web服务的方法,其中,所述容器镜像可在工业互联网平台上安全部署并发布web服务,所述工业机理模型采用C++语言和python语言构建,其特征在于,所述方法包括以下步骤:
步骤1、将基于C++语言构建的工业机理模型编译成动态链接库,具体为:利用C++语言开发工业机理模型并将所开发好的工业机理模型保存为.C++文件,然后将该.C++文件移动到linux系统下,利用linux操作系统的终端编写指令将该.C++文件编译成动态链接库,并保存为.so文件;
步骤2、jave构建web服务工程并调用动态链接库文件,具体为:将步骤1所编译成的动态链接库更名,通过linux操作系统终端指令将所述动态链接库添加到linux系统的根目录文件夹下,其中,该根目录文件夹下的文件必须以lib开头;用java构建web服务工程,并在所述web服务工程中,从所述根目录文件夹下加载所述动态链接库并定义接口函数,利用get请求获取前端输入,将该前端输入传入所述接口函数,调用所述动态链接库完成运算并返回结果;
步骤3、将所述jave构建web服务工程下载为jar包并构建镜像,具体为:将步骤2中所构建完成的web服务工程下载成jar包,构建具有C++语言和java语言运行环境的基础镜像,然后新建docker文件夹,将动态链接库和jar包放入docker文件夹中,编写dockerfile文件构建运行镜像,该运行镜像可运行调用利用C++语言构建的工业机理模型,且不受发布平台的限制;
步骤4、编写调用文件和动态链接库编译文件,具体为:封装调用基于python语言开发的工业机理模型,具体为:首先,利用python语言编写调用工业机理模型的python文件,包括调用和接口函数;然后,编写动态链接库编译文件,即将python文件编译成动态链接库文件并命名为setup.py;
步骤5、构建java工程调用python语言构建的工业机理模型,具体包括以下子步骤:
步骤S51.利用java构建web服务工程,用java编写post请求接口从前端接收数据,然后编写java程序将前端输入的数据写成文件并存放在指定路径;
步骤S52.用Java启动控制台并传入运行python指令、运行数据地址和运行参数;
步骤S53.python运行并调用所述工业机理模型完成运算,当python完成运行后,将运行结果存入指定地址并返回数据存放地址;
步骤S54.用java读取步骤S53中所述运行结果文件中的数据并返回给前端;构建完成java工程之后,运行工程发布web服务,接着运行postman进行测试,最后将测试成功之后的工程保存下载为jar包;
步骤6、将所述工业机理模型封装成镜像并保存,具体为:构建具有python和java运行环境的基础镜像,新建docker文件夹,将步骤1-5中所保存的jar包、所述工业机理模型原文件、所述工业机理模型调用python文件、构建动态链接库的setup.py文件放入所述docker文件夹,在该文件夹中新建dockerfile文件,利用该dockerfile文件构建运行镜像,之后进入该运行镜像容器内部,执行setup.py脚本,将所述工业机理模型编译成动态链接库,然后将所述工业机理模型原文件删除,并将其它多余文件也删除,仅保留动态链接库和调用文件;最后退出所述运行镜像,再次利用postman测试服务,测试成功后将该运行镜像保存。
2.根据权利要求1所述的一种将工业机理模型封装为容器镜像并发布web服务的方法,其特征在于,步骤1中所述动态链接库是linux系统下的共享库文件,是一种编译好可供程序使用的代码和数据,可调用但无法反编译。
3.根据权利要求1所述的一种将工业机理模型封装为容器镜像并发布web服务的方法,其特征在于,步骤2具体包括以下子步骤:
Step2.1,更改步骤1中所述动态链接库名称,在原名称之前加入“lib”,并将更名后的文件复制到根目录文件下;
Step2.2,创建java工程,在该java工程中编写脚本加载根目录下的所述动态链接库,并依照工业机理模型调用函数接口,定义接口函数为所述动态链接库传入参数,并接收所述动态链接库程序后返回的值;
Step2.3,java编写应用程序接口,发布http测试请求;其中,所述测试请求分为两种:第一种是java发布get请求获取url参数值,该url参数值为数值或字符串形式;第二种是java发布post请求获取用户所上传的文件,所上传的文件包含工业机理模型运算所需的输入数据,获取所上传的文件之后,java将该所上传的文件解析成动态链接库所需的输入形式,并将其传入动态链接库。
4.根据权利要求1所述的一种将工业机理模型封装为容器镜像并发布web服务的方法,其特征在于,步骤3具体包括以下子步骤:
Step3.1、对C++动态链接库调用工程进行测试并下载该工程;运行java工程,在浏览器输入服务端口号和参数,对所编写完成的web服务工程测试,此时该所编写完成的web服务调用的是本机根目录下的动态链接库,完成运算并将结果返回;将测试成功的web服务程序停止,在java工程maven项目栏先选择C++lean,然后选择install完成java工程的下载;下载成功后在java工程文件夹下的target文件夹中将下载下来的.jar文件重命名,然后在系统终端尝试使用java指令运行下载好的.jar文件;
Step3.2、封装镜像并保存,具体是在系统终端安装镜像环境,通过dockerfile文件的方式构建一个包含C++和java环境的基础镜像,然后新建文件夹将需放入镜像中的所述动态链接库文件、JAR格式文件放入该新建文件夹中,并在该新建文件夹下新建一个dockerfile文件,在dockerfile文件中编写指令拉取基础镜像并构建运行镜像,完成镜像构建之后,运行镜像发布web服务并测试,测试成功之后将所述镜像保存下来。
5.根据权利要求1所述的一种将工业机理模型封装为容器镜像并发布web服务的方法,其特征在于,步骤4具体包括以下子步骤:
Step4.1、安装将所述工业机理模型编译成所述动态链接库所需的环境和依赖包,创建一个将所述工业机理模型封装成动态链接库的python脚本,取名为setup.py;
Step4.2、新建一个python脚本调用动态链接库。
6.据权利要求1所述的一种将工业机理模型封装为容器镜像并发布web服务的方法,其特征在于,步骤6具体包括以下子步骤:
Step6.1、通过dockerfile文件构建具有java环境和python环境的基础镜像;
Step6.2、新建文件夹,将需要放入镜像中的所述工业机理模型、调用所述工业机理模型的python脚本、下载好的.jar文件和将所述工业机理模型编译成动态链接库的setup.py文件放入;
Step6.3、新建dockerfile文件,在该dockerfile文件中编写指令加载基础镜像、下载python运行时的外部依赖包、添加文件,并运行dockerfile文件构建镜像;所述添加文件包括工业机理模型、调用该工业机理模型的python脚本、setup.py文件;
Step6.4,运行构建完成的镜像并进入镜像中,在镜像中运行setup.py将所述工业机理模型编译成动态链接库,然后将所述工业机理模型和setup.py文件删除,退出镜像,然后运行镜像并进行web测试,将测试成功后的镜像下载保存。
CN202111575245.3A 2021-12-21 2021-12-21 一种将工业机理模型封装为容器镜像并发布web服务的方法 Active CN114237760B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111575245.3A CN114237760B (zh) 2021-12-21 2021-12-21 一种将工业机理模型封装为容器镜像并发布web服务的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111575245.3A CN114237760B (zh) 2021-12-21 2021-12-21 一种将工业机理模型封装为容器镜像并发布web服务的方法

Publications (2)

Publication Number Publication Date
CN114237760A CN114237760A (zh) 2022-03-25
CN114237760B true CN114237760B (zh) 2023-08-11

Family

ID=80760788

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111575245.3A Active CN114237760B (zh) 2021-12-21 2021-12-21 一种将工业机理模型封装为容器镜像并发布web服务的方法

Country Status (1)

Country Link
CN (1) CN114237760B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115438271B (zh) * 2022-11-08 2023-03-24 商飞软件有限公司 一种工业机理模型及app的管理系统

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107678756A (zh) * 2017-09-29 2018-02-09 千寻位置网络有限公司 一种基于Docker的Web应用一键发布方法
CN111198744A (zh) * 2018-11-16 2020-05-26 中标软件有限公司 自动化应用程序容器化和镜像备份发布的方法
CN112527319A (zh) * 2020-12-16 2021-03-19 浙江大学德清先进技术与产业研究院 基于Docker的遥感智能处理算法的管理方法
CN112698919A (zh) * 2021-01-07 2021-04-23 北京金万维科技有限公司 一种基于linux使用docker快速搭建共享统一web开发环境的方法
WO2021164367A1 (zh) * 2020-02-18 2021-08-26 支付宝(杭州)信息技术有限公司 一种容器镜像的提供方法、加载方法及相关设备和系统

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10445207B2 (en) * 2017-07-31 2019-10-15 Oracle International Corporation System and method to execute and manage load tests using containers

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107678756A (zh) * 2017-09-29 2018-02-09 千寻位置网络有限公司 一种基于Docker的Web应用一键发布方法
CN111198744A (zh) * 2018-11-16 2020-05-26 中标软件有限公司 自动化应用程序容器化和镜像备份发布的方法
WO2021164367A1 (zh) * 2020-02-18 2021-08-26 支付宝(杭州)信息技术有限公司 一种容器镜像的提供方法、加载方法及相关设备和系统
CN112527319A (zh) * 2020-12-16 2021-03-19 浙江大学德清先进技术与产业研究院 基于Docker的遥感智能处理算法的管理方法
CN112698919A (zh) * 2021-01-07 2021-04-23 北京金万维科技有限公司 一种基于linux使用docker快速搭建共享统一web开发环境的方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
使用镜像部署Java Web项目的方法;小新;《网页在线公开:https://www.yisu.com/zixun/134001.html 》;第1-7页 *

Also Published As

Publication number Publication date
CN114237760A (zh) 2022-03-25

Similar Documents

Publication Publication Date Title
CN110825362B (zh) 低代码应用软件开发系统及方法
CN107766126B (zh) 容器镜像的构建方法、系统、装置及存储介质
CN110928529B (zh) 辅助算子开发的方法和系统
CN111625316A (zh) 一种环境部署方法、装置及电子设备和存储介质
WO2022016848A1 (zh) 一种根据服务角色的进行应用部署的方法及装置
CN106775744B (zh) 一种生成静态库的方法和装置
CN111459539B (zh) 基于镜像分层的持续集成流水线运行方法及装置
CN113688186B (zh) 智能合约执行方法、引擎及区块链节点
US11366703B2 (en) Dynamic application management across multi-cloud computing environment
CN113504902A (zh) 工业app集成开发系统及相关设备
CN114461182A (zh) 流水线构建的方法、装置、电子设备及计算机可读存储介质
CN114237760B (zh) 一种将工业机理模型封装为容器镜像并发布web服务的方法
CN113900704A (zh) 应用程序安装包的发布方法、装置、可读介质及电子设备
CN114327405A (zh) 数据处理方法、装置、设备及存储介质
US20170052765A1 (en) Method and system for creating app
CN111683005B (zh) 一种物联网智能网关设备及其构建方法
CN117055848A (zh) 一种前端多模块联邦开发方法及系统
CN114721647B (zh) 一种基于无代码应用开发的面向对象编程方法
CN114265595B (zh) 一种基于智能合约的云原生应用开发与部署系统和方法
Thomas et al. Simulation factory: Taming application configuration and workflow on high-end resources
CN115858008A (zh) 一种支持单体和微服务一体的应用管理系统
US11573777B2 (en) Method and apparatus for enabling autonomous acceleration of dataflow AI applications
CN115344275A (zh) 操作系统的镜像文件生成方法、装置和计算机设备
CN113961232A (zh) 提供集成开发环境的终端、方法和平台服务器
CN117056317B (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