LinkedIn网站架构设计启示

jopen 10年前

本文是阅读后的一些总结思考。


简介

LinkedIn创建于2003年,拥有(指发布那个PPT时的统计数字):

  • 两千两百万注册会员
  • 每月4百万UV(Unique Visitor)
  • 每天四千万PV(Page View)
  • 每天两百万次搜索
  • 每天25万次邀请
  • 每天一百万个答案被发布


工作流程

  • 持续集成、持续发布,每个版本的开发周期控制在2-4周,使用了Hudson结合SVN
  • 所有任务都被分割成小的可控的工程卡片,LinkedIn内部开发了一个系统支持这种工程卡片,有点类似敏捷开发中的CRC卡片
  • 注重测试:单元测试和集成测试,除了使用单元测试和集成测试工具外,还使用EasyMock来避免频繁集成测试耗时太长的缺点
  • 尽量避免会议,站立式会议


整体架构演化

2003年-2005年的架构如下:

LinkedIn网站架构设计启示    

特点:

  • 结构简单,核心数据库只有一个
  • GUI层、业务逻辑层(BL Layer)和服务层(Services Layer)都放在同一个Web服务器上

2006年的架构如下:

LinkedIn网站架构设计启示

特点:

  • 相比之前搜索模块被单独提出来
  • 最大的变化是数据访问层,增加了Databus这种分布式总线式数据处理管道,并且增加了多个从库(只用于读,写还是走主库Core Database)

现在的架构(具体是哪一年?不清楚):

LinkedIn网站架构设计启示

特点:

  • 服务层被提出来并分化出多个服务:Profile Service、Comm Service、Groups Service、News Service,并且每个服务都有自己的数据库(按业务分库)
  • 服务被抽取出来后有一个好处是可复用性极大增强,这样也导致依赖于这些服务的Web App的诞生:Public Profile Web App和Recruiter Web App
  • 增加广告服务


新闻服务架构

LinkedIn网站架构设计启示

从上面可以看出几点:

  • 新闻主要来源是网络爬虫抓取:分布式爬虫、解析技术使用StAX和Rom
  • 爬取到的数据经过解析清洗后进入News DB,再由Lucene构建索引,以供News Service检索


99%代码都是Java编写的

LinkedIn组合使用各种Java开源框架,代码99%都是由Java编写的,各层用到的Java框架如下:

LinkedIn网站架构设计启示

可以从上表看出LinkedIn使用都是一些Java界“喜闻乐见”的框架,但组合使用得当一样可以有效支撑起一个千万级别的网站架构。