1. 项目背景与核心目标
这次实践源于我们在生成式推荐系统中遇到的实际痛点——缓存层的高可用性问题。在典型的推荐系统架构中,会话缓存承担着存储用户交互状态、候选集列表和模型中间结果的关键角色。一旦缓存节点发生故障,轻则导致推荐结果质量下降,重则引发大规模超时和错误。
我们基于openYuanrong构建的解决方案,主要针对以下三个核心问题:
- Worker部署僵化:传统方案中缓存Worker通常以DaemonSet形式固定部署,难以适应动态扩缩容需求
- 故障恢复缓慢:单节点故障后,业务切换时间经常超过10秒,影响用户体验
- 数据可靠性不足:缓存数据易丢失,重建成本高,特别是热点数据丢失会对系统造成冲击
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构解析
2.1 整体架构设计
系统采用分层设计,各组件职责明确:
code复制[可视化控制台] ←→ [演示应用] ←→ [Worker集群] ←→ [ETCD]
↑
[用户操作界面] [业务逻辑] [数据缓存层] [元数据存储]
关键组件说明:
- 可视化控制台:Vue+Nest.js实现的监控界面
- 演示应用:Python编写的模拟业务应用
- Worker集群:基于openYuanrong datasystem构建的缓存节点
- ETCD:用于服务发现和元数据存储
2.2 Worker节点设计
Worker节点的创新之处在于:
- 无状态设计:不绑定特定主机,可任意扩缩容
- 多级缓存:
- 内存缓存:存储热点数据
- 快照文件:持久化关键数据
- 健康检查:基于gRPC的健康探针,检测间隔500ms
2.3 故障切换机制
故障检测采用两级超时设计:
- 快速探测:100ms超时,用于立即响应
- 完整检测:2s超时,用于确认故障
切换策略:
python复制def read_with_failover(key):
try:
# 快速探测主节点
if primary_alive(timeout=0.1):
return primary_read(key)
