Linkedin网站技术架构简介
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 年
- 单体 Web 应用程序。
- 单一核心数据库。
- 所有网络关系图(Network Graph)缓存于 Cloud 中(Cloud 是用于缓存的独立服务器)。
- 搜索功能基于 Lucene,同样运行在 Cloud 中。
2006 年
- 数据库复制:复制另一个数据库以减少核心数据库的直接负载,由另一台服务器管理非只读数据的更新。
- 搜索独立:将搜索服务从 Cloud 中移出,单独使用服务器运行搜索。
- 引入 Databus 数据总线:作为分布式更新的核心组件,任何组件的数据更新均需通过 Databus。
2008 年
- 服务拆分:Web 应用不再处理所有业务逻辑,将逻辑拆分为多个部分,通过服务器群处理。Web 应用主要负责提供用户界面,而用户资料、小组等数据由服务器群管理。
- 数据库分域:每个服务拥有自己的域数据库。
- 开放架构:新架构允许其他应用链接 LinkedIn,例如支持新增的招聘和广告业务。
核心缓存层(The Cloud)
这里的 "Cloud" 指的是 LinkedIn 内部自主研发的缓存层,而非公共云计算服务。
- 核心地位:Cloud 是整个架构最重要的部分,LinkedIn 的整个网络关系图都缓存在其中。
- 数据规模:2,200 万节点(Nodes),1.2 亿边(Edges)。
- 内存需求:单个实例需要 12GB RAM。
- 生产部署:生产环境需运行 40 个实例。
- 重建耗时:从硬盘重建一个 Cloud 实例需要 8 小时。
- 实时更新:通过 Databus 进行实时更新。
- 持久化:关闭时将数据持久化到硬盘。
实现语言:缓存通过 C++ 实现,通过 JNI 调用。LinkedIn 选择 C++ 而非 Java 主要基于以下原因:
- 尽可能减少 RAM 的使用。
- 避免垃圾收集(GC)暂停导致系统不可用(尽管当时已采用最新的 GC 程序)。
- 设计权衡:将所有数据放入缓存是一种限制,但 LinkedIn 指出,分割业务图将带来更大的复杂性。
- 硬件支持:Sun 提供了 2TB 的 RAM 支持。
通信架构(Communication Architecture)
通信服务(Communication Service)主要用于提供持久化信息,例如收件箱消息和 Email。
- 异步通讯:整个系统通过 JMS 进行异步通讯。
- 消息发送:客户端通过 JMS 发送消息。
- 路由机制:消息通过路径服务器到达相应的邮箱,或直接放入 Email 处理进程。
- 推送模式:同时使用 Pull(用户主动获取信息)和 Push(如发送 Email)模式。
- 技术实现:使用 Spring 及 LinkedIn 专业的 Spring 插件完成,基于 HTTP-RPC。
扩展技术(Scaling Techniques)
- 功能划分:按发送、接收、文档等功能进行划分。
- 类别划分:按用户信箱、访问者信箱等类别进行划分。
- 等级划分:按用户 ID 等级、Email 等级等进行划分。
- 异步处理:所有的操作均采用异步方式。
参考资料
- LinkedIn Communication Architecture
- 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 缓存)可能已不再适用当前生产环境。
版权声明:本文为原创文章,版权归 戴老师的博客 所有,转载请联系博主获得授权。
本文地址:https://1diff.fun/archives/linkedin-wang-zhan-ji-shu-jia-gou-jian-jie.html
如果对本文有什么问题或疑问都可以在评论区留言,我看到后会尽量解答。