技术文章和通讯

选择一个MATLAB应用程序部署策略

提图斯博士Edelhofer MathWorks


你有一个广泛的选项部署和MATLAB开发的应用程序共享®。最直接的选择之一是单独的算法和应用程序打包成一个文件,文件分发给其他用户MATLAB。然而,在很多情况下,这种简单的方法是不实际的。生产需求,景观,或性能需求可能要求更高级的部署策略。

本文将指导您完成的过程中选择最佳的MATLAB应用程序部署的方法。它包括三个主要策略:直接使用批处理部署MATLAB代码,生成C代码与MATLAB编码器™,用MATLAB编译器™和部署。

这绝不是详尽的部署策略的概述。不存在放之四海而皆准的策略,深入分析您的需求是很重要的在选择一个策略来满足他们。

应用程序结构:前端和后端

考虑部署策略之前,重要的是要理解应用程序的结构,以及它如何影响可用的选项。所有MATLAB应用程序由两部分组成:前端和后端。的前端是最终用户与之交互的一部分。接口或web页面,通常包括控制元素(包括按钮和框,用户可以输入数字或其他信息)和显示元素(包括表和图表)。

后端是计算引擎,计算结果和产生的图形显示。后端和前端部署组合管理你的选择。基于MATLAB的前端部署以来,相当简单,本文将专注于为后端部署选项。

将本地MATLAB代码部署到其他MATLAB用户

有两种基本的策略部署没有编译的MATLAB代码:使用MATLAB作为一个批处理引擎,或使用MATLAB并行服务器™。

使用MATLAB的批处理

批处理方法的一个优点是,它很容易implement-updating服务器代码是一个简单的任务。然而,它的可伸缩性是有限的,所以它可能不适合处理多个并发请求。这种方法还需要并发的网络许可证MATLAB自批处理不是绑定到一个特定的用户。

在MATLAB的批处理,使用MATLAB,不是作为一个交互式的环境,但作为一个过程来执行一个命令,或者对于更复杂的计算,一个脚本包含一系列的命令。过程调用MATLAB(通常,前端)必须能够推出一个外部程序(在这种情况下,MATLAB)在同一台机器上。具体来说,调用进程启动MATLAB使用- r命令行选项。命令matlab - r“声明”将MATLAB和执行指定的MATLAB声明,这可能是一个MATLAB函数或脚本。例如,以下语句可以用来启动批处理文件的命名blackscholes.m位于MATLAB搜索路径的目录:

matlab - r”blackscholes;退出”

blackscholes.m脚本执行任何所需的步骤完成的批处理,比如阅读参数或数据从文件或数据库,计算的结果,并将结果保存到另一个文件或数据库。

在实践中,一个更高级的命令是用于处理错误和抑制不必要的视觉元素:

matlab -nodesktop -nosplash等待- r”尝试,blackscholes;抓,结束,退出”

批处理是合适的,当一个简单的调用一个外部可执行足以完成加工和高可用性并不是一个严格的要求。注意,使用这种方法很少有好处当你打算使用MATLAB的前端,因为这将涉及启动另一个实例的MATLAB与另一个许可证。

使用MATLAB并行服务器

而没有编译的MATLAB代码的执行批处理简化了在同一台机器上作为前端,MATLAB并行服务器很容易卸载计算密集型MATLAB代码从桌面到服务器环境。使用MATLAB并行服务器,您可以在计算机上运行计算密集型MATLAB应用程序集群或Amazon EC2。这种方法支持应用程序需要并行金宝app计算和处理大型数据集的存储在分布式阵列。由于MATLAB并行服务器为MATLAB工具箱提供的许可证,您可以执行MATLAB应用程序集群上没有为每台计算机获取特定于产品的许可。

典型的工作流如下:从并行计算工具箱™,并行执行的代码使用做好准备parfor或工作和任务。一旦代码运行在并行expected-excluding性能考虑,准备代码MATLAB并行服务器集群上运行不需要进行任何代码更改;它仅仅是使用另一个配置的问题。

生成C / c++代码

MATLAB编码器可用于生成独立的可部署的C / c++代码。生成的ANSI / ISO兼容的C和c++代码不依赖于静态或动态库或MathWorks提供的运行时环境;它可以用在任何平台,提供一个合适的C / c++编译器。这种方法建议当目标部署平台不支持MATLAB-such平台包括AIX或IRIX等嵌入式系统和平台。金宝app对于这些平台,您可以生成C / c++代码集成到一个更大的应用程序或调用的共享库。

这种方法的主要缺点是,MATLAB编码器支持核心MATLAB语言的一个子集特色服务程序控制结构,函数和矩阵操作,但是没金宝app有所有MATLAB和相关工具箱提供的功能。看到MATLAB语言特性支持C / c++代码生成金宝app

部署与MATLAB编译器

MATLAB编译器使您能够部署MATLAB程序作为独立的应用程序或作为共享库(。自由或. dll文件)。使用MATLAB编译器创建的应用程序和库依赖于MATLAB运行时,它允许用户安装MATLAB编制MATLAB应用程序没有运行。MATLAB运行时可以打包下载并安装您的应用程序或在安装过程中。因为你可以自由分发MATLAB运行时,MATLAB编译器使您能够运行多个实例的代码没有获得额外的许可证。

代码由MATLAB编译器和由MATLAB处理运行时是一个中间(加密)表示,与用Java . class文件®——不是机器代码。MATLAB运行时解释这种中间表示使用相同的引擎,MATLAB使用MATLAB脚本和命令处理标准。

您可以使用MATLAB编译器部署MATLAB代码作为一个独立的Windows应用程序,一个共享库,一个Excel®net程序集插件,或一个通用的COM组件,其他选项(图1)。

图1所示。MATLAB编译器选项部署应用程序。

创建一个独立的应用程序

最简单的方法来部署代码与MATLAB编译器生成一个独立的应用程序。可以生成一个应用程序和一个内置的接口(前端)或一个单独使用作为一个处理引擎。独立应用程序用作处理引擎类似于没有编译的MATLAB应用程序用于批处理,他们是由一个前端调用过程可以通过命令行参数传递。

这种方法的优点是,除了MATLAB编译器许可证,没有额外的许可证要求您可以分发应用程序和运行系统,没有安装MATLAB。这种方法的一个限制是它是更加困难比MATLAB脚本调试编译应用程序。输入参数提供给MATLAB代码必须作为string传递的,这使得它很难交流复杂的数据集之间的前端和后端。对于大型或结构化数据,最好使用一个基于文件的基于XML的数据交换机制,逗号分隔值(CSV),或MATLAB文件。

开始编译过程,你调用应用程序的编译器应用程序在MATLAB选项卡。编译器自动检测依赖于其他MATLAB函数并将它们添加在编译过程中。你只需要添加依赖关系不被编译器,如数据文件或图像。请注意,只有MATLAB代码文件是加密的。

创建一个共享库

您还可以使用MATLAB编译器创建一个C或c++共享库(例如,一个lib或. dll文件)。这使得一个进程内的方法的库和调用它的代码是一个操作系统进程的一部分。相比之下,前一节描述了一个涉及两个不同的操作系统进程的进程的方法。前端使用共享库的方法,你必须能够调用外部库使用C包装器接口。

调用函数的优势在一个共享库,而不是调用一个独立的可执行传递参数是容易得多,尤其是当数据集的结构或大。使用MATLAB C API,您可以构造数据矩阵,单元阵列,或结构化数组等数据类型。访问的结果,调用应用程序提取本机C API所提供的数据的结构。

创建一个Java组件为应用程序服务器

当您部署您的MATLAB程序作为一个web应用程序或应用程序服务器组件,授权用户可以通过web浏览器访问它。这种方法的主要优点是,它可以不再需要开发和维护客户端软件和每个用户的计算机上安装软件。MATLAB编译器SDK™使用MATLAB编译器创建的软件组件,可以部署到应用程序服务器和web应用程序。

按照以下步骤将MATLAB应用程序部署到一个基于java的应用程序服务器:

  1. MATLAB应用程序编译成Java ARchive (JAR)或Web应用程序存档(WAR)文件使用MATLAB编译器SDK。Java SDK MATLAB编译器生成一个包装器类,调用编译后的代码。
  2. 安装Java类和MATLAB应用程序服务器上运行。

创建一个. net汇编应用程序服务器

微软模拟到基于java的应用程序服务器是Internet信息服务(IIS),原互联网信息服务器。您可以使用SDK MATLAB编译器生成一个. net或COM组件从MATLAB代码,然后部署IIS使用ASP。网络应用程序。生成的组件可以调用任何语言,符合公共语言规范,如c#, VB。净,ASP。净,以及任何软件技术能够访问一个COM组件,包括Visual Basic®、ASP和Excel。

Web部署

工作流Web部署类似于工作流应用程序服务器部署Java和。net的描述。使用MATLAB编译器SDK MATLAB代码编译成Java或. net组件,然后由web服务器调用。您可以使用Web数据接口显示Web页面上的交互图形没有安装任何客户端软件或插件。

MATLAB生产服务器

编制MATLAB代码运行在应用程序服务器可以快速可靠地处理请求只要并发请求的数量仍然很低。然而,对于大量的并发请求,应用服务器运行的性能会变成一个问题编制MATLAB代码。在RWE例如,开发人员用MATLAB编译器SDK和MATLAB编译器构建一个Java组件自动天然气定价和风险管理系统。使系统能够处理许多并发请求,应用服务器之间的开发人员添加一层和MATLAB编译后的代码。在这一层,一个系统的冗余RMI服务器同时提供主要的并行应用程序服务器。然而,实现这样一个层是一项简单的任务。

处理许多并发请求没有开发自己的中间件解决方案,您可以使用MATLAB生产服务器™。简单的管理,MATLAB生产服务器既可伸缩的并发请求和快速(低延迟)。

可伸缩性是通过在多个MATLAB运行时实例(或“工人”)运行和准备从服务器响应请求。为了增加可靠性和可伸缩性,可以结合MATLAB生产服务器的多个实例。工人们在实例之间共享最大化和最小化响应时间性能。负载平衡负责访问不同的MATLAB生产服务器实例(图2)。

图2。多个MATLAB生产服务器实例提供一个企业应用程序的负载平衡器。

MATLAB生产服务器和Microsoft SQL Server

除了使用MATLAB的相对简单的情况下生产服务器的计算后端企业应用程序,有一个特殊的情况下,客户端系统是一个关系数据库中,微软®SQL Server®

在存储过程中,Microsoft SQL Server能够使用. net框架调用外部代码。在这一过程中,数据库可以通过调用一个外部填列在一个表。net组件。使用。net客户端API,这样一个组件可以调用MATLAB同步生产服务器检索计算值(其他列的表可以作为计算的输入)。

对于这个设置,当表被添加到行,只有这些列包含了必要的数据。其他列是由基于MATLAB的后端。

选择正确的策略

是指出在本文的开始,没有一个部署策略适合每一个可能的场景。首先选择一个策略,满足您的最高优先级需求。然后您可以开发一个更详细的解决方案,解决你所有的组织的需要。

关于作者

提图斯博士Edelhofer是一个高级组长MathWorks咨询服务。他与公司金融、能源贸易和生产,和汽车工业广泛应用自动化业务流程,减少开发时间,将MATLAB解决方案集成到业务关键型应用程序。金宝搏官方网站提图斯拥有硕士和博士学位数学从亚琛技术大学的德国。

2014 - 92230 v00出版

查看相关文章的能力