从LinkedIn的数据处理机制学习数据架构

标签: IT技术 Linkedin 数据处理 架构 | 发表时间:2014-06-05 05:08 | 作者:塔塔
出处:http://blog.jobbole.com

LinkedIn.com是当今最流行的专业社交网站之一,本文描述了LinkedIn.com是如何管理数据的。如你对文中的观点有异议亦或文中有遗漏的部分请随时告诉我。

LinkedIn.com数据用例

下面是一些数据用例,可能我们在浏览LinkedIn网页时都已经看到过了。

  • 更新后的个人资料后几乎可以实时的出现在招聘搜索页面
  • 更新后的个人资料后几乎可以实时的出现在人脉网页
  • 分享一个更新,可以近实时的出现在新闻feed页面
  • 然后会更新到其他只读页面,像”你可能认识的人“、”看过我资料的人“、”相关搜索“等。

令人震惊的是,如果我们使用较好的宽带,这些页面可以在数毫秒内完成加载!让我们向 LinkedIn工程师团队致敬!

早期的LinkedIn数据架构

像其它初创公司一样,LinkedIn 早期也是通过单个的RDBMS (关系型数据库管理系统)的几张表来保存用户资料和人脉关系。是不是很原始?后来这个RDMBS扩展出两个额外的数据库系统,其中一个用来支撑用户个人资料的全文搜索,另一个用来实现社交图。这两个数据库通过Databus来取得最新数据。Databus是一个变化捕捉系统,它的主要目标就是捕捉那些来至可信源(像Oracle)中数据集的变更,并且把这些变化更新到附加数据库系统中。

但是,没过多久这种架构就已经很难满足网站的数据需求了。因为按照Brewerd的CAP理论想要同时满足下面的条件看似不太可能:

一致性:所有应用在同一时刻看到相同的数据

可用性:保证每个请求都能收到应答,无论成功或失败

分区容错性:部分系统的消息丢失或失败不影响系统系统整体的正常运行

根据上面的法则,LinkedIn工程师团队实现了他们称作为时间线一致性(或者说近线系统的最终一致性,下面会解释)以及另外两个特性:可用性和分区容错性。下面介绍目前LinkedIn的数据架构。

LinkedIn如今的数据架构

如果要支撑在不到一秒钟内处理数百万用户的相关事务,上面的数据架构已经明显不足了。因此,LinkedIn 工程师团队提出了三段式(three-phase)数据架构,由在线、离线以及近线数据系统组成。总体上讲,LinkedIn数据被存储在如下几种不同形式的数据系统中(看下面的图):

  • RDBMS
    • Oracle
    • MySQL(作为Espresso的底层数据存储)
  • RDBMS
    • Espresso(LinkedIn自己开发的文档型NoSQL数据存储系统)
    • Voldemart (分布式Key-value存储系统)
    • HDFS (存放Hadoop map-reduce任务的数据)
  • Caching
    • Memcached
  • 基于Lucene的索引
    • 存放查询、关系图等功能数据的Lucene 索引
    • Espresso使用的索引

db-systems-New-Page-1-1024x838

图:LinkedIn数据库系统包括了DataBus、NoSQL、RDBMS以及Indexes

上面提到的数据存储库被归为三种不同类型的系统,下面会逐一解释:

在线数据库系统

在线系统处理用户的实时互动;主数据库像Oracle就属于这一类别。主数据存储用来支撑用户的写操作和少量的读操作。以Orcale为例,Oracle master会执行所有的写操作。最近,LinkedIn正在开发另一个叫做“Espresso”的数据系统来满足日益复杂的数据需求,而这些数据看似不应从像Oracle这类的RDBMS中获取。他们能否淘汰所有或大部分的Oracle并将数据完全转移到像Espresso这类的NoSQL数据存储系统中去?让我们拭目以待。

Espresso是一个支持水平扩展、索引、时间线一致性、基于文档且高可用的NoSQL数据仓库, 旨在代替支撑公司网页操作所使用的传统Oracle数据库。设计它的初衷是为了提高LinkedIn的InMail消息服务的可用性。目前有如下一些应用在使用Espresso作为可信源系统。能够看到NoSQL数据存储是如果被用来处理如此众多应用的数据需求很是神奇!
  • 成员间消息,
  • 社交动作,如:更新
  • 文章分享
  • 用户个人资料
  • 公司资料
  • 新闻文章

离线数据库系统

离线系统主要包括Hadoop和一个Teradata数据仓库,用来执行批处理和分析类的工作。之所以被称为离线是因为它对数据执行的的批处理操作。  Apache Azkaban被用来管理Hadoop和ETL任务,这些任务从主可信源系统获取数据后交由map-reduce处理,处理结果被保存在 HDFS,然后通知’消费者‘(例如: Voldemart)通过合适的方式来获取这些数据并切换索引来保证能获取到最新的数据。

近线数据库系统(时间线一致性)

近线系统的目标是为了实现时间线一致性(或最终一致性),它处理类似’你可能认识的人(只读数据集)‘、搜索以及社交图这些功能,这些功能的数据会持续更新,但它们对延迟性的要求并不像在线系统那样高。下面是几种不同类型的近线系统:

  • Voldemart,一个Key-Value存储系统,为系统中的只读页面提供服务。Voldemart的数据来源于Hadoop框架(Hadoop Azkaban:编排Hadoop map-reduce任务的执行计划)。这就是近线系统,它们从类似Hadoop的离线系统获取数据。下面这些页面的数据都是来自于Voldemart:
      • 你可能认识的人
      • 看过本页面的人还在看
      • 相关搜索
      • 你可能感兴趣的工作
      • 你可能感兴趣的事件
  • 下面是几种不同的索引,这些索引由 Databus-一个变化数据捕捉系统-来更新的:
      • 供SeaS(Search-as-a-Service)使用的’成员搜索索引‘。当你在LinkedIn上搜索不同的成员时,这些数据就是来自于搜索索引。通常这个功能对招聘人员的帮助很大。
      • 社交图索引帮助在人们的人脉关系中显示成员以及关系。通过这个索引用户几乎可以实时的得到网络关系的变化。
      • 通过读复制集获取到的成员资料数据。这些数据会被’标准化服务‘访问。读复制集是对源数据库的复制,这样能使源数据库的更新同步到这些复制集上面。增加读复制集的最主要原因是能够通过将读操查询分散到读复制集上来减轻源数据库(执行用户发起的写操作)的压力。

下图展示了数据变化捕获事件是如何利用Databus更新到近线系统的:

databus-usecases

用数据用例来展示它们是如何工作的

假如你更新了你个人资料中的最新技能和职位。你还接受了一个连接请求。那么在系统内部到底发生了什么:

  • 将更新写入Oracle Master数据库
  • 然后Databus做了如下一系列奇妙的工作来实现时间线一致性:
      • 将资料变更,如最新技能和职位信息,更新到标准化服务。
      • 将上面提到的变更更新到搜索索引服务。
      • 将关系变更更新到图索引服务。

数据架构经验

如果要设计一个像LinkedIn.com一样的支持数据一致性、高扩展性且高可用性的数据架构,可以借鉴下面的经验:

  • 数据库读写分离:你应当计划两种数据库,一种用来执行写操作的可以称为“ 可信源”系统,另一种执行读操作的可以称为派生数据库系统。这里的经验法则就是将由用户发起的写操作和用户读操作使用的数据库区分开来。
  • 派生数据库系统:用户的读操作应该被分配到派生数据库或者读复制集上去。而派生数据库系统则可以建立在下面的系统之上:
      • Lucene 索引
      • NoSQL数据存储,例如:Voldemart、Redis、Cassandra、MongoDB等。
  • 对于用户的读操作,应该尽量从主可信源数据库系统创建索引或者基于key-value的数据(来源于Hadoop map-reduce之类的系统),并且将每次由用户发起的被写入主可信源系统的变更一并更新到这些索引或派生数据(key-value)。
  • 为确保派生数据库系统的数据是最新的,你可以选择应用复写(application-dual writes),即在应用层同时写入主数据库和派生数据库系统,或日志挖掘(读取通过批处理任务得到的主数据存储系统的事务提交日志)。
  • 创建派生数据时,你可以针对主数据集或者变更数据集执行 基于Hadoop的map-reduce任务,然后更新 HDFS并且通知派生数据存储系统(类似Voldemart的NoSQL存储)来取走数据。
  • 对于数据一致性来说,你可以以将这 些数据存储库创建为分布式系统,集群中的每个节点又都包含主从节点。所有节点都可以创建水平扩展的数据Shards。
  • 为了保证这些分布式数据存储系统正常运行时间最大化,你可以使用像Apache Helix这一类的集群管理工具。

参考文献

从LinkedIn的数据处理机制学习数据架构,首发于 博客 - 伯乐在线

相关 [linkedin 数据 学习] 推荐:

从LinkedIn的数据处理机制学习数据架构

- - 博客 - 伯乐在线
LinkedIn.com是当今最流行的专业社交网站之一,本文描述了LinkedIn.com是如何管理数据的. 如你对文中的观点有异议亦或文中有遗漏的部分请随时告诉我. LinkedIn.com数据用例. 下面是一些数据用例,可能我们在浏览LinkedIn网页时都已经看到过了. 更新后的个人资料后几乎可以实时的出现在招聘搜索页面.

向LinkedIn学习什么

- 车东 - 《商业价值》杂志
准确的定位和极优的数据整理能力,是LinkedIn最终成功的原因. 中国模仿者们需要模仿到基因层面才会有希望. 2010年12月,美国非上市公司股票交易平台SecondMarket评选出五大估值超10亿美元的非上市公司,LinkedIn挤掉Youtube等大热门而上榜. LinkedIn这家比Facebook还早的老牌社交网站,在将近10年的互联网大潮中,一直以低调稳健但内容乏味的姿态潜行.

Linkedin 大数据生态系统

- - 冰火岛
随着hadoop及其生态系统技术的应用,海量数据挖掘和机器学习算法在实际项目中的作用不断增加. Linkedin的大数据生态系统主要基于hadoop,hive,pig等,从而帮助数据科学家和机器学习研究人员从海量数据中抽取知识,构建新的数据产品特征. 实际上,主要是为了解决最后一公里,提出一套丰富的开发生态系统.

linkedin 数据科学实习的5个经验总结

- - 冰火岛
这些可以使接下来的工作更加简单,结果更加可信. As a data scientist at LinkedIn, you have access to Petabytes of data (1 Petabyte as much data as is transferred when viewing HDTV for about 13.5 years).

揭秘LInkedin数据科学家如何工作

- - 互联网分析
在互联网企业中,LinkedIn是一家出了名的“慢公司”,但LinkedIn也是最成功的社交网络,用户品质、广告价值都是行业翘楚,秘密在于LinkedIn有一个高效的数据科学家团队. 作为社交网络, LinkedIn并不是最大的,也不是生长最快的. 成立于2003年的LinkedIn, 花了500天, 才达到了100万用户.

LinkedIn是如何利用数据分析驱动产品的?

- - PingWest中文网
让我们看看这家全球最大的职业社交网站、第三大社交网络的运营数据. 目前,LinkedIn有着2.7亿注册用户,大约400万家公司入驻,已经成为了职场人士最重要的在线交流和招聘求职平台. 更引人注意的是它对高端企业用户的吸引力:大约90%左右的TOP100企业在使用Linkedin的服务. 从它的营收数据中也可以看出这些业务的增长潜力.

LinkedIn实时低延迟数据抓取系统Databus开源

- - InfoQ cn
去年的架构师峰会上,来自LinkedIn的高级软件工程师 Lei Gao做了一场名为 《LinkedIn的数据处理架构》的演讲,着重介绍LinkedIn内部的数据基础设施的演变,其中提到Databus数据总线项目,当时就引起大家诸多好奇. 前不久,LinkedIn工程团队官方博客 发布消息:Databus项目开源.

LinkedIn开源低延时变化数据捕获系统Databus

- - CSDN最新资讯
LinkedIn于2月26日开源了其低延时变化数据捕获系统Databus,该系统在低延时情况下仍然具备高有效性. 能服务于LinkedIn生态系统数年之久,除上述特性以外当然还有其不可忽视的独到之处——无限制的lookback能力及丰富的subscription功能. 文章在最后公布了Databus源码及相关下载.

首席工程师揭秘:LinkedIn大数据后台是如何运作的

- - 博客园_知识库
   英文原文: The Log: What every software engineer should know about real-time data's unifying abstraction.   我在六年前的一个令人兴奋的时刻加入到LinkedIn公司. 从那个时候开始我们就破解单一的、集中式数据库的限制,并且启动到特殊的分布式系统套件的转换.

LinkedIn:2014年最吃香工作技能-统计分析和数据挖掘位列第一

- - 199IT互联网TMT数据
LinkedIn对全球超过3.3亿用户的工作经历和技能进行分析,公布 2014年最受雇主喜欢、最炙手可热的25项技能. 其中位列榜首的是统计分析和数据挖掘. 这项技能在 去年只排名第五,而当时的最热技能是社交媒体营销. 25岁的Quint Gribbin是Red Owl Analytics的数据科学家.