在分布式环境中模拟多个策略决策点 (PDP)

Simulating multiple Policy Decision Points (PDPs) in distributed environment

让我们假设一个场景,其中主体每秒请求访问许多对象。单个 PDP 上的重负载意味着每个请求的等待时间和 read/write 次增加。

到目前为止,我已经使用 AuthzForce Core project 设置了一个 PDP,为此我有一个 for 循环发送多个请求(这可以使用线程同时完成)。但是,这似乎不是在分布式环境中评估我的策略的合适设置。

有什么办法可以做到吗?也许使用 AuthzForce Server?

编辑:

我是 运行 一个使用 Authzforce Core 的 Java 应用程序。该程序创建一个 PDP 实例,该实例加载单个策略文档,然后 for 循环执行多个请求。这一切都在程序本身的本地完成。

Authzforce 服务器有一个高可用性选项: https://github.com/authzforce/fiware/blob/master/doc/InstallationAndAdministrationGuide.rst#high-availability

您可以遵循相同的指导方针,使用您的单个 pdp 来实现这一点。

如果不查看代码或架构,很难帮助提高性能,但我可以提供一些一般性提示(其中一些对您来说可能显而易见,但只是为了彻底):

  1. 由于 PDP 嵌入到您的 Java 应用程序中,我假设(或确保您这样做)您正在使用 AuthzForce native Java API(自述文件中的示例),这是最有效的评估方式。

  2. 我还假设您在应用程序的整个生命周期中(重新)使用相同的 PDP (BasePdpEngine) 实例。应该是thread-safe.

  3. 为了一次评估多个请求,您可以尝试 PDP 引擎的 evaluate(List) 方法 ( javadoc ) 而不是通常的 evaluate(DecisionRequest),这是在某些情况下更快。

  4. 如果 "distributed environment",您的意思是您可能在不同的地方部署了 Java 应用程序的多个实例,因此有多个 PDP,正确的设置取决于在 where/how 上加载策略文档:本地文件、远程数据库等。请参阅我的最后一条评论。正如 Rafael Sisto 的回答中提到的,您可以在那里重复使用 AuthzForce Server 安装指南的高可用性部分中的一些指南。