LinkedIn 网站技术架构简介

以下是 LinkedIn 网站早期的基本运营数据与技术架构概况。

基本运营数据

  • 用户总量:2,200 万
  • 月度独立访客:400 万
  • 日均页面浏览量 (Page View):4,000 万
  • 日均搜索流量:200 万
  • 日均邀请发送量:25 万
  • 日均回答提交量:100 万
  • 日均邮件消息发送量:200 万

这是一个具备世界顶尖流量的网站,以下是其当时的系统架构细节。

技术栈概况

  • 操作系统:Solaris(运行于 Sun x86 平台及 Sparc 架构)
  • 应用服务器:Tomcat 和 Jetty
  • 数据库:Oracle 和 MySQL
  • 数据访问:无 ORM 框架(如 Hibernate),直接使用 JDBC
  • 消息队列:使用 ActiveMQ 发送 JMS 消息(按消息类型分区,后端由 MySQL 支持)
  • 搜索引擎:基于 Lucene 构建
  • 框架架构:使用 Spring 作为逻辑架构的粘合剂(Glue)

架构演化历程

随着流量的增长,LinkedIn 的架构经历了以下阶段的演化:

2003 ~ 2005 年

  1. 单体 Web 应用程序。
  2. 单一核心数据库。
  3. 所有网络关系图(Network Graph)缓存于 Cloud 中(Cloud 是用于缓存的独立服务器)。
  4. 搜索功能基于 Lucene,同样运行在 Cloud 中。

2006 年

  1. 数据库复制:复制另一个数据库以减少核心数据库的直接负载,由另一台服务器管理非只读数据的更新。
  2. 搜索独立:将搜索服务从 Cloud 中移出,单独使用服务器运行搜索。
  3. 引入 Databus 数据总线:作为分布式更新的核心组件,任何组件的数据更新均需通过 Databus。

2008 年

  1. 服务拆分:Web 应用不再处理所有业务逻辑,将逻辑拆分为多个部分,通过服务器群处理。Web 应用主要负责提供用户界面,而用户资料、小组等数据由服务器群管理。
  2. 数据库分域:每个服务拥有自己的域数据库。
  3. 开放架构:新架构允许其他应用链接 LinkedIn,例如支持新增的招聘和广告业务。

核心缓存层(The Cloud)

这里的 "Cloud" 指的是 LinkedIn 内部自主研发的缓存层,而非公共云计算服务。

  1. 核心地位:Cloud 是整个架构最重要的部分,LinkedIn 的整个网络关系图都缓存在其中。
  2. 数据规模:2,200 万节点(Nodes),1.2 亿边(Edges)。
  3. 内存需求:单个实例需要 12GB RAM。
  4. 生产部署:生产环境需运行 40 个实例。
  5. 重建耗时:从硬盘重建一个 Cloud 实例需要 8 小时。
  6. 实时更新:通过 Databus 进行实时更新。
  7. 持久化:关闭时将数据持久化到硬盘。
  8. 实现语言:缓存通过 C++ 实现,通过 JNI 调用。LinkedIn 选择 C++ 而非 Java 主要基于以下原因:

    • 尽可能减少 RAM 的使用。
    • 避免垃圾收集(GC)暂停导致系统不可用(尽管当时已采用最新的 GC 程序)。
  9. 设计权衡:将所有数据放入缓存是一种限制,但 LinkedIn 指出,分割业务图将带来更大的复杂性。
  10. 硬件支持:Sun 提供了 2TB 的 RAM 支持。

通信架构(Communication Architecture)

通信服务(Communication Service)主要用于提供持久化信息,例如收件箱消息和 Email。

  1. 异步通讯:整个系统通过 JMS 进行异步通讯。
  2. 消息发送:客户端通过 JMS 发送消息。
  3. 路由机制:消息通过路径服务器到达相应的邮箱,或直接放入 Email 处理进程。
  4. 推送模式:同时使用 Pull(用户主动获取信息)和 Push(如发送 Email)模式。
  5. 技术实现:使用 Spring 及 LinkedIn 专业的 Spring 插件完成,基于 HTTP-RPC。

扩展技术(Scaling Techniques)

  1. 功能划分:按发送、接收、文档等功能进行划分。
  2. 类别划分:按用户信箱、访问者信箱等类别进行划分。
  3. 等级划分:按用户 ID 等级、Email 等级等进行划分。
  4. 异步处理:所有的操作均采用异步方式。

参考资料

  1. LinkedIn Communication Architecture
  2. A Professional Network built with Java Technologies and Agile Practices

原文地址:http://www.liyingfei.com/read.php/9.htm

说明:本文内容主要基于 2008 年左右的技术分享资料,反映了 LinkedIn 早期的架构设计。随着技术发展,LinkedIn 后续已迁移至更多现代技术栈(如 Kafka、Rest.li、Cloud 云服务等),文中部分组件(如 Solaris、Oracle、内部 Cloud 缓存)可能已不再适用当前生产环境。