首页 > 解决方案 > 如何将 OPA 作为库嵌入到低延迟 C++ 进程中

问题描述

我们目前正在评估 OPA 作为我们主要的细粒度访问控制引擎。我们的数据路径是用 C++ 编写的,以满足高性能要求。我看到可以将 OPA 嵌入到 GO 进程中,但不确定这是否在 C++ 容器中进行了评估。

  1. 是否存在将 OPA 作为库嵌入到 C++ 容器中的现有部署?
  2. 如果我们将 OPA 作为库嵌入,在评估策略时是否会通过网络进行任何通信(与其他进程或数据库)?

标签: open-policy-agent

解决方案


对于使用 C++ 中的 OPA,有几个选项,大致按复杂性和越来越多的未知领域排序:

  1. 在 sidecar 进程或某些独立服务中使用 HTTP API。(显然现在你正在寻找什么,为了完整起见包括在内。)
  2. 使用 Wasm:没有适用于 C++ 的 SDK,但希望 ABI 不会太复杂,请参阅文档
  3. 将 OPA 嵌入为 Cgo 库:工作量很大,您必须定义表面 API,即执行将 OPA 的核心重新包装到可以链接的库中所需的工作。

我会先尝试(1.),看看它是否真的不适合您的性能要求(使用 Unix 套接字,分析评估,仔细查看您的策略代码......);然后我会伸手去拿 Wasm (2.)。OPA 的 Wasm 模块包含用于评估策略逻辑的编译配方;没有解释器开销。使用 (3.),您必须比 (2.) 做更多的工作,并且(在我看来)得到更少的工作。


推荐阅读