【免费下载链接】openframe-oss-lib
Shared libraries between all services
OpenFrame OSS Lib 是 AI 驱动 MSP(托管服务提供商)平台 OpenFrame 的核心后端共享库集合。它以模块化 Spring Boot 库的形式,一站式提供多租户认证、响应式 API 网关、Kafka 流处理与 Agent 生命周期管理,让平台服务无需重复造轮子。本文面向新手,带你快速看懂这个 monorepo 能解决哪些难题、如何动手构建。
一、项目是什么:共享库集合而非独立服务 📦
首先需要澄清一个关键认知:本仓库包含的是共享库模块(Shared Libraries),不是一个可直接部署的独立服务。它被 OpenFrame 平台主应用及一系列服务以 Maven 依赖的方式复用。
简单来说,过去每个微服务都要自己实现一遍"多租户隔离、JWT 校验、Kafka 消费、MongoDB 仓储",OpenFrame OSS Lib 把这些横切能力抽取成可独立版本化的 Maven 构件:
| 能力域 | 代表模块 | 解决的问题 |
|---|---|---|
| 边缘安全 | openframe-gateway-service-core | 响应式 JWT / API Key 网关、限流 |
| 身份认证 | openframe-authorization-service-core | OAuth2 + OIDC 授权服务器 |
| 内部 API | openframe-api-service-core | GraphQL + REST 双门面 |
| 外部 API | openframe-external-api-service-core | 面向第三方的版本化 REST |
| Agent 管理 | openframe-client-core | Agent 注册、心跳、RMM 执行 |
| 数据层 | openframe-data-mongo-common/openframe-data-mongo-sync | MongoDB 领域模型与租户感知仓储 |
| 流处理 | openframe-stream-service-core | Kafka 事件摄取、富集与状态投影 |
完整模块清单可参考 README.md 中的 Module Summary 表格。
二、分层架构一览:从网关到数据层的请求链路
OpenFrame OSS Lib 采用分层、多租户、事件驱动的架构。一个请求从浏览器 / Agent / 外部系统进入后,依次经过网关 → 认证 / API 层 → 仓储 → MongoDB,而 Agent 侧的实时事件则走 Kafka 与 NATS 异步链路。
整体数据流如下(源自官方架构图 docs/diagrams/architecture/README.mmd):
各层职责可以对应到具体源码目录:
- 网关层:openframe-gateway-service-core/src/main/java/com/openframe/gateway/
- 授权层:openframe-authorization-service-core/src/main/java/com/openframe/authz/
- 流处理层:openframe-stream-service-core/src/main/java/com/openframe/stream/
三、难题一:多租户隔离如何做到"零遗漏"?
SaaS 平台最大的坑就是租户数据串台。OpenFrame 用一条贯穿全链路的隔离机制来兜底:
TenantContext线程上下文:请求进来后,TenantContextFilter 从 JWT 声明或请求路径解析出租户 ID,写入 TenantContext 这个 ThreadLocal,每个请求携带自己的租户身份;- 租户感知仓储:TenantAwareMongoTemplate 在每次查询时自动把当前租户注入条件,开发者无需手写 tenant 过滤条件;
- 文档级契约:openframe-data-mongo-common 中所有文档(
Machine、Organization、Ticket、Script等 200+ 个)统一实现TenantScoped接口,从模型层面强制隔离。
JWT 声明 (tenant_id) → TenantContext (ThreadLocal) → TenantAwareMongoTemplate 自动注入 → MongoDB 查询这条链路的设计权衡详见 tenant-context 参考文档。
四、难题二:响应式 API 网关的认证与限流
网关是全部流量的唯一入口,基于 Spring Cloud Gateway(WebFlux + Netty)构建,非阻塞、高并发,还兼容 WebSocket 代理。它做了四件关键的事:
- JWT 校验:支持多 Issuer 解析(JwtAuthConfig),把角色映射为权限;
- API Key 认证:外部调用走
/external-api/**,ApiKeyAuthenticationFilter 强制校验X-API-Key请求头; - 按 Key 限流:RateLimitService 基于 Redis 实施分钟 / 小时 / 天三级窗口限流;
- 租户命名空间重写:NamespaceRewriteGatewayFilter 为路由请求重写租户标头,实现多租户路由。
边缘安全流程可参考 gateway-service-core 架构图。
五、难题三:事件驱动流处理与 Agent 生命周期
MSP 场景下,成百上千台设备持续产生心跳、脚本执行结果与工具活动事件。OpenFrame 用两条异步总线化解:
Kafka 链路(面向分析)
openframe-stream-service-core 负责事件摄取、富集与状态投影。Kafka Streams 还承担有状态的窗口 Join——例如把 Activity 事件与 Host 活动做 5 秒窗口关联,输出富集后的活动流,最终投影回 MongoDB 形成读模型。详见 stream-processing-core 参考文档。
NATS 链路(面向低延迟控制)
Agent 注册后经 NATS/JetStream 上报心跳(machine.*.heartbeat)与脚本执行结果;服务端用 ShedLock 保证多副本部署下不会重复派发定时任务。Agent 生命周期时序见 client-agent-service-core 文档。
值得一提的是,仓库还内置了一个用 Rust + Tokio 编写的跨平台设备 Agent(clients/openframe-client),负责注册设备、连接 NATS、管理 Fleet MDM / MeshCentral / Tactical RMM 等集成工具并自动更新自身——服务端与设备端在同一 monorepo 中协同演进。
六、仓库结构与模块依赖链
仓库根目录下即各 Maven 模块,依赖方向自底向上大致如下:
openframe-exception → openframe-core → openframe-security-core → openframe-data-mongo-common → openframe-data-mongo-sync → openframe-client-core / openframe-api-service-core openframe-security-core → openframe-authorization-service-core → openframe-gateway-service-core快速浏览各模块源码入口:
- 网关模块:openframe-gateway-service-core/pom.xml
- 授权模块:openframe-authorization-service-core/pom.xml
- 流处理模块:openframe-stream-service-core/pom.xml
- Rust Agent:clients/openframe-client/Cargo.toml
- 前端组件库(React/TypeScript,含 Storybook):openframe-frontend-core/README.md
七、5 分钟上手:克隆、构建与引用模块
环境要求:JDK 21、Maven 3.9+、Docker(集成测试用)、Node.js 18+ 与 Rust(可选,仅前端 / Agent 需要)。
最快构建步骤:
# 1. 克隆仓库 git clone https://gitcode.com/gh_mirrors/op/openframe-oss-lib cd openframe-oss-lib # 2. 构建全部模块(跳过测试提速) mvn clean install -DskipTests # 3. 只构建单个模块及其上游依赖 mvn clean install -pl openframe-data-mongo-sync -am -DskipTests构建成功后,在自己的 Spring Boot 服务pom.xml中按需引入即可,例如引入数据层模块:
<dependency> <groupId>com.openframe.oss</groupId> <artifactId>openframe-data-mongo-sync</artifactId> <version>999-SNAPSHOT</version> </dependency>可选地,还可以单独构建前端库(cd openframe-frontend-core && npm install && npm run build)或 Rust Agent(cd clients/openframe-client && cargo build --release)。完整步骤参考 quick-start.md。
八、延伸阅读与社区
- 官方文档总入口:docs/README.md —— 涵盖入门、开发环境、参考架构与安全实践
- 入门四篇:introduction.md、prerequisites.md、quick-start.md、first-steps.md
- 架构总览:docs/development/architecture/README.md
- 各模块 Mermaid 架构图源文件:docs/diagrams/architecture/
- 贡献规范:CONTRIBUTING.md
OpenFrame 社区的讨论与协作主要通过 OpenMSP Slack 进行,非显而易见的改动建议先在社区中发起讨论。
小结:OpenFrame OSS Lib 用一套"租户上下文 + 响应式网关 + Kafka/NATS 事件流 + MongoDB 领域模型"的组合拳,把多租户、网关安全与流处理三大难题封装成开箱即用的 Maven 模块。理解了模块依赖链和上面三条链路,你就能在这个 monorepo 里快速定位任意功能所在,并开始扩展自己的 OpenFrame 服务。🚀
【免费下载链接】openframe-oss-lib
Shared libraries between all services
相关推荐
OpenFrame OSS Lib 响应式网关教程:JWT、API Key 鉴权与 Redis 限流一网打尽
OpenFrame OSS Lib 响应式网关教程:JWT、API Key 鉴权与 Redis 限流一网打尽 OpenFrame OSS Lib 是 OpenF
Ollama Copilot:让本地大模型秒变智能代码助手,完全替代GitHub Copilot的终极方案
Ollama Copilot:让本地大模型秒变智能代码助手,完全替代GitHub Copilot的终极方案 想要免费使用智能代码补全功能?厌倦了GitHub C
OBS多平台直播终极指南:一站式解决全网同步推流难题
OBS多平台直播终极指南:一站式解决全网同步推流难题 OBS多平台直播插件(obs multi rtmp)是一款免费开源工具,能够帮助主播实现同时向多个直播平台
音视频直播
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考