本文档概述了 Hyac 项目的未来发展路线图,重点是增强其架构、开发者体验、安全性和可伸缩性。
- 目标: 实现完整的租户隔离,允许不同用户或团队在共享的基础设施上安全地运行其应用。
- 实现:
- 数据隔离: 在数据库层面为每个租户(用户/团队)的数据进行逻辑或物理隔离。
- 网络隔离: 确保一个租户的容器化应用无法访问另一个租户的网络资源。
- 资源配额: 为每个租户设置 CPU、内存、存储和函数执行次数的配额。
- 目标: 允许管理员动态地添加、配置和管理新的函数运行时环境。
- 实现:
- 可插拔运行时: 设计一个标准接口,使集成新的运行时(如 Node.js, Deno, Java)变得简单。
- 版本控制: 支持同一语言的多个版本(例如 Python 3.9, 3.10, 3.11)。
- 当前限制: 前端 CodeMirror 编辑器缺少对
context对象的代码补全,因为上下文是在后端“魔法般”注入的。 - 提议功能: 在用户编辑器中直接提供完整的、上下文感知的智能提示。
- 实现:
- 前端: 在内存中动态地将一个虚拟“垫片”文件预置到用户代码之前。这个对用户不可见的垫片将包含
import语句和类型定义 (例如,from app.context import FunctionContext)。 - LSP: 语言服务器将接收这个完整的代码块,从而能够分析上下文并提供准确的自动补全。
- 后端: 执行引擎同样会在
exec之前预置垫片,以确保运行时环境与开发环境匹配。
- 前端: 在内存中动态地将一个虚拟“垫片”文件预置到用户代码之前。这个对用户不可见的垫片将包含
- 优点:
- 无缝且专业的开发体验。
- 减少错误并提高开发人员的生产力。
- 实现:
- 当前限制: 用户代码直接通过
exec执行,构成重大安全风险。恶意代码可能会危及主机系统。 - 提议功能: 在安全的、隔离的沙箱中执行所有用户提供的代码。
- 实现选项:
- gVisor/Firecracker (推荐): 利用轻量级虚拟化技术为每次函数执行创建一个安全的沙箱。这提供了强大的内核级隔离。
- 受限的
__builtins__: 作为基线措施,在exec范围内严格限制可用的内置函数,以防止访问文件系统 (open)、网络或其他敏感 API。 - WebAssembly (WASM) 运行时: 探索将用户 Python 代码编译为 WASM,并在安全的 WASM 运行时中运行,以实现最大程度的隔离。
- 优点:
- 防止安全漏洞和数据泄露。
- 确保平台的稳定性和完整性。
- 实现选项:
- 当前架构: 系统已利用 FastAPI 的能力,以非阻塞方式执行函数。无论是原生
async函数还是在线程池中运行的def同步函数,都不会阻塞主事件循环。 - 未来挑战: 对于需要长时间运行(超过标准 HTTP 超时)、需要重试机制或需要与主应用生命周期解耦的复杂任务,当前基于请求-响应的模式存在局限性。
- 提议功能: 引入专用的分布式任务队列系统,将函数执行模式从“即时执行”演进为“后台任务”。
- 实现:
- 集成消息队列系统 (例如, Celery 与 Redis/RabbitMQ)。
- 对于标记为“后台任务”的函数,API 将接收请求,将任务分派到队列,并立即返回一个任务 ID。
- 一个可独立扩展的 Worker 进程池将从队列中消费任务并执行代码。
- 提供 API 端点,允许客户端使用任务 ID 查询任务的状态、进度和结果。
- 优点:
- 支持长时任务: 可靠地执行超过 Web 请求超时限制的任务。
- 增强系统韧性: 支持自动重试和错误处理,提高任务成功率。
- 更优的资源隔离: 将计算密集型任务从 API 服务器彻底分离,可独立扩展 Worker,不影响 API 响应能力。
- 异步通信: 为未来实现 Webhooks 或其他事件驱动架构奠定基础。
- 实现:
- 多用户与权限管理: 引入角色(管理员、开发者),实现精细化的权限控制与协同开发。
- 平台监控仪表盘: 提供全局的系统状态、资源使用率和审计日志。
- 系统级集成配置: 提供统一的界面来配置全局的 SMTP、对象存储和第三方通知服务。
- 自定义域名与高级访问控制: 支持用户绑定自己的域名,并提供 IP 白名单/黑名单功能。
- 依赖分析与安全扫描: 集成工具以检测依赖冲突和已知的安全漏洞。
- 函数模板市场: 创建一个社区驱动的模板市场,用户可以分享和使用预构建的函数模板。