如何将 OPA 作为库嵌入到低延迟 C++ 进程中

How to embed OPA as a lib in a low latency C++ process

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

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

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

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

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