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
2008架构变动
WebApp不再任何事情都它自己做,把业务逻辑分成很多部分,通过server群来做。
WebApp仍然提供用户界面给用户,但是,通过server群来管理用户资料,小组等等。
每个服务有自己的域数据库。
新的架构允许其他应用链接LinkedIn,比如增加的招聘和广告业务。
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绑定。
云缓存大小
22M nodes, 120M edges
需要12GB RAM
在生产环境要跑40个实例
从硬盘重建Cloud一个实例需要8个小时 ,启动开机。
缓存通过C++实现,用JNI调用。
Voldemort
应用在LinkedIn ,不是关系数据库。
是一种带有存储系统的内存缓存。这样就不需要单独缓存了。
云存储:使用Voldemort实现只读 read-only index,使用Hadoop作为数据文件。建立TB级别数据处理 。
数据模型
紧凑的, 压缩的二进制数据
类型是 int, double, float, String, Map, List, Date, etc.
会员数据格式如:
{
'member_id': 'int32',
‘first_name': 'string',
’last_name': ’string’,
‘age’ : ‘int32’
…
}
数据作为一个顺序被序列化的文件保存在 Hadoop
数据格式也作为一个顺序文件保存,
数据schema只读, 动态由Java/Pig 任务读取。