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 服务的以下适用的配置:
如前面所述,在 Business Rules 服务中,默认情况下已禁用规则跟踪。但是,您可以通过以下方法配置跟踪:
&trace=true
) 查看跟踪过滤器标记,例如: https://brsv2-instanceID.ng.bluemix.net/DecisionService/run.jsp?path=/ruleApp/1.0/ruleset/2.0&trace=true
其中 instanceID 、 ruleApp 和 ruleset 的值是从 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" }
在执行请求中添加这些包含启用了的合适过滤器的标记。有效负载响应包含请求的跟踪信息。
在调试应用程序时,您可能发现以下跟踪信息特别有用:输入和输出参数、运行的规则、花在执行上的时间,以及 systemProperties
信息(包含在规则运行时使用的 Java 版本),
Rule Execution Server 控制台中的 Ruleset Statistics View 显示规则集执行的平均时间。
要使用执行单元内存转储来分析规则集执行的性能,可以转到服务实例的 Rule Execution Server 控制台上的 Server Info 选项卡,如下面这个示例所示:
点击查看大图
关闭 [x]
然后单击 localhost 执行单元来打开 Server Info View,如下面这个示例所示:
点击查看大图
关闭 [x]
最后单击 Execution Unit memory dump 旁边的 View 。
点击查看大图
关闭 [x]
按照下图中的总结来设计您的规则集和客户端应用程序,以减少内存使用。从 Rule Execution Server 控制台上的规则集缓存信息(执行单元内存转储)中收集诊断信息。
点击查看大图
关闭 [x]
OutOfMemoryErrors
。如果启用了跟踪,并且对于 XML,将 trac:inputParameters
元素设置为 true
,或者对于 JSON,将 infoInputParameters
元素设置为 true
,您可以查看输入对象。
对于 XML 数据,可以使用来自 XML 库的工具来测量 XML 对象的大小。对于大型 XML 对象(XML 解析的成本占整体处理成的很高比例),可以运行 XPATH 查询来提取所需的值,然后将该信息传递给规则集。
使用 Web 服务时的性能问题主要包括 Web 请求的缓慢响应时间。用户可能需要等待几分钟,请求才会被处理。随着同时调用数量增加,响应时间可能延长。从 Rule Execution Server 控制台 Explorer 选项卡的 Service information 下收集诊断信息会对您有所帮助。您可以通过透明决策服务获得运行的规则集的统计数据,并将规则集执行时间与 Web 服务响应时间进行比较。分析有多少并发客户在同时连接该 Web 服务(以及连接频率有多高),有多少不同的规则集在运行,以及 Web 请求是否间歇性地变慢(表明演示是由解析从缓存中清除的规则集而导致的)。按照下面的插图中的总结,设计规则集和客户端应用程序。
点击查看大图
关闭 [x]
应用 提高 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 红皮书出版物 咨询堆栈溢出社区