文档 08 / 28

系统架构设计文档(HLD)

Vocalink · Phase 1 · 高层架构 · 微服务划分 · 技术选型

册别:第三册 · 技术与架构 版本:V1.0 日期:2026-08-15 状态:草稿待评审

一、架构目标与原则

1.1 架构目标

#目标量化指标
1低延迟翻译端到端 P95 < 500ms
2高可用核心服务 SLA 99.9%(月停机 < 43 分钟)
3可扩展支持 10× 用户增长无需架构重构
4可插拔新增语种/国家 = 配置变更,不改代码
5安全合规PDPA 合规 + 数据加密 + 审计通过
6成本可控单用户基础设施成本 < $0.15/月

1.2 架构原则

原则含义落地
🧩 微服务化按业务域拆分,独立部署/扩缩10 个核心微服务(见 §3)
📨 异步优先非实时操作走消息队列Kafka 解耦 + 事件驱动
🔌 可插拔语言包翻译/支付/审核按国家插件化每国 = 配置 + 插件三件套
🛡️ 安全左移安全在开发阶段内建,非事后补救SAST/DAST + 渗透测试
📊 可观测所有服务默认埋点 + 日志 + 链路追踪Prometheus + Grafana + Jaeger
🌍 多云就绪不绑定单一云厂商AWS 主力 + GCP 备用

二、整体架构图

📱 iOS App
Swift + SwiftUI
🤖 Android App
Kotlin + Jetpack
🌐 Web App
React + WebRTC
🌐 API Gateway
Kong / Envoy
🔐 Auth Service
JWT + OAuth2
📡 WebSocket Gateway
Socket.IO Cluster
🎯 Match Service
匹配引擎
🎙️ Call Service
通话管理
🌐 Translate Service
翻译编排
💰 Payment Service
支付中台
🛡️ Safety Service
内容审核
👥 Social Service
语伴关系
📺 Ad Service
广告位管理
📊 Analytics Service
数据上报
⚙️ Config Service
Feature Flag
🗄️ PostgreSQL
业务数据
⚡ Redis Cluster
缓存/会话
📨 Kafka
消息队列
🗃️ S3 + CloudFront
静态资源
🧊 Snowflake
数据仓库
🗣️ Google Speech API
ASR
🌍 Google Translate API
MT
🗣️ Azure TTS
TTS (P1)
📺 Google AdMob
广告
💳 Stripe / PayNow
支付

2.1 数据流:一次完整通话

[用户A说话] → [iOS麦克风采集] → [Opus编码] → [WebSocket → API Gateway]
→ [Call Service 路由] → [Kafka: audio-stream topic]
→ [Translate Service 消费] → [Google Speech ASR] → [文本]
→ [Google Translate MT] → [译文] → [Kafka: subtitle topic]
→ [推送给用户B] → [客户端渲染字幕] + [P1: Azure TTS 合成语音]

三、微服务划分(Phase 1)

3.1 服务清单

服务职责技术栈语言数据库QPS 预估
🔐 Auth Service注册/登录/Token/OTPNode.js + ExpressTypeScriptPostgreSQL~500
🎯 Match Service匹配算法/池管理/路由Go + gRPCGoRedis~2000
🎙️ Call Service通话生命周期/计费/质量Go + WebRTC SFUGoPostgreSQL~1000
🌐 Translate ServiceASR+MT+TTS 编排Python + FastAPIPythonRedis(Cache)~3000
💰 Payment Service充值/订阅/分成/对账Java + Spring BootJavaPostgreSQL~200
🛡️ Safety Service内容审核/举报/封禁Python + FastAPIPythonPostgreSQL~1500
👥 Social Service语伴关系/私聊/等级Node.js + ExpressTypeScriptPostgreSQL~800
📺 Ad Service广告位/频次/收益上报Go + gRPCGoRedis + PG~2000
📊 Analytics Service事件采集/实时指标Python + KafkaPythonSnowflake~5000
⚙️ Config ServiceFeature Flag/AB测试/配置Node.jsTypeScriptRedis~3000

3.2 核心服务详解

🎯 Match Service · 匹配服务 Go + gRPC + Redis

管理全局匹配池,执行匹配算法,撮合用户建立通话。

核心职责
匹配池管理 / 算法执行 / 撮合路由
匹配算法
语言互补 40% + 在线 20% + 评分 15% + 地理 10% + 时段 10% + 随机 5%
数据结构
Redis Sorted Set(按评分排序的在线用户池)
匹配耗时
P95 < 3 秒(含网络 RTT)
扩容策略
按 DAU 水平扩容,单实例支持 ~5000 并发匹配
降级方案
Redis 故障时降级为本地内存池(单实例模式)
🎙️ Call Service · 通话服务 Go + WebRTC SFU (LiveKit)

管理 1v1 语音通话的全生命周期:建立、维持、计费、结束、质量监控。

核心职责
信令管理 / SFU 路由 / 通话计费 / 质量采集
信令协议
WebSocket + JSON(REST 备选)
媒体服务器
LiveKit (SFU) — 部署在 AWS ap-southeast-1
音频编码
Opus 16kHz / SRTP 加密
3A 处理
WebRTC 内置 AEC + ANS + AGC
并发能力
单 SFU 节点 ~500 路并发通话
断线处理
≤ 3 秒自动重连 / 超时 30 秒释放资源
降级方案
SFU 故障时切换 TURN 中继模式
🌐 Translate Service · 翻译服务 Python + FastAPI + Kafka

翻译子系统编排层。消费音频流 → 调用 ASR → 调用 MT → 推送译文。详细设计见文档 09。

核心职责
ASR 调用 / MT 调用 / TTS 调用 / 结果编排
ASR 引擎
Google Speech-to-Text (zh) + Azure Speech (en)
MT 引擎
Google Translate API (中英互译)
TTS 引擎
Azure TTS (P1 上线)
延迟预算
ASR 200ms + MT 200ms + 渲染 100ms = < 500ms
缓存策略
Redis 缓存高频短语翻译(TTL 24h)
降级方案
翻译超时时仅显示原文 + "翻译中…"
Phase 3 演进
替换为自研模型(PyTorch + ONNX Runtime)
💰 Payment Service · 支付中台 Java + Spring Boot

统一支付入口,对接多通道,管理金币/订阅/分成/对账。自有支付底座的核心。

核心职责
充值 / 订阅 / 礼物结算 / 分成 / 对账
支付通道
PayNow (0.5%) / Stripe (2.9%+$0.5) / Apple IAP (30%) / Google Play (30%)
金币体系
1 SGD ≈ 100 金币(固定汇率)
对账机制
每日 T+1 自动对账 + 差异告警
风控
异常交易检测(金额/频次/地域异常)
合规
PCI-DSS Level 1 / MAS 支付服务法
🛡️ Safety Service · 安全审核服务 Python + FastAPI

实时内容审核 + 异步深度审核 + 举报处理。AI 为主,人工兜底。

核心职责
实时 ASR 审核 / 举报处理 / 封禁管理
AI 审核
NLP 分类模型(自研 + Google Perspective API)
审核延迟
实时流 < 2 秒 / 异步批处理 < 5 分钟
人工审核
7×24 三班制 / 5 分钟内响应 L2+
审核语种
中文 + 英语(Phase 1)
升级路径
Phase 2 接入多语种审核模型
📺 Ad Service · 广告服务 Go + gRPC

管理广告位、频次控制、广告 SDK 对接、收益上报。

核心职责
广告位配置 / 频次控制 / SDK 对接 / 收益上报
主 SDK
Google AdMob(Rewarded Video + Banner)
备用 SDK
ironSource(填充率兜底)
频次控制
Redis 计数:激励 5 次/天 + Banner 轮换
VIP 屏蔽
VIP 用户请求广告 → 返回 204 No Content
收益上报
AdMob API 拉取 + 入库 → BI 看板

四、客户端架构

4.1 iOS 架构

层级技术选型说明
UI 框架SwiftUI + UIKit 混编新页面 SwiftUI,旧组件 UIKit
架构模式MVVM + Combine数据绑定 + 响应式
路由Coordinator Pattern解耦页面跳转
网络层URLSession + WebSocket (Starscream)REST + 实时通信
WebRTCLiveKit iOS SDKSFU 模式通话
本地存储Core Data + Keychain缓存 + 敏感数据
DI 容器Resolver依赖注入
广告 SDKGoogle Mobile Ads SDKRewarded + Banner
崩溃监控Sentry iOS实时崩溃上报
最低版本iOS 15.0+覆盖 > 95% 设备

4.2 Android 架构

层级技术选型说明
UI 框架Jetpack Compose + XML 混编新页面 Compose,旧页面 XML
架构模式MVVM + Coroutines + FlowGoogle 推荐架构
路由Navigation Component类型安全导航
网络层Retrofit + OkHttp + WebSocketREST + 实时通信
WebRTCLiveKit Android SDKSFU 模式通话
本地存储Room + EncryptedSharedPreferences缓存 + 敏感数据
DI 容器Hilt (Dagger)编译期依赖注入
广告 SDKGoogle Mobile Ads SDKRewarded + Banner
崩溃监控Sentry Android实时崩溃上报
最低版本Android 10+ (API 29)覆盖 > 90% 设备

4.3 模块划分(两端统一)

模块职责依赖
Core网络/日志/配置/工具
Auth登录/注册/Token 管理Core
Match匹配 UI/逻辑/动画Core + Auth
Call通话页/字幕渲染/礼物Core + Auth + WebRTC
Translate字幕组件/翻译反馈Core
Payment充值页/订阅/支付 SDKCore + Auth
Social语伴列表/私聊Core + Auth
Ads广告位/激励视频Core
Settings设置/隐私/帮助Core + Auth

五、数据架构

5.1 数据存储分层

层级存储用途数据保留
热数据Redis Cluster匹配池/会话/缓存/计数器实时(TTL 自动过期)
温数据PostgreSQL (RDS)用户/通话记录/支付/语伴关系持久(90 天归档)
冷数据S3 (归档)历史通话/审核日志/翻译语料180 天(合规要求)
分析数据SnowflakeBI 看板/用户行为分析/模型训练无限(分区归档)

5.2 核心数据模型

表名字段(核心)说明
usersid, phone, email, nickname, avatar,母语, 目标语, vip_status, created_at用户主表
callsid, user_a, user_b, start_time, end_time, duration, cost_coins通话记录
translationsid, call_id, seq, src_lang, src_text, dst_lang, dst_text, latency_ms翻译记录(脱敏后)
paymentsid, user_id, amount_sgd, coins, channel, status, created_at支付流水
subscriptionsid, user_id, plan, start_date, end_date, statusVIP 订阅
giftsid, from_user, to_user, gift_type, coins, call_id, created_at礼物记录
buddiesid, user_a, user_b, status, created_at语伴关系
reportsid, reporter, reported, reason, severity, status, created_at举报记录
ad_eventsid, user_id, ad_type, rewarded, amount, provider, created_at广告事件

5.3 数据流与 Kafka Topics

Topic生产者消费者用途
audio-streamCall ServiceTranslate Service音频流传输
subtitle-outTranslate ServiceCall Service → 客户端翻译字幕推送
call-eventsCall ServiceAnalytics + Billing通话事件(开始/结束/质量)
translate-eventsTranslate ServiceAnalytics + 模型迭代翻译事件(延迟/BLEU/反馈)
payment-eventsPayment ServiceAnalytics + 对账支付事件
safety-eventsSafety ServiceAnalytics + 人工审核审核事件
ad-eventsAd ServiceAnalytics + 收益广告展示/点击/奖励

六、部署架构

6.1 云服务商与区域

☁️
AWS(主力)
ap-southeast-1 (新加坡)
EC2 + EKS + RDS + ElastiCache
🌐
GCP(备用 + AI)
asia-southeast1 (新加坡)
Speech-to-Text + Translate API
📦
Docker + K8s
EKS (AWS) 托管集群
10 个微服务容器化部署
🔄
CI/CD
GitHub Actions → ECR → EKS
自动测试 + 灰度发布
📊
可观测性
Prometheus + Grafana + Jaeger
Sentry (客户端) + CloudWatch
🔐
安全
VPC + WAF + Security Groups
KMS 加密 + Secrets Manager

6.2 环境划分

环境用途规模数据
🌱 Dev开发自测最小(1 节点/服务)Mock 数据
🧪 Staging集成测试/UAT50%(生产配置)脱敏生产数据
🚀 Production正式生产全量(自动扩缩)真实用户数据
🧬 Canary灰度发布验证10% 生产流量真实数据(只读副本)

6.3 发布策略

策略描述回滚时间
🔵 蓝绿部署新版本部署到绿环境 → 切流量 → 验证 → 销毁蓝< 2 分钟
🐤 金丝雀发布先放 5% → 25% → 50% → 100%,每步监控< 5 分钟
🏁 功能开关Config Service Feature Flag 控制,无需发版即时(< 10 秒)

6.4 Phase 1 基础设施成本估算

资源规格月费(USD)备注
EKS 集群3 节点 (t3.medium)~$150K8s 控制面
EC2 (微服务)10 服务 × 2 副本 (t3.medium)~$400自动扩缩
RDS PostgreSQLdb.t3.medium (2 实例)~$120主从 + 只读副本
ElastiCache Rediscache.t3.medium (集群)~$1006 节点集群
Kafka (MSK)3 Broker (t3.medium)~$200消息队列
S3 + CloudFront静态资源 + CDN~$50App 资源/头像
LiveKit (SFU)3 节点 (c5.large)~$250WebRTC 媒体
网络/安全/WAFVPC + ALB + WAF~$100
监控/日志CloudWatch + Grafana Cloud~$80
合计~$1450/月~$1.74 万/年
注:以上为 Phase 1 初期(DAU < 5 万)估算。DAU 增长后自动扩容,成本线性增长。

七、安全架构

7.1 安全分层

层级措施技术实现
🌐 网络层WAF + DDoS 防护 + VPC 隔离AWS WAF + Shield + Security Groups
🔐 传输层全链路 TLS 1.3 加密ALB HTTPS + SRTP + WSS
🗄️ 存储层静态数据 AES-256 加密RDS KMS + S3 SSE-KMS
🔑 认证层JWT + OAuth2 + MFA(P2)Auth Service + AWS Cognito
📋 审计层全操作审计日志 + 不可篡改CloudTrail + S3 (WORM)
🛡️ 应用层SAST + DAST + 依赖扫描GitHub CodeQL + OWASP ZAP
🔍 监控层异常行为检测 + 入侵检测GuardDuty + Splunk

7.2 隐私保护

要求实现PDPA 条款
数据最小化仅收集必要字段(手机号/昵称/语言)第 16 条
用户同意注册时强制阅读隐私政策 + 勾选同意第 14 条
数据访问用户可查看/导出/删除自己的数据第 21-22 条
数据保留语音不存储 / 文字 90 天 / 日志 180 天第 24 条
数据出境Phase 1 数据不出新加坡(仅 API 调用海外)第 26 条
账号注销30 天内彻底删除所有个人数据第 21 条

7.3 渗透测试计划

阶段时间范围通过标准
W9 内部测试Phase 1 上线前全部 API + 客户端0 高危 0 严重
W10 外部审计上线前 2 周第三方渗透测试0 严重 / ≤ 2 高危(可修复)
季度扫描每季度自动化漏洞扫描0 新增高危
年度审计每年全系统深度渗透0 严重 / 修复计划

八、技术风险与应对

风险概率影响缓解措施
Google API 配额不足W1 申请 100 万次/天配额;备选 Azure Speech
LiveKit 扩容瓶颈自动扩缩 + 多节点;备选 MediaSoup
翻译延迟超标流式翻译 + 缓存 + 降级为文字模式
Redis 单点故障Cluster 模式 + 主从 + 本地内存降级
数据库写入瓶颈读写分离 + 分库分表准备
第三方 API 故障多供应商冗余 + 降级方案
AdMob 填充率不足ironSource 备用 + 自有广告位
Apple 审核拒绝预留 2 周缓冲 + 申诉材料准备

🚨 灾难恢复 RTO/RPO:

场景RTO(恢复时间)RPO(数据丢失)方案
AWS 区域故障< 4 小时< 5 分钟跨 AZ 部署 + GCP 热备
数据库崩溃< 30 分钟< 1 分钟自动故障转移 + PITR
翻译 API 全停即时0(不存数据)降级为纯语音模式
支付通道全停< 1 小时0(事务日志)暂停充值 + 补偿 VIP

附录

附录 A:技术选型决策记录

决策选项选择理由
WebRTC SFULiveKit vs MediaSoup vs JanusLiveKit托管方案省运维 / SDK 成熟 / 新加坡节点
ASR 引擎Google vs Azure vs 自研Google(zh)+Azure(en)各取所长 / Phase 3 统一自研
MT 引擎Google vs DeepL vs 自研Google Translate中英 BLEU 最高 / API 稳定
消息队列Kafka vs RabbitMQ vs NATSKafka (MSK)高吞吐 / 持久化 / AWS 托管
API GatewayKong vs Envoy vs AWS API GWKong插件生态 / 性能好 / 自托管灵活
数据库PostgreSQL vs MySQL vs MongoDBPostgreSQLJSON 支持 / 事务强 / 海外社区好
容器编排EKS vs ECS vs GKEEKSAWS 主力 / 团队熟悉 / 生态成熟

附录 B:相关文档

文档关联内容
04 PRD 产品需求文档功能需求 → 技术实现依据
09 实时翻译子系统 LLD翻译服务详细设计
10 API 接口规范微服务间接口契约
13 支付中台接入方案Payment Service 详细设计
17 内容安全与审核规范Safety Service 规则引擎

附录 C:修订记录

版本日期修改内容作者
V1.02026-08-15初始版本架构团队