选择MATLAB应用程序部署策略

MathWorks的提图斯·埃德尔霍夫博士(Titus Edelhofer)著


您有多种选择用于在Matlab中部署和共享应用程序的部署和共享®。最直接的选择之一是将单个算法和应用程序打包到单个文件中,并将该文件分发给其他MATLAB用户。然而,在许多情况下,这种简单的方法并不实用。生产需求、IT环境或性能需求可能需要更高级的部署策略。

本文将指导您完成为MATLAB应用程序选择最佳部署方法的过程。它涵盖了三种可用的主要策略:使用批处理直接部署MATLAB代码,使用MATLAB Coder™生成C代码,以及使用MATLAB Compiler™部署。

部署策略概述绝不是详尽无遗的。没有一个尺寸适合的策略,在选择策略之前,必须彻底分析您的要求。

应用结构:前端和后端

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

后端是计算结果并生成要显示的图形的计算引擎。组合的后端和前端管理您的部署选项。由于基于MATLAB的前端的部署相当简单,因此本文将专注于后端部署的选项。

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

部署未编译的MATLAB代码有两种基本策略:使用MATLAB作为批处理引擎,或者使用MATLAB Parallel Server™。

使用MATLAB批处理

批处理方法的一个优点是它易于实现 - 更新服务器代码是一个简单的任务。但是,其可伸缩性是有限的,因此它可能不适用于处理多个并发请求。这种方法还需要MATLAB的并发网络许可,因为批处理不绑定到一个特定用户。

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

Matlab -R“Blackscholes;戒烟”

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

在实践中,可以使用更高级的命令来处理错误并抑制不必要的视觉元素:

Matlab -nodesktop -nosplash -wait -r " try,blackscholes;catch,end;quit "

当对外部可执行文件的简单调用足以完成处理且高可用性不是严格要求时,批处理是合适的。请注意,当您打算将MATLAB也用于前端时,使用这种方法没有什么好处,因为它将涉及使用另一个许可证启动MATLAB的第二个实例。

使用MATLAB并行服务器

虽然批处理在与前端同一台机器上简化了未分册的MATLAB代码的执行,但MATLABPALLALLER服务器可以轻松从桌面卸载到服务器环境的计算密集型MATLAB代码。使用MATLAB并行服务器,您可以在计算机集群或Amazon EC2上运行计算上的密集型MATLAB应用程序。该方法支持需要并行计算和存储万博1manbetx在分布式阵列中的大数据集的应用的应用。由于MATLAB并行服务器为MATLAB工具箱提供许可证,因此您可以在群集中执行MATLAB应用程序而无需为每台计算机获取特定于产品的许可证。

典型的工作流程如下:从并行计算工具箱™开始,准备代码以进行并行执行parfor或者工作和任务。一旦代码按预期并行运行(不考虑性能因素),准备代码在MATLAB并行服务器集群上运行时,您不需要对代码进行任何更改;这仅仅是使用另一种配置的问题。

生成C / C ++代码

MATLAB编码器可以用来生成自包含的,可部署的C/ c++代码。生成的符合ANSI/ISO标准的C和c++代码不依赖于MathWorks提供的静态或动态库或运行时环境;它可以在任何提供合适的C/ c++编译器的平台上使用。当目标部署平台不受matlab支持时,建议使用这种方法——这类平台包括嵌入式系统和平台,如AIX或IRIX。万博1manbetx对于这些平台,您可以生成集成到更大的应用程序或作为共享库调用的C/ c++代码。

这种方法的一个主要缺点是,MATLAB Coder支持MATLAB核心语言特性的一个子集——包括程序控制构造、函数和矩万博1manbetx阵操作——但不支持全部MATLAB和相关工具箱提供的功能。看到MATLAB语言功能支持C / C ++代码生成万博1manbetx

使用MATLAB编译器进行部署

MATLAB编译器使您能够将MATLAB程序部署为独立应用程序或共享库(。Lib或.dll文件)。使用MATLAB编译器创建的应用程序和库依赖于MATLAB运行时,它使用户能够运行编译后的MATLAB应用程序,而不需要安装MATLAB。MATLAB Runtime可以打包并与应用程序一起安装,也可以在安装过程中下载。因为您可以自由分发MATLAB Runtime,所以MATLAB Compiler允许您运行代码的多个实例,而无需获得额外的许可证。

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

您可以使用MATLAB编译器将MATLAB代码部署为独立的Windows应用程序,共享库,Excel®加载项,一个.NET程序集或泛型COM组件,以及其他选项(图1)。

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

创建独立应用程序

使用MATLAB编译器部署代码的最简单方法是生成独立应用程序。可以使用内置接口(前端)或仅用于仅作为处理引擎的应用程序生成应用。旨在用作处理引擎的独立应用类似于批处理中使用的未分册的MATLAB应用程序,因为它们由可能通过命令行传递参数的前端进程来调用它们。

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

要启动编译过程,您可以从应用程序在MATLAB选项卡。编译器自动检测对其他MATLAB函数的依赖关系,并在编译过程中添加它们。您只需要添加编译器没有检测到的依赖项,例如数据文件或图像。请注意,只有MATLAB代码文件被加密。

创建共享库

您还可以使用MATLAB编译器创建C或C ++共享库(例如,.lib或.dll文件)。这使得能够进行进程方法,其中载体和调用它的代码是单个操作系统进程的一部分。相反,前一节描述了一种涉及两个单独的操作系统进程的处理方法。要使用共享库方法,前端必须能够使用C包装接口调用外部库。

在共享库中调用函数而不是调用独立可执行文件的优点是传递参数更容易,尤其是当数据集都是结构或大的时。使用MATLAB C API,可以将数据构建为矩阵,单元格阵列或结构阵列,以及其他数据类型。要访问结果,调用应用程序从API提供的结构中提取本机C数据。

为应用服务器创建Java组件

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

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

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

为应用程序服务器创建.NET程序集

与基于java的应用服务器类似的是Internet Information Services (IIS),它的前身是Internet Information Server。您可以使用MATLAB Compiler SDK从您的MATLAB代码生成。net或COM组件,然后部署IIS以与ASP一起使用。网络应用程序。您生成的组件可以从任何符合公共语言规范的语言调用,如c#、VB。净,ASP。NET,以及任何能够访问COM组件的软件技术,包括Visual Basic®,asp和excel。

Web部署

Web部署的工作流程类似于用于Java和.NET描述的Application Server部署的工作流程。您使用MATLAB编译器SDK将MATLAB代码编译为Java或.NET组件,然后由Web服务器调用。您可以使用Web数字接口在网页上显示交互图形,而无需安装任何客户端软件或插件。

MATLAB生产服务器

编译后的MATLAB代码运行在应用服务器上可以可靠和快速地处理请求,只要并发请求的数量保持在低水平。然而,对于大量并发请求,性能可能成为运行编译后的MATLAB代码的应用服务器的一个问题。在RWE例如,开发人员使用MATLAB编译器SDK和MATLAB编译器来构建自动天然气定价和风险管理系统的Java组件。要使系统能够处理许多并发请求,开发人员在应用程序服务器和编译的MATLAB代码之间添加了一层。在该图层中,冗余RMI服务器的系统并行并行地服务主应用服务器。但是,这种层的实现是非琐碎的任务。

要在不开发自己的中间件解决方案的情况下处理许多并发请求,可以使用MATLAB Production Server™。简单的管理,MATLAB生产服务器是可伸缩的并发请求和快速(低延迟)。

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

图2.多个MATLAB生产服务器实例为具有负载均衡器的企业应用程序提供服务。

MATLAB生产服务器和Microsoft SQL Server

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

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

对于这种设置,当向表中添加行时,只填充那些包含必要数据的列。其他列由基于MATLAB的后端填充。

选择正确的策略

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

关于作者

提图斯博士Edelhofer是MathWorks咨询服务公司的高级组长。他与金融、能源交易和生产以及汽车行业的公司在广泛的应用领域合作,以实现业务流程自动化,减少开发时间,并将MATLAB解决方案集成到关键业务应用程序中。万博 尤文图斯Titus拥有德国亚琛工业大学的数学硕士和博士学位。

发布2014年 - 92230V00

查看相关功能的文章