概述
kira-centrifugo 是基于 Centrifugo 的实时消息服务,部署在 SJC 和 FRA 两个区域,为客户端提供低延迟的 WebSocket 连接。部署信息
| 配置 | 值 |
|---|---|
| 平台 | Fly.io |
| 区域 | sjc (San Jose), fra (Frankfurt) |
| 内存 | 4GB |
| CPU | 4 vCPU (shared) |
| 端口 | 8000 (HTTP/WebSocket) |
| 公网地址 | wss://ws.kira.art/connection/websocket |
| 内部地址 | kira-centrifugo.internal:8000 |
架构设计
双区域 + Redis 同步
两个区域的 Centrifugo 实例通过 Redis (kira-dragonfly) 同步消息:- 客户端连接到最近的区域(Cloudflare Anycast)
- 消息通过 Redis 在两个区域间同步
- 任一区域发布的消息,所有客户端都能收到
认证
使用 Supabase JWT 进行客户端认证:access_token 直接连接 Centrifugo,无需额外的 token 生成。
客户端连接
Web (Raw WebSocket)
客户端使用原生 WebSocket 连接 Centrifugo,通过 JSON 协议发送命令:kira-web/components/providers/centrifugo-provider.tsx,包含自动重连、Auth 状态监听等逻辑。
Server API
发布消息
从 kira-video-worker 发布
kira-video-worker 是唯一通过 API 发布消息到 Centrifugo 的服务(kira-be 不使用 Centrifugo):运维
部署
添加 SSL 证书
测试 API
监控
健康检查
关键指标
| 指标 | 说明 |
|---|---|
num_clients | 当前连接数 |
num_channels | 活跃频道数 |
num_users | 认证用户数 |
Admin UI
访问https://ws.kira.art/ 使用 Admin 密码登录查看实时状态。
文件结构
配置详情
config.json
fly.toml
频道设计
频道格式
{userId}/{threadId}— 斜杠分隔的路径,标识用户和线程#— Centrifugo 的 user channel boundary 标记#{userId}—#后的部分是 Centrifugo 的用户命名空间,Centrifugo 会自动校验订阅者的 JWTsub字段与#后的用户 ID 匹配,确保只有对应用户可订阅该频道
- 视频生成状态推送(processing / completed / failed)
- 积分不足 / 套餐不支持通知