Gita 是一个企业级的边缘计算框架,采用三层架构设计(控制平面、FFI层、执行平面),完整支持从PoC原型到生产环境的全生命周期。
- 🚀 高性能:Tokio异步运行时,支持1000+并发连接
- 🔒 企业级安全:TLS 1.3、JWT认证、审计日志、数据加密
- 🐳 容器化部署:原生支持Docker、Kubernetes、Helm
- 🔄 跨语言互操作:Rust与C++无缝集成,零开销FFI
- 📊 可观测性:Prometheus指标、Grafana仪表板、结构化日志
- ✅ 生产就绪:完善的错误处理、优雅关机、数据持久化
┌─────────────────────────────────────┐
│ 控制平面 (Rust/Axum) │
│ • API服务器 • 任务调度 • 认证授权 │
└──────────────┬──────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ FFI层 (CXX桥接) │
│ • 类型安全的跨语言调用 • 内存管理 │
└──────────────┬──────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ 执行平面 (C++/Youki) │
│ • 算法执行 • 容器管理 • 性能监控 │
└─────────────────────────────────────┘
| 层级 | 技术 | 用途 |
|---|---|---|
| 运行时 | Tokio | 高性能异步I/O和任务调度 |
| Web框架 | Axum | 轻量级异步HTTP服务器 |
| 跨语言 | CXX | 类型安全的Rust-C++互操作 |
| 容器 | Youki | OCI标准的容器运行时 |
| 持久化 | Sled | 嵌入式键值数据库 |
| 安全 | rustls/OpenSSL | TLS 1.3加密通信 |
| 监控 | Prometheus/Grafana | 指标收集和可视化 |
- 内存安全优先 - 利用Rust的所有权系统避免内存漏洞
- 异步优先 - Tokio处理高并发,支持io_uring
- 零开销抽象 - 保证安全的前提下最大化性能
- 容器化隔离 - Youki提供安全的进程隔离和资源控制
gita/
├── src/ # 主程序源码
│ ├── core/ # 核心逻辑
│ │ ├── scheduler.rs # 任务调度系统
│ │ ├── error.rs # 错误处理与统计
│ │ ├── persistence.rs # 数据持久化
│ │ ├── audit.rs # 审计日志
│ │ ├── tls.rs # TLS安全传输
│ │ └── types.rs # 核心数据类型
│ ├── api/ # HTTP接口层
│ │ ├── handlers.rs # 业务逻辑处理
│ │ ├── routes.rs # 路由定义
│ │ ├── server.rs # HTTP服务器
│ │ ├── auth_middleware.rs # 认证中间件
│ │ └── container_handlers.rs # 容器管理
│ ├── ffi/ # Rust-C++互操作
│ │ ├── bridge.rs # CXX桥接
│ │ ├── cpp/ # C++算法实现
│ │ ├── memory_manager.rs # 内存管理
│ │ └── type_converter.rs # 类型转换
│ ├── config/ # 配置管理
│ └── lib.rs & main.rs # 入口点
│
├── rust-edge-compute-core/ # 核心库
├── rust-edge-compute-cpp/ # C++互操作crate
├── rust-edge-compute-ml/ # ML推理支持
├── rust-edge-compute-python/ # Python集成
│
├── cpp_plugins/ # C++插件实现
│ ├── src/ # 插件源码
│ ├── include/ # 头文件
│ ├── tests/ # 测试用例
│ └── CMakeLists.txt # CMake构建
│
├── examples/ # 使用示例
├── tests/ # 集成测试
├── config/ # 配置文件
├── deploy/ # 部署配置
├── docker/ # Docker文件
├── helm/ # K8s部署
└── scripts/ # 自动化脚本
- 优先级队列:支持高/中/低三个优先级
- 并发控制:可配置最大并发任务数(默认10)
- 队列容量:10000个任务缓冲
- 重试机制:失败自动重试,可配置重试次数
- 超时控制:支持任务级别超时设置(默认300s)
- 负载均衡:任务自动分配到可用worker
- Sled嵌入式数据库:零配置的键值存储
- 自动备份:关机时自动保存应用状态
- 错误统计持久化:记录所有错误和恢复信息
- 任务状态保存:支持任务中断后恢复
- 配置存储:运行时配置持久化
| 维度 | 实现 | 说明 |
|---|---|---|
| 传输安全 | TLS 1.3 | HTTPS加密通信 |
| 认证 | JWT | Token认证,24h过期 |
| 授权 | RBAC | 角色-权限访问控制 |
| 加密存储 | AES-256-GCM | 敏感数据加密 |
| 速率限制 | 令牌桶 | 防DDoS、防滥用 |
| 审计日志 | 结构化日志 | 所有操作记录 |
| 输入验证 | 白名单校验 | 防注入攻击 |
- Prometheus指标:性能、错误率、队列深度等
- Grafana仪表板:实时监控可视化
- 结构化日志:JSON格式日志,便于查询
- 分布式追踪:OpenTelemetry集成(可选)
- 健康检查:端点监控系统整体健康状态
- 分层错误处理:API层、业务层、FFI层统一处理
- 错误分类:临时错误、永久错误、业务错误
- 自动恢复:临时错误自动重试,定期健康检查
- 错误统计:详细的错误率和趋势分析
- 优雅降级:单点故障不影响整体服务
- Youki运行时:OCI标准兼容的轻量级容器
- 生命周期管理:创建、启动、停止、删除容器
- 资源控制:CPU、内存、I/O限制
- 隔离执行:安全的进程隔离和沙箱环境
- 状态监控:容器运行状态实时跟踪
- 信号处理:SIGTERM/SIGINT优雅关闭
- 状态保存:关闭前保存所有重要数据
- 组件协调:确保各组件有序关闭
- 超时控制:防止无限等待(默认30s)
- 再启动恢复:关闭前保存的状态自动恢复
- Rust: 1.70+ (rustup 安装)
- C++: 编译器(gcc/clang)用于CXX桥接
- Linux: 推荐Linux环境(Youki容器支持)
- Docker: 可选,用于容器化部署
# 1. 克隆项目
git clone <repository-url>
cd gita
# 2. 构建项目
cargo build --release
# 3. 运行服务
./target/release/rust-edge-compute
# 4. 测试API(新开终端)
curl http://localhost:3000/api/v1/health# 完整测试套件
./test_runner.sh
# 单元测试
cargo test --lib
# 集成测试
cargo test --test '*'
# 特定测试
cargo test algorithm_name
# 显示println输出
cargo test -- --nocapture# 构建镜像
docker build -t gita:latest .
# 运行容器
docker run -p 3000:3000 -p 443:443 gita:latest
# 使用Docker Compose(含监控栈)
docker-compose -f docker/docker-compose.yml up -d# 使用Helm部署
helm install gita ./helm
# 检查部署
kubectl get pods
kubectl logs -f deployment/gita
# 查看服务
kubectl get svc所有API均需JWT认证(除登录外):
# 1. 登录获取token
curl -X POST http://localhost:3000/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"username": "admin", "password": "password"}'
# 响应
{
"token": "eyJ0eXAiOiJKV1QiLCJhbGc...",
"expires_in": 86400
}
# 2. 使用token访问API
curl -H "Authorization: Bearer <token>" \
http://localhost:3000/api/v1/computeGET /api/v1/health
# 响应
{
"status": "healthy",
"service": "gita",
"version": "0.1.0",
"timestamp": "2024-01-01T12:00:00Z"
}POST /api/v1/compute
Authorization: Bearer <token>
Content-Type: application/json
{
"algorithm": "matrix_multiplication",
"priority": "high",
"timeout_seconds": 300,
"parameters": {"a": [[1, 2]], "b": [[3], [4]]}
}
# 响应
{
"task_id": "550e8400-e29b-41d4-a716-446655440000",
"status": "submitted",
"created_at": "2024-01-01T12:00:00Z"
}GET /api/v1/task/{task_id}
Authorization: Bearer <token>
# 响应
{
"task_id": "550e8400-e29b-41d4-a716-446655440000",
"status": "completed",
"result": {...},
"created_at": "2024-01-01T12:00:00Z",
"completed_at": "2024-01-01T12:00:15Z"
}GET /api/v1/scheduler/status
Authorization: Bearer <token>
# 响应
{
"active_tasks": 5,
"queued_tasks": 12,
"max_concurrent": 10,
"average_latency_ms": 45.2,
"uptime_seconds": 86400
}GET /api/v1/errors/stats
Authorization: Bearer <token>
# 响应
{
"total_errors": 15,
"error_rate": 0.001,
"recent_errors": [
{"error": "timeout", "count": 5, "timestamp": "..."}
]
}详细API文档请参考 API完整文档
- 配置TLS证书(
deploy/config/) - 设置强密码和JWT密钥
- 配置监控告警规则
- 准备数据备份策略
- 配置日志轮转和保留期
- 进行负载测试和性能基准
- 编写运维手册和故障响应流程
- 设置自动化健康检查
config/production.toml- 生产环境配置deploy/config/production.toml- 部署特定配置deploy/monitoring/monitor.sh- 监控脚本
详细部署说明请参考 部署指南
# 所有crate编译
cargo build --release
# 特定crate编译
cargo build -p rust-edge-compute-core --release
# 编译并运行
cargo run --release
# 编译C++部分
cd cpp_plugins && ./build.sh# 格式检查
cargo fmt --check
# 自动格式化
cargo fmt
# Lint检查
cargo clippy -- -D warnings
# 文档生成
cargo doc --open- 在
cpp_plugins/include/中定义接口 - 在
cpp_plugins/src/中实现逻辑 - 在
src/ffi/bridge.rs中添加CXX桥接 - 在
src/api/handlers.rs中注册API端点
- 在
src/core/中添加算法模块 - 在
src/ffi/bridge.rs中实现算法逻辑 - 在
src/api/handlers.rs中注册API端点
-
并发配置
[scheduler] max_concurrent_tasks = 20 # 根据服务器能力调整 queue_capacity = 50000
-
内存优化
# 构建优化二进制 cargo build --release strip target/release/rust-edge-compute -
监控优化
- 配置合理的metrics采集间隔
- 生产环境日志级别设为INFO
- 启用结构化日志便于分析
| 故障 | 症状 | 排查步骤 |
|---|---|---|
| 高CPU占用 | 任务调度不及时 | 检查并发配置,增加worker数 |
| 内存溢出 | OOM杀进程 | 检查持久化配置,清理过期数据 |
| 连接超时 | 客户端请求失败 | 检查网络配置,增加超时时间 |
| 任务堆积 | 队列不空 | 检查算法执行时间,调整并发数 |
详细故障排查参考 运维手册
A: 编辑 config/production.toml,修改 server.port 参数。
A: 配置TLS证书:
[server]
use_tls = true
cert_path = "/path/to/cert.pem"
key_path = "/path/to/key.pem"A: 修改配置后重启服务:
[scheduler]
max_concurrent_tasks = 20 # 增加此值A:
# 本地运行
journalctl -f -u gita
# Docker容器
docker logs -f <container_id>
# Kubernetes
kubectl logs -f -l app=gitaA: 详见 MEMORY_MANAGER_PRODUCTION_REPORT.md
- 📖 API完整文档 - 所有API接口详细说明
- 🏗️ 架构设计文档 - 深入理解系统设计
- 🚀 部署指南 - Docker/K8s部署步骤
- 📊 监控配置 - Prometheus/Grafana配置
- 🔒 安全策略 - TLS、认证、审计
- ⚙️ 运维手册 - 运维和故障处理
- 📈 性能基准 - 性能测试结果
| 阶段 | 内容 | 进度 |
|---|---|---|
| Phase 1: PoC | 项目架构、HTTP服务、CXX集成、容器管理、端到端测试 | ✅ 100% |
| Phase 2: MVP | 任务调度、错误处理、数据持久化、优雅关机、安全配置 | ✅ 100% |
| Phase 3: 生产就绪 | 安全加固、性能优化、监控工具、OTA更新、生产部署 | ✅ 100% |
| 指标 | 规格 |
|---|---|
| 并发连接 | 1000+ |
| 并发任务 | 10个 |
| 队列容量 | 10000个任务 |
| 任务调度延迟 | <100ms |
| 平均响应时间 | <1s |
| 加密方案 | TLS 1.3 + AES-256-GCM |
| 认证方式 | JWT + RBAC |
| 可用性 | 优雅关机 + 自动恢复 + 数据持久化 |
我们欢迎所有贡献!请遵循以下步骤:
- Fork项目 - 创建自己的副本
- 创建分支 - 为新功能创建分支
git checkout -b feature/your-feature
- 提交代码 - 遵循代码规范
cargo fmt cargo clippy cargo test - 提交PR - 描述你的改进
- ✅ 所有代码必须通过
cargo fmt和cargo clippy - ✅ 新功能必须包含单元测试
- ✅ 必须更新相关文档
- ✅ 提交信息要清晰明确
- ✅ 遵循Rust API文档惯例
MIT License - 详见 LICENSE 文件
- 📧 Email: support@example.com
- 📝 Issues: GitHub Issues
- 📚 Wiki: 项目Wiki
Made with ❤️ by the Edge Compute Team