【问题标题】:Lightweight rules engine on server side for server functionality orchestration服务器端的轻量级规则引擎,用于服务器功能编排
【发布时间】:2013-12-14 01:26:56
【问题描述】:

我的 Java 服务器具有一个通用操作,可在内部满足多种功能。

服务器调用期间一个或多个函数的执行取决于调用的是哪个客户端以及客户端传递的参数。

服务器根据客户端参数在内部执行功能编排(通常参数是客户类型、国家/地区、产品类型等)

作为服务器的一部分,我们目前已经设置了 if/else 块来确定这一点,但对此进行任何更改都需要更改代码并发布。

我计划改变这一点并使用非常轻量级的规则引擎,我可以在其中传递一组参数并通过规则(或从那里淘汰)编排功能。

最重要的要求是,此规则引擎可以动态配置(通过一些 UI),无需任何代码发布(如存储在缓存中的规则)。

另外,我的服务器每天要处理千万个请求,而且它的响应速度必须非常快,而且我无法承受每个 HIT 上的 DB 命中或繁重的规则引擎。

我的一个想法是引入特征矩阵(使用一些数据结构)并将其发布到缓存,每个服务器 HIT 都会首先检查这个矩阵并确定这个请求需要做什么,我可以改变特征矩阵通过一些 UI 进行配置,新配置将尽快发布以缓存,下一个服务器请求将使用新配置。

对实施有什么想法或建议吗?

【问题讨论】:

    标签: java soa rule-engine


    【解决方案1】:

    您可以将 Prolog 用作规则引擎:存在许多轻量级实现。

    当然,这些并不总是快如闪电,但对你来说可能已经足够快了,尤其是在仔细编写规则的情况下。

    然后你可以缓存结果。

    如果您有通常的一堆参数,请将其设为对象,根据参数的内容提供散列函数,并将其用作散列映射的键。为了保持缓存的大小合理,为键实现 LRU 列表。

    【讨论】:

    • 真的很喜欢你的第二种方法,非常适合我的用例,接受!
    • @Rushik 我手头有一个非常相似的问题,很高兴收到您关于如何解决您的问题的反馈
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-24
    • 2012-09-16
    • 1970-01-01
    • 2010-10-02
    • 2011-02-14
    相关资源
    最近更新 更多