在JavaOne 2008的会议上,著名社交网站LinkedIn的开发者做了2个关于LinkedIn网站的架构技术的演讲:

LinkedIn - A Professional Social Network Built with Java Technologies and Agile Practices
LinkedIn Communication Architecture

可以看一下LinkedIn网站的基本情况:

LinkedIn世界顶尖级别流量

     2千2百万用户
     每个月4百万独立用户访问
     每天4千万page view
     每天2百万搜索流量
     每天25万邀请发送
     每天1百万的回答提交
     每天2百万的email消息发送


LinkedIn 系统架构

  • 操作系统:Solaris (running on Sun x86 platform and Sparc)

  • 应用服务器:Tomcat and Jetty as application servers

  • 数据库:Oracle and MySQL as DBs

  • 没有ORM,直接用JDBC No ORM (such as Hibernate); they use straight JDBC

  • 用ActiveMQ在发送JMS. (It’s partitioned by type of messages. Backed by MySQL.)

  • 用lucene做搜索Lucene as a  foundation for search

  • Spring做逻辑架构Spring as glue

  • Hudson作为集成测试框架


2003-2005

  • 一个整体的web程序

  • 一个核心数据库

  • 在Cloud中缓存所有network图,Cloud是用来做缓存的独立server。

  • 用lucene做搜索,也跑在Cloud中。

2006架构变动

  • 读写分离:复制另外一个数据库,减少直接load核心数据库,另外一个server来管理非只读数据库的数据更新。

  • 把搜索从Cloud中移出来,单独一个server跑搜索

  • 增加Databus数据总线来更新数据,这是通过分布式更新的核心组件,任何组件都需要Databus

linkedin 2006

2008架构变动

  • WebApp不再任何事情都它自己做,把业务逻辑分成很多部分,通过server群来做。

  • WebApp仍然提供用户界面给用户,但是,通过server群来管理用户资料,小组等等。

  • 每个服务有自己的域数据库。

  • 新的架构允许其他应用链接LinkedIn,比如增加的招聘和广告业务。

linkedin2008年架构


Linked性能指标

  • LinkedIn 集群: web事件跟踪记录和在线寻找

  • 6 nodes, 400  GB of data, 12 clients

  • mixed load  (67 % Get , 33 % Put)

  • Throughput 吞吐量

  • 1433 QPS  (node)

  • 4299 QPS  (cluster)

 

  • Latency延迟

  • GET

  • 50 % percentile 0.05 ms

  • 95 % percentile 36.07 ms

  • 99 % percentile 60.65 ms

  • PUT

  • 50  % percentile 0.09 ms

  • 95 % percentile 0.41 ms

  • 99 % percentile 1.22 ms



云缓存

  • 图缓存:通过databus更新,关机时持久化到硬盘。

  • 原子型的网络关系缓存:通过云计算构建;与会员用户session绑定。

lined in cache

云缓存大小

  • 22M nodes, 120M edges

  • 需要12GB RAM

  • 在生产环境要跑40个实例

  • 从硬盘重建Cloud一个实例需要8个小时 ,启动开机。

  • 缓存通过C++实现,用JNI调用。

Voldemort

  • 应用在LinkedIn ,不是关系数据库。

  • 是一种带有存储系统的内存缓存。这样就不需要单独缓存了。

  • 云存储:使用Voldemort实现只读 read-only index,使用Hadoop作为数据文件。建立TB级别数据处理 。

voldemort


数据模型

  • 紧凑的, 压缩的二进制数据

  • 类型是 int, double, float, String, Map, List, Date, etc.

  • 会员数据格式如:

  • {

  •          'member_id': 'int32',

  •       ‘first_name': 'string',

  •       ’last_name': ’string’,

  •       ‘age’       : ‘int32’

  •        …

  •      }

  • 数据作为一个顺序被序列化的文件保存在 Hadoop

  • 数据格式也作为一个顺序文件保存,

  • 数据schema只读, 动态由Java/Pig 任务读取。