LinkedIn网站架构设计启示
jopen
11年前
本文是阅读
简介
LinkedIn创建于2003年,拥有(指发布那个PPT时的统计数字):
- 两千两百万注册会员
- 每月4百万UV(Unique Visitor)
- 每天四千万PV(Page View)
- 每天两百万次搜索
- 每天25万次邀请
- 每天一百万个答案被发布
工作流程
- 持续集成、持续发布,每个版本的开发周期控制在2-4周,使用了Hudson结合SVN
- 所有任务都被分割成小的可控的工程卡片,LinkedIn内部开发了一个系统支持这种工程卡片,有点类似敏捷开发中的CRC卡片
- 注重测试:单元测试和集成测试,除了使用单元测试和集成测试工具外,还使用EasyMock来避免频繁集成测试耗时太长的缺点
- 尽量避免会议,站立式会议
整体架构演化
2003年-2005年的架构如下:
特点:
- 结构简单,核心数据库只有一个
- GUI层、业务逻辑层(BL Layer)和服务层(Services Layer)都放在同一个Web服务器上
2006年的架构如下:
特点:
- 相比之前搜索模块被单独提出来
- 最大的变化是数据访问层,增加了Databus这种分布式总线式数据处理管道,并且增加了多个从库(只用于读,写还是走主库Core Database)
现在的架构(具体是哪一年?不清楚):
特点:
- 服务层被提出来并分化出多个服务:Profile Service、Comm Service、Groups Service、News Service,并且每个服务都有自己的数据库(按业务分库)
- 服务被抽取出来后有一个好处是可复用性极大增强,这样也导致依赖于这些服务的Web App的诞生:Public Profile Web App和Recruiter Web App
- 增加广告服务
新闻服务架构
从上面可以看出几点:
- 新闻主要来源是网络爬虫抓取:分布式爬虫、解析技术使用StAX和Rom
- 爬取到的数据经过解析清洗后进入News DB,再由Lucene构建索引,以供News Service检索
99%代码都是Java编写的
LinkedIn组合使用各种Java开源框架,代码99%都是由Java编写的,各层用到的Java框架如下:
可以从上表看出LinkedIn使用都是一些Java界“喜闻乐见”的框架,但组合使用得当一样可以有效支撑起一个千万级别的网站架构。