我们正在Siddhi之上构建一个应用程序(使用Java库),该应用程序允许用户动态添加规则,并根据这些规则运行所有传入的信息。我的问题是,最好是拥有一个包含许多查询,流,窗口和分区的大型应用程序,或者将每个查询分解为自己的应用程序。
我们已经将所有内容都包含在一个单独的Siddhi应用程序(SiddhiAppRuntime
)中,但是它开始变得越来越大,我担心事情可能会以意想不到的方式开始彼此交互。每当我们的应用程序重新启动时,我们还将快照SiddhiAppRuntime
并恢复状态。如果我们要重新运行数百个模式查询,则可能会导致大规模的恢复。
我正在考虑为每个查询分别从单个SiddhiAppRuntime
中创建一个SiddhiManager
。好处(如我所见)将减少意外交互的风险,使每个查询能够独立运行,并且在关闭后恢复查询应该更加简单,因为它仅需要还原单个查询。可能有数百个SiddhiAppRuntime
可能会增加潜在的缺点。
什么是我们方案的最佳实践?无论是通过规则运行数据还是在必须重新启动的情况下恢复规则,都将提供更好的性能。
(如果范围太广或需要任何澄清,我会尽力相应地更新此问题)
答案 0 :(得分:1)
从冗长的描述中,我假设用户添加的这些规则不会相互影响,这意味着user1添加的规则不会与user2添加的规则进行交互。
在这种情况下,建议为每个用户使用不同的Siddhi Apps(SiddhiAppRuntimes)。由于应用程序不会彼此交互,因此不会增加很多额外的性能开销。这将改善快照过程,因为我们将为每个应用程序使用单独的快照。 此外,这将确保您在每个规则集合之间有清晰的分隔,并且易于管理。