转载

使用 Bluemix 和 Business Rules 服务实现 IBM ODM 应用程序的多样化,第 2 部分

U. Siddiqui

软件工程师

U. Siddiqui是一位软件工程师,多年来,她一直与 IBM Operational Decision Management 客户紧密合作,共同解决其技术问题,在此期间,她在企业客户如何使用这些产品以及如何将它们集成到其环境中方面获得了广泛的洞察。

正如第 1 部分 中所讨论的,在使用 IBM Bluemix 的 Business Rules 服务时,默认情况下已禁用跟踪。本教程将详细介绍如何在 Bluemix 上启用跟踪。此外,本文还会介绍如何调整 Business Rules 服务的架构特性的性能配置。本内容是IBM 业务流程管理期刊 的一部分。

本教程是 使用 Bluemix 和 Business Rules 服务实现 IBM ODM 应用程序的多样化 系列的第 2 部分。

本系列的第 2 部分将介绍,在决定使用 Business Rules 服务时,如何配置跟踪和性能。

在 IBM Operational Decision Manager (ODM) 中,根据 有关改善 IBM ODM 性能的 developerWorks 教程系列 中的介绍,您可以配置您的规则和客户端应用程序来实现最佳性能。本教程将重点介绍 Business Rules 服务的以下适用的配置:

  • 规则执行时间
  • 内存使用
  • Web 请求的响应时间

构建您的应用程序需要做的准备工作

  • 熟悉 IBM ODM 开发
  • 一个 IBM Bluemix 帐户
  • 熟悉 Web 服务、REST API、JSON、SOAP 和 XML
  • 已完成本系列的第 1 部分

第 1 步. 配置规则跟踪

如前面所述,在 Business Rules 服务中,默认情况下已禁用规则跟踪。但是,您可以通过以下方法配置跟踪:

  1. 通过向有效负载请求添加跟踪过滤器标记来启用跟踪。使用 REST 表单 ( &trace=true ) 查看跟踪过滤器标记,例如: https://brsv2-instanceID.ng.bluemix.net/DecisionService/run.jsp?path=/ruleApp/1.0/ruleset/2.0&trace=true 其中 instanceIDruleAppruleset 的值是从 Ruleset Details 页面中的 URL 中获取的(参见第 1 部分的第 5 步)。将 1.0 替换为当前部署的 RuleApp 版本,将 2.0

    替换为当前部署的规则集版本。

    生成的 XML 有效负载包含其他过滤器标记,就像下面这个示例一样:

    <trac:decisionTraceFilter>    <!--Optional:-->    <trac:all>false</trac:all>    <!--Optional:-->    <trac:none>true</trac:none>    <!--Optional:-->    <trac:executionDuration>true</trac:executionDuration>    <!--Optional:-->    <trac:executionDate>true</trac:executionDate>    <!--Optional:-->    <trac:rulesetProperties>true</trac:rulesetProperties>    <!--Optional:-->    <trac:systemProperties>true</trac:systemProperties>    <!--Optional:-->    <trac:inetAddress>true</trac:inetAddress>    <!--Optional:-->    <trac:totalRulesFired>false</trac:totalRulesFired>    <!--Optional:-->    <trac:totalRulesNotFired>false</trac:totalRulesNotFired>    <!--Optional:-->    <trac:rules>false</trac:rules>    <!--Optional:-->    <trac:rulesFired>true</trac:rulesFired>    <!--Optional:-->    <trac:rulesNotFired>true</trac:rulesNotFired>    <!--Optional:-->    <trac:totalTasksExecuted>false</trac:totalTasksExecuted>    <!--Optional:-->    <trac:totalTasksNotExecuted>true</trac:totalTasksNotExecuted>    <!--Optional:-->    <trac:tasks>false</trac:tasks>    <!--Optional:-->    <trac:tasksExecuted>false</trac:tasksExecuted>    <!--Optional:-->    <trac:tasksNotExecuted>false</trac:tasksNotExecuted>    <!--Optional:-->    <trac:outputString>false</trac:outputString>    <!--Optional:-->    <trac:inputParameters>false</trac:inputParameters>    <!--Optional:-->    <trac:outputParameters>true</trac:outputParameters>    <!--Optional:-->    <trac:workingMemory>true</trac:workingMemory>    <!--Optional:-->    <trac:workingMemoryFilter>string</trac:workingMemoryFilter>    <!--Optional:-->    <trac:executionEvents>false</trac:executionEvents>    <!--Optional:-->    <trac:boundObjects>true</trac:boundObjects>    <!--Optional:-->    <trac:boundObjectsSerializationType>ClassName</trac:boundObjectsSerializationType>  </trac:decisionTraceFilter>

    生成的 JSON 有效负载包含更多过滤器标记,就像下面这个示例一样:

    "__TraceFilter__": {     "infoRulesetProperties": true,     "infoOutputString": false,     "infoInputParameters": true,     "infoOutputParameters": true,     "none": true,     "infoExecutionEventsAsked": false,     "workingMemoryFilter": "string",     "infoBoundObjectByRule": true,     "infoExecutionDuration": true,     "infoExecutionDate": true,     "infoExecutionEvents": false,     "infoInetAddress": true,     "infoRules": false,     "infoRulesNotFired": true,     "infoSystemProperties": true,     "infoTasks": false,     "infoTasksNotExecuted": false,     "infoTotalRulesFired": false,     "infoTotalRulesNotFired": false,     "infoTotalTasksExecuted": false,     "infoTotalTasksNotExecuted": true,     "infoWorkingMemory": true,     "infoRulesFired": true,     "infoTasksExecuted": false,     "infoBoundObjectSerializationType": "ClassName"   }

    在执行请求中添加这些包含启用了的合适过滤器的标记。有效负载响应包含请求的跟踪信息。

  2. 在获得 WSDL 或 WADL 时启用决策跟踪信息(如 IBM ODM 文档 查看或下载 HTDS 描述文件 中所述),然后在客户端上收集执行信息。透明决策服务提供了以下统计数据:成功调用的数量、有故障的调用的数量、平均处理时间、最后处理时间、初始化日期和时间。

在调试应用程序时,您可能发现以下跟踪信息特别有用:输入和输出参数、运行的规则、花在执行上的时间,以及 systemProperties 信息(包含在规则运行时使用的 Java 版本),

第 2 步. 分析规则集执行性能

Rule Execution Server 控制台中的 Ruleset Statistics View 显示规则集执行的平均时间。

要使用执行单元内存转储来分析规则集执行的性能,可以转到服务实例的 Rule Execution Server 控制台上的 Server Info 选项卡,如下面这个示例所示:

使用 Bluemix 和 Business Rules 服务实现 IBM ODM 应用程序的多样化,第 2 部分

点击查看大图

关闭 [x]

使用 Bluemix 和 Business Rules 服务实现 IBM ODM 应用程序的多样化,第 2 部分

然后单击 localhost 执行单元来打开 Server Info View,如下面这个示例所示:

使用 Bluemix 和 Business Rules 服务实现 IBM ODM 应用程序的多样化,第 2 部分

点击查看大图

关闭 [x]

使用 Bluemix 和 Business Rules 服务实现 IBM ODM 应用程序的多样化,第 2 部分

最后单击 Execution Unit memory dump 旁边的 View

第 3 步. 改进规则执行时间

  1. Rule Execution Server 控制台中的 Ruleset Statistics View 显示了规则集执行的平均时间。规则集首次启动时运行所花的时间是规则集解析时间和实际的规则集执行时间的和。要减少规则集解析时间,可以应用 提高 IBM Operational Decision Manager 的性能,第 1 部分:减少规则执行时间 中的 减少规则解析时间的建议 部分的规则集设计更改。针对执行单元、应用程序设计和环境设置的建议不适用。
  2. 要减少规则集执行时间,可以设计规则集和应用程序来实现改进的实际执行时间,使用下面的插图中总结的多个服务实例。 使用 Bluemix 和 Business Rules 服务实现 IBM ODM 应用程序的多样化,第 2 部分

    点击查看大图

    关闭 [x]

    使用 Bluemix 和 Business Rules 服务实现 IBM ODM 应用程序的多样化,第 2 部分

    1. 通过以下方式解决规则集设计:设计规则集来选择最优的引擎和执行模式,优化规则工件设计,并配置 XOM,这些方法已在 提高 IBM Operational Decision Manager 的性能,第 1 部分:减少规则执行时间 中的 减少实际规则集执行时间的推荐配置 部分详细介绍。配置执行跟踪和 Rule Execution Server 的建议不适用。
    2. 按以下准则使用 Business Rules 服务的多个实例:
      • 分开管理生产和测试环境,将 Business Rules 服务的不同实例用于生产和测试(您可以在 Bluemix 中为测试和生产创建不同的空间,并在这些不同的空间中创建实例。)将针对生产和测试的规则集部署在不同的实例上。
      • 如果您有许多活动的规则集和规则集版本,并注意到性能有所降级,可以将您的规则部署在 Business Rules 服务的多个实例上来提高可伸缩性。
    3. 按照以下准则设计您的客户端应用程序:
      • 如果对测试和生产使用不同的 Business Rules 服务实例,可以配置您的客户端来将 RuleApp 部署到合适的服务实例。
      • 如果您的规则被部署到 Business Rules 服务的多个实例,请确保您的客户端应用程序能够在多个服务实例上平衡请求负载。
      • 要实现最佳性能,可以关闭跟踪,或者将执行跟踪信息大小限制到所需的最小大小,因为在规则执行期间写入跟踪信息会导致执行时间更长。参阅第 1 步,了解如何配置规则跟踪。

第 4 步. 减少内存使用

按照下图中的总结来设计您的规则集和客户端应用程序,以减少内存使用。从 Rule Execution Server 控制台上的规则集缓存信息(执行单元内存转储)中收集诊断信息。

使用 Bluemix 和 Business Rules 服务实现 IBM ODM 应用程序的多样化,第 2 部分

点击查看大图

关闭 [x]

使用 Bluemix 和 Business Rules 服务实现 IBM ODM 应用程序的多样化,第 2 部分

  1. 根据以下准则来设计规则集:应用减少规则集解析时间的规则集设计建议,以及 提高 IBM Operational Decision Manager 的性能,第 2 部分:减少规则执行的资源使用 (参阅 减少高内存利用率的建议 部分)中描述的规则集设计更改。
  2. 根据以下准则来设计客户端应用程序:
    • 不要同时应用所有规则集。限定一些 ruleApp 或规则集的部署时间,以便在任何给定时间仅解析一个规则集。规则集将会解析使用内存,一些内存可在解析完成后回收。因此,等待规则集解析完成再部署另一个规则集,有助于保持较低的内存占用。
    • 减少 BOM 输入参数对象的数量和大小。减少 XML 对象大小,可以在将 XML 输入参数发送给公开为 Web 服务的规则集时避免 OutOfMemoryErrors 。如果启用了跟踪,并且对于 XML,将 trac:inputParameters 元素设置为 true ,或者对于 JSON,将 infoInputParameters 元素设置为 true

      ,您可以查看输入对象。

      对于 XML 数据,可以使用来自 XML 库的工具来测量 XML 对象的大小。对于大型 XML 对象(XML 解析的成本占整体处理成的很高比例),可以运行 XPATH 查询来提取所需的值,然后将该信息传递给规则集。

第 5 步. 减少 Web 服务响应时间

使用 Web 服务时的性能问题主要包括 Web 请求的缓慢响应时间。用户可能需要等待几分钟,请求才会被处理。随着同时调用数量增加,响应时间可能延长。从 Rule Execution Server 控制台 Explorer 选项卡的 Service information 下收集诊断信息会对您有所帮助。您可以通过透明决策服务获得运行的规则集的统计数据,并将规则集执行时间与 Web 服务响应时间进行比较。分析有多少并发客户在同时连接该 Web 服务(以及连接频率有多高),有多少不同的规则集在运行,以及 Web 请求是否间歇性地变慢(表明演示是由解析从缓存中清除的规则集而导致的)。按照下面的插图中的总结,设计规则集和客户端应用程序。

使用 Bluemix 和 Business Rules 服务实现 IBM ODM 应用程序的多样化,第 2 部分

点击查看大图

关闭 [x]

使用 Bluemix 和 Business Rules 服务实现 IBM ODM 应用程序的多样化,第 2 部分

应用 提高 IBM Operational Decision Manager 的性能,第 3 部分:减少托管透明决策服务的响应时间 中推荐的 规则集设计更改应用程序设计更改 。推荐的服务器配置更改不适用于 Business Rules 服务。

该文章推荐使用拦截器而不是 XU 属性 asynchronousRulesetParsing=true ,以允许执行规则集的旧版本的同时解析新版本。但是,拦截器无法用于 Business Rules 服务,所以它们无法用于此用途。相反,在部署一个新规则集版本后,会触发一个 “哑” 请求来强制解析新规则集版本,从而导致解析延迟。等待这个哑请求完成后,再运行规则集的真实请求。

结束语

在本教程中,您学习了如何配置 Bluemix 上的 Business Rules 服务的跟踪和性能。在融会贯通这些建议之前,一定要阅读本系列的第 1 部分。

致谢

感谢 Alain Robert 和 Pierre Berlandier 审阅本教程。还要感谢 IBM ODM 和 Business Rules 服务技术解决团队,包括 2 级和 3 级支持团队、研发团队,以及参考文档的作者。

BLUEMIX SERVICE USED IN THIS TUTORIAL: Business Rules 通过保持业务逻辑与应用程序逻辑分离,最大限度地减少代码更改。

相关主题: 阅读一个有关 IBM ODM 性能的系列 阅读一篇有关性能调优的 IBM 红皮书出版物 咨询堆栈溢出社区

正文到此结束
Loading...