System architecture
模块化边缘计算架构
与请求数据流。
StudyPulse Cloud AI 是一个 Cloudflare Worker 应用:公开 API、统一登录、用户仪表盘、管理后台、支持与贡献流程共用一个 Worker,但按 Hostname 分离路由和权限。
01 / 边缘拓扑
五个入口,两个状态系统,一个上游模型。
域名隔离让公开调用、用户操作与管理员动作拥有不同的安全语义;D1 负责业务状态,Cloudflare Secrets 负责运行时密钥。
01 / PUBLIC API
spapi.chenkai.space
健康检查、统一认证、用户资料与 /v1/chat。
02 / IDENTITY
auth.chenkai.space
密码、验证码、GitHub OAuth、Session 与 Token 刷新。
03 / USER
dash.studypulse
用户用量、会员、反馈与 GitHub 贡献提交。
04 / ADMIN
admin.chenkai.space
Access SSO 保护的 WebUI 与 REST 管理 API。
05 / SUPPORT
support.chenkai.space
封禁申诉、反馈工单与邮件通知。
Source boundaries
源码结构对应运行时职责。
入口只做路由和编排,Provider 只做上游调用,数据库模块只做持久化;身份、会员、管理和支持各自有独立目录。
src/ ├── index.js # hostname routing + lifecycle ├── auth.js # API Key auth ├── auth/ # email, session, middleware, OAuth ├── providers/minimax.js # chat + chatStream ├── database/ # keys + usage writes ├── users/ # user CRUD and stats ├── membership/ # plans + quotas ├── admin/ # Access, routes, WebUI ├── dashboard/ # user center ├── support/ appeals/ # tickets and appeals └── contributions/ # GitHub reward workflow migrations/ 0001 … 0019 test/ API · admin · auth · support · contributions
02 / 状态模型
D1 记录状态,不记录对话。
D1 里保存用户、Session、Key、会员、用量和审计数据;prompt 与 reply 不进入 request_logs,删除 Key 时关联日志 CASCADE 清理。
| 表名 (Table) | 职责与作用 (Purpose) | 关键字段 (Key Fields) |
|---|---|---|
users |
统一用户身份、角色与会员状态 | id · email_normalized · membership_type |
sessions |
Access / Refresh Token 的哈希与撤销状态 | token_hash · revoked_at · device_metadata |
api_keys |
开发者 Key、启用状态、配额与绑定用户 | key_hash · limit_type · user_id |
usage_records |
按 userId 统计模型和 Token 用量 | input_tokens · output_tokens · total_tokens |
request_logs |
只存请求元数据与延迟,不存内容 | status · latency_ms · provider |
03 / 运营表面
架构也包含运营者看到的部分。
后台不是旁路工具,而是同一套 D1、身份和用量模型的可视化入口:用户、Key、日志和反馈都从 Worker 的业务状态生成。
StudyPulse.CloudAI