【问题标题】:How stable is Apache ODE In Memory Process Execution?Apache ODE 在内存进程执行中的稳定性如何?
【发布时间】:2013-01-24 16:29:59
【问题描述】:

我们在 Servicemix 3.3.2 中使用 apache ode 1.3.3 来实现我们的工作流程。当负载增加时(即每单位时间的流调用数),ode 冻结,停止处理新请求并挂起。 Usullay,我们通过在清理“数据”文件夹后重新启动 Servicemix 来解决此问题。

最初,我认为这是一个线程问题(缺少可供 ode 使用的线程)。在增加 ode-jbi.properties 中的“线程池大小”之后,这个问题得到了扩展。但是,在重负载下,ode 仍然挂起。

进一步调查,通过额外的日志记录显示,在重负载下,ode 无法获得足够的数据库连接 (NoManagedConnectionException) 以保持其状态。我们的 ode 持久性配置是 INTERNAL(请参阅 ode-jbi.db.mode=INTERNAL ),其中连接池由容器/运行时本身维护。将其迁移到外部 jndi 数据源配置(我们可以在其中配置连接池参数)的努力尚未取得成果(由于我无法理解每个阶段不断出现的无数错误:(:))

所以我尝试了另一个可用选项,即我的进程的“内存中执行”。这在“测试设置”中运行良好,并且在模拟负载下不再抛出“NoManageConnectionException”。

但我对将其移至 PROD 有一些顾虑。内存中执行与“持久”执行有何不同?这将消耗多少内存?这是否会通过导致“OutOfMemoryOutages”影响我的 PROD 设置的可靠性。

我们有大约 10 个已部署的 bpel 进程。和负载(请求数)......它通常是最小的,但有时会飙升(这就是我需要我的进程运行得非常快但不会导致任何 OutOfMemory PROD 中断的地方......希望:D :) :P )

需要您对此的想法、建议和意见。

提前致谢, 阿伦

【问题讨论】:

  • 有你提到的同样的问题。感谢内存中的提示,将使用它进行开发。移动到测试/生产后将更新。

标签: apache-ode


【解决方案1】:

答案有点晚了,但仍然相关,希望将来能对某人有所帮助。

关于外部数据库配置,this link 描述了如何将 Bitronix TM 与 Tomcat 结合使用。是的,它特定于 Tomcat,但在其他应用程序服务器中,您将有其他方法来指定托管数据源。只需确保在 web.xmlode-axis2.properties 文件中相应地设置了 Apache ODE 中的引用。这应该使您能够使用外部数据库。

我发现在高负载下在内存中执行进程可能会导致ConcurrentModificationExceptionThis JIRA 指的是问题,并且已将固定版本设置为 1.4。

所以我猜答案,无论内存中的执行是否稳定,答案是否定的,因为目前存在一个在高负载下表现出来的错误。

外部数据库耦合也是可能的,如果 CME 也使用外部数据库抛出,我将在明天测试。

编辑:

在连接到外部数据库(容器管理)时没有看到 ConcurrentModificationException,虽然偶然发现了 this JIRA 的症状,这是可修补的,尽管问题中没有提供反馈,我目前无法构建来源。

编辑:

内存中执行的 BPEL 流程仅限于同步(具有一个接收操作),如 here 所述,这实际上是 ODE 开发人员对同一问题的回答...:)

因此,BPEL 流程的内存中执行是稳定的,只要它们是同步的。

【讨论】:

  • @Dormhouse :那么内存模型的表现如何?你把它移到了 PROD 吗?一个月后的分析是什么?
  • 我们不能在我们的进程中使用内存执行,因为它是异步的。所以我们使用外部数据库。我们还需要一段时间才能在类似 PROD 的环境中进行测试。
猜你喜欢
  • 2014-12-01
  • 2016-12-23
  • 1970-01-01
  • 1970-01-01
  • 2012-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多