让我们假设一个场景,对象将每秒请求访问许多对象。单个PDP上的沉重负担意味着每个请求的等待和读写时间会增加。
到目前为止,我已经使用AuthzForce Core project来设置一个PDP,为此我有一个for循环发送多个请求(可以使用线程同时完成)。但是,这似乎不适合在分布式环境中评估我的策略。
有什么办法可以做到?也许使用AuthzForce Server?
修改:
我正在运行一个使用Authzforce Core的Java应用程序。该程序创建一个加载单个策略文档的PDP实例,然后for循环执行多个请求。这些都是在程序本身内部完成的。
答案 0 :(得分:1)
Authzforce服务器具有高可用性选项: https://github.com/authzforce/fiware/blob/master/doc/InstallationAndAdministrationGuide.rst#high-availability
您可以遵循相同的准则来使用单个pdp实施此操作。
答案 1 :(得分:1)
在不查看代码或体系结构的情况下,很难在此处帮助提高性能,但是我可以给出一些一般性的提示(其中一些可能对您很明显,但只是为了更全面):
由于PDP嵌入在Java应用程序中,因此我假设(或确保您这样做)您正在使用AuthzForce native Java API(自述文件中的示例),这是最有效的评估方法。 / p>
我还假设您在应用程序的整个生命周期中都在(重新)使用相同的PDP(BasePdpEngine
)实例。它应该是线程安全的。
为了一次评估多个请求,您可以尝试使用PDP引擎的evaluate(List)
方法(javadoc)来代替通常的evaluate(DecisionRequest)
,在某些情况下这样做会更快
如果使用“分布式环境”,则表示您可能在不同位置部署了Java应用程序的多个实例,因此,多个PDP,正确的设置取决于加载策略文档的位置/方式。 :本地文件,远程数据库等。请参阅我的最新评论。如Rafael Sisto的回答所述,您可以在AuthzForce Server安装指南的“高可用性”部分重用一些指南。