open-policy-agent - 如何将 OPA 作为库嵌入到低延迟 C++ 进程中
问题描述
我们目前正在评估 OPA 作为我们主要的细粒度访问控制引擎。我们的数据路径是用 C++ 编写的,以满足高性能要求。我看到可以将 OPA 嵌入到 GO 进程中,但不确定这是否在 C++ 容器中进行了评估。
- 是否存在将 OPA 作为库嵌入到 C++ 容器中的现有部署?
- 如果我们将 OPA 作为库嵌入,在评估策略时是否会通过网络进行任何通信(与其他进程或数据库)?
解决方案
对于使用 C++ 中的 OPA,有几个选项,大致按复杂性和越来越多的未知领域排序:
- 在 sidecar 进程或某些独立服务中使用 HTTP API。(显然现在你正在寻找什么,为了完整起见包括在内。)
- 使用 Wasm:没有适用于 C++ 的 SDK,但希望 ABI 不会太复杂,请参阅文档。
- 将 OPA 嵌入为 Cgo 库:工作量很大,您必须定义表面 API,即执行将 OPA 的核心重新包装到可以链接的库中所需的工作。
我会先尝试(1.),看看它是否真的不适合您的性能要求(使用 Unix 套接字,分析评估,仔细查看您的策略代码......);然后我会伸手去拿 Wasm (2.)。OPA 的 Wasm 模块包含用于评估策略逻辑的编译配方;没有解释器开销。使用 (3.),您必须比 (2.) 做更多的工作,并且(在我看来)得到更少的工作。
推荐阅读
- angular - 从字符串到日期设置格式
- html - 从 Jive 响应接收格式错误的 HTML 错误,我该如何继续?
- node.js - Node.js POST 请求在 Postman 中永远挂起
- android - 为什么 FFMPEG 不能在 android 中转换一些 64k 的音频文件?
- stack - Forth 实现使用系统堆栈作为返回堆栈是否可行?
- ruby-on-rails - 无法从 Ruby 的 Alpine docker 映像中启动新的 Rails 项目
- java - 尝试将变量用作参数时出现各种错误
- azure - 用于 Azure Functions 的 ARM 模板,其中包含适用于不同环境和插槽的许多 appSettings
- arrays - hasher.combine(self) 会在使用集合时造成麻烦吗?
- dart - 如果使用泛型的类型相同,如何比较?