从 LinkedIn 的数据处理机制学习数据架构
- 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使用的索引
图: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的离线系统获取数据。下面这些页面的数据都是来自于Vold emart:
- 你可能认识的人
- 看过本页面的人还在看
- 相关搜索
- 你可能感兴趣的工作
- 你可能感兴趣的事件
下面是几种不同的索引,这些索引由Databus-一个变化数据捕捉系统-来更新的:
- 供SeaS(Search-as-a-Service)使用的’成员搜索索引‘。当你在LinkedIn上搜索不同的成员时,这些数据就是来自于搜索索引。通常这个功能对招聘人员的帮助很大。
- 社交图索引帮助在人们的人脉关系中显示成员以及关系。通过这个索引用户几乎可以实时的得到网络关系的变化。
- 通过读复制集获取到的成员资料数据。这些数据会被’标准化服务‘访问。读复制集是对源数据库的复制,这样能使源数据库的更新同步到这些复制集上面。增加读复制集的最主要原因是能够通过将读操查询分散到读复制集上来减轻源数据库(执行用户发起的写操作)的压力。
下图展示了数据变化捕获事件是如何利用Databus更新到近线系统的:
用数据用例来展示它们是如何工作的
假如你更新了你个人资料中的最新技能和职位。你还接受了一个连接请求。那么在系统内部到底发生了什么:
- 将更新写入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存储)来取走数据。
U对于数据一致性来说,你可以以将这些数据存储库创建为分布式系统,集群中的每个节点又都包含主从节点。所有节点都可以创建水平扩展的数据Shards。
- 为了保证这些分布式数据存储系统正常运行时间最大化,你可以使用像Apache Helix这一类的集群管理工具。
从 LinkedIn 的数据处理机制学习数据架构相关推荐
- 进阶大数据架构师学习路线
![在这里插入图片描述](https://img-blog.csdnimg.cn/25b820fe1d054f53bab70310694faffe.jpeg#pic_center 文末有惊喜 大数据架 ...
- 数据架构师学习+爬下6万共享单车数据并进行分析
1.从小白到大数据架构师的学习历程 https://mp.weixin.qq.com/s/pw1EqLXTzrc86x9odTXKkQ 大数据处理技术怎么学习呢?首先我们要学习Python语言和Lin ...
- 8年京东大数据架构师推荐的大数据开发学习路线
一.我们先要了解大数据的工作方向 01.大数据工程师 02.数据分析师 03.大数据科学家 04.其他(数据挖掘本质算是机器学习,不过和数据相关,也可以理解为大数据的一个方向吧) 二.大数据工程师的技 ...
- 数据架构学习之路(建议收藏)
写在前面 早在1980年,未来学家阿尔文·托夫勒就在<第三次浪潮>中,将大数据比喻为"第三次浪潮的华彩乐章". 21世纪以来,数据量进入每两年翻一番的增长期,越来越多 ...
- 大数据架构师进阶之路-技术学习路线
大数据架构师进阶之路 自大学毕业从事IT行业已有两年有余,虽在这两年一直没有停止学习的脚步,但总是感觉,不成体系,再就是学过的技术长时间不用,也忘记了,写篇博客的目的,是想在工作之余,一是充实自己,将 ...
- 大数据架构详解:从数据获取到深度学习
机器学习(Machine Learning,ML)是一门多领域交叉学科,涉及概率论.统计学.逼近论.凸分析.算法复杂度理论等多门学科.其专门研究计算机是怎样模拟或实现人类的学习行为,以获取新的知识或技 ...
- 从入门到进阶!当下火爆的大数据技术及算法怎么还能不知道 一起来学习互联网巨头的大数据架构实践!
大数据被称为新时代的黄金和石油,相关技术发展迅猛,所应用的行业也非常广泛,从传统行业如医疗.教育.金融.旅游,到新兴产业如电商.计算广告.可穿戴设备.机器人等.大数据技术更是国家科技发展和智慧城市建设 ...
- 这可能是程序员学习大数据架构师的最佳之路!另附送1024G学习资料!
随着大数据时代的到来,[这次国家教育部的改革要动真格了],JAVA程序员们仅有的一点点竞争力很快就不复存在,为什么这么说呢? 人生别只顾低头拉车,更要抬头看路! 国家教育部全面改革:大数据领衔 所有高 ...
- 大数据架构师深入学习视频教程
大数据架构师深入学习视频教程 大数据分析你要掌握概率统计学的知识,学会数据分析工具的使用.比如MATLAB,这个工具非常强大,掌握起来有些难度.但不是说你掌握了这个工具就能胜任数据分析师的工作了.你还 ...
- 从零学习 InfiniBand-network架构(七) ——IB协议中数据如何传输
从零学习 InfiniBand-network架构(七) -- IB协议中数据如何传输
最新文章
- CORBA GIOP消息格式学习
- hadoop3.1.2 配置 3台 完全分布式
- phpcms函数:用*号替换(私密信息)中间数据(如手机号、邮箱)
- java常见的定时任务
- verlet-rope-latest 的扩展—— BYRope
- SQL中IF和CASE语句
- 完整简单c语言程序代码,初学C语言常用简单程序代码
- OneDrive网盘资源下载教程
- wkwebview 下移20像素_Cyclone2D编辑器(通用版本) 使用手册
- qq文件服务器怎么用,怎样使用qq文件助手功能图文教程
- 对于Biotin-LC-NHS Estercas:72040-63-2与伯氨基 (-NH2) 反应的作用有哪些?
- MySQL学习(2)——MySQL表的增删查改(基础)
- 家庭智能控制系统开发
- 谷歌浏览器驱动官网下载
- 狼人杀c语言代码,1089 狼人杀-简单版——C/C++实现
- 快速了解Mesh组网及应用
- 永安行专利侵权胜诉,IPO并未搁置
- 慧荣SM2246主控固态硬盘开卡一直pretest解决方法
- Windows为什么越用越慢而Linux却不会?
- java语言的三个版本是_Java是一个全面且功能强大的语言,可用于多种用途。Java有三个版本分别是:_学小易找答案...
热门文章
- 神经图灵机NTM —— 元学习
- java证书验证失败_SVN提示https证书验证失败解决办法
- php小插件,PHPStrom中一些我收藏的小插件
- 使用RemotePotato0从普通用户提升至域管理员
- php构造函数里抛出异常_构造函数、析构函数抛出异常的问题
- Integer与int比较的坑
- 深入浅出新一代云网络——VPC中的那些功能与基于OpenStack Neutron的实现(二)-带宽控制...
- python3.6- shape mismatch: objects cannot be broadcast to a single shape
- 【旧文章搬运】PsVoid中IrpCreateFile函数在Win7下蓝屏BUG分析及解决
- 第九篇 设计模式之装饰模式