睿诚科技协会

pinterest技术架构

Pinterest的技术架构是一个高度可扩展、高性能的分布式系统,旨在支持海量用户生成内容(UGC)的存储、处理和实时推荐,其架构设计围绕“可扩展性”、“低延迟”和“高可用性”三大核心原则,通过分层解耦和模块化设计,支撑了全球数亿用户的视觉发现需求,以下从基础设施、数据存储、计算框架、推荐系统、缓存机制和容灾备份等维度,详细解析Pinterest的技术架构。

pinterest技术架构-图1
(图片来源网络,侵删)

基础设施层:全球分布式部署

Pinterest的基础设施基于AWS公有云构建,同时结合自研工具优化资源利用率,其全球部署策略覆盖多个可用区(AZ)和区域(Region),确保用户访问的低延迟和高可用性,核心组件包括:

  • 全球负载均衡(GSLB):基于DNS和Anycast技术,将用户请求路由至最近的边缘节点(Edge Node),减少网络传输延迟。
  • 边缘计算节点:部署在全球数百个PoP(Point of Presence),缓存静态资源(如图片、CSS、JS)和热门内容,减轻中心机房压力。
  • 自研资源调度器:类似Kubernetes的集群管理工具,负责容器化应用的部署、扩缩容和故障迁移,支持秒级弹性伸缩以应对流量峰值(如节假日或热点事件)。

数据存储层:多模态存储引擎

Pinterest的数据类型多样化(图片、视频、文本、元数据等),因此采用“分层存储+专用引擎”的策略,满足不同场景的性能、成本和可靠性需求。

数据类型 存储引擎 核心特性
图片/视频 自研对象存储+AWS S3 支持100PB+容量,通过EC(纠删码)降低存储成本,结合CDN加速全球分发,图片上传后自动压缩、格式转换(WebP/AVIF)。
关系型数据(用户、Pin) MySQL(分库分表) 按用户ID或Pin ID进行分片(Sharding),单表数据量控制在千万级,确保查询性能。
非结构化元数据 Cassandra+ScyllaDB 高写入吞吐量(百万级QPS),支持Pin的标签、时间戳等稀疏数据存储,采用LSM-Tree架构保证顺序写性能。
图关系数据(用户关注、Pin收藏) Neo4j+自研图数据库 存储数十亿节点和边的社交图谱,支持高效的路径查询和社区发现,用于推荐和社交功能。
实时日志数据 Kafka+自研日志收集系统 每日处理PB级用户行为日志,支持高吞吐、持久化存储,为推荐系统和数据分析提供实时数据源。

计算框架:批流一体与实时处理

Pinterest的计算架构采用“Lambda架构”的演进版,结合批处理和流处理能力,满足离线分析和实时响应需求。

  • 批处理层:基于Apache Spark和Hadoop,每日执行ETL任务,清洗和整合历史数据(如用户画像、Pin热度统计),生成离线特征存储在HDFS或S3中。
  • 流处理层:采用Apache Flink和Kafka Streams,实时处理用户行为(点赞、保存、搜索等),在毫秒级内更新用户兴趣特征和Pin实时热度,当用户保存一个Pin时,流处理系统会立即触发相关推荐候选集的更新。
  • 计算编排:自研工作流调度平台(类似Airflow),统一管理批处理和流处理任务,支持依赖解析、失败重试和资源优先级调度。

推荐系统:多阶段召回与排序

Pinterest的核心竞争力在于其推荐系统,采用“多阶段流水线”架构,平衡召回效率和排序精度。

pinterest技术架构-图2
(图片来源网络,侵删)
  1. 召回阶段:从多个候选源快速生成数百个相关Pin,包括:

    • 协同过滤:基于用户-Pin交互矩阵(隐式反馈),通过矩阵分解(如ALS)生成相似Pin。
    • 内容过滤:提取Pin的视觉特征(通过Resnet等CNN模型)、文本标签(BERT模型),计算向量相似度。
    • 图遍历:在社交图谱中执行随机游走或Graph Embedding(如PinSage),挖掘用户潜在兴趣的Pin。
    • 实时召回:基于用户近期行为(如最后5个操作),从Redis缓存中提取热门或相似Pin。
  2. 排序阶段:使用深度学习模型对召回结果精排,核心模型包括:

    • 多目标模型:融合点击、保存、转化率等目标,采用DeepFM或Wide&Deep结构,同时学习低阶特征交叉和高阶特征组合。
    • 实时特征工程:从Flink流中获取用户实时行为(如最近1分钟的点击序列),输入模型动态调整排序结果。
  3. 重排阶段:应用业务规则(如内容多样性、去重、安全过滤)和用户偏好(如屏蔽特定类别),最终生成个性化推荐列表。

缓存机制:多级缓存加速

为降低后端负载并提升响应速度,Pinterest采用三级缓存架构:

pinterest技术架构-图3
(图片来源网络,侵删)
  • CDN缓存:缓存热门Pin的图片和视频,命中率超90%,减少回源流量。
  • 分布式缓存(Redis集群):缓存热点数据(如用户会话、实时推荐候选集、Pin元数据),采用分片+主从复制,支持十万级QPS。
  • 本地缓存(Caffeine):部署在应用服务器内存中,缓存高频访问的配置数据和用户短期偏好,平均访问延迟<1ms。

容灾与高可用

Pinterest通过“多副本+跨区域部署”确保系统高可用:

  • 数据层:MySQL和Cassandra采用多副本机制(通常3副本),数据在多个AZ间同步,支持单节点故障自动切换。
  • 服务层:核心服务(如推荐API、图片上传)部署在多个AZ,通过ELB(弹性负载均衡)实现故障转移,SLA达99.99%。
  • 灾备方案:关键数据定期跨区域备份(如从us-west备份到eu-central),支持RPO(恢复点目标)<1小时和RTO(恢复时间目标)<30分钟的灾难恢复。

相关问答FAQs

Q1: Pinterest如何处理海量图片的存储和高效检索?
A: 图片存储采用“自研对象存储+AWS S3”的混合架构,通过EC(纠删码)降低成本,并支持PB级扩展,为提升检索效率,Pinterest构建了多模态索引:视觉特征通过CNN模型提取后存储在向量数据库(如Faiss)中,文本标签通过Elasticsearch建立倒排索引,用户搜索时同时融合视觉和文本相关性,实现“以图搜图”和关键词检索的结合,图片上传后自动压缩(转换为WebP/AVIF格式)并生成多尺寸缩略图,适配不同终端场景。

Q2: Pinterest推荐系统如何解决“信息茧房”问题?
A: 为避免推荐内容单一化,Pinterest在推荐流水线中引入“多样性控制”模块:

  1. 候选集多样性:在召回阶段融合协同过滤、内容过滤、图遍历等多源候选,确保覆盖用户兴趣的不同维度(如时尚、美食、旅行)。
  2. 排序阶段去偏:在深度学习模型中引入“多样性损失函数”, penalize相似度过高的Pin,同时平衡用户兴趣探索(Exploration)和利用(Exploitation)。
  3. 人工干预:运营人员定期配置“多样性规则”,如限制同一类别Pin的占比上限,或强制插入热门/新兴内容,帮助用户发现潜在兴趣。
分享:
扫描分享到社交APP
上一篇
下一篇