说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

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

HTML文档下载 WORD文档下载 PDF文档下载
“不懂得日志,你就不可能完全懂得数据库”Jay Kreps说道,Jay Kreps是LinkedIn公司首席工程师,本文介绍他本人对于日志的心得体会,包括日志是什么,如何在数据集成、实时处理和系统构建中使用日志等。

编者按: Jay Kreps是来自LinkedIn的首席工程师,他表示日志几乎在计算机产生的时候就存在,除了可用在分布式计算或者抽象分布式计算模型内部之外,还有广泛的用途。本文中他讲述的日志的原理和通过把日志用做单独服务来实现数据集成、实时数据处理以及分布式系统设计。文章内容非常干货,值得学习。

以下是原文:

我在六年前的一个令人兴奋的时刻加入到LinkedIn公司。从那个时候开始我们就破解单一的、集中式数据库的限制,并且启动到特殊的分布式系统套件的转换。这是一件令人兴奋的事情:我们构建、部署,而且直到今天仍然在运行的分布式图形数据库、分布式搜索后端、Hadoop安装以及第一代和第二代键值数据存储。

从这一切里我们体会到的最有益的事情是我们构建的许多东西的核心里都包含一个简单的理念:日志。有时候也称作预先写入日志或者提交日志或者事务日志,日志几乎在计算机产生的时候就存在,同时它还是许多分布式数据系统和实时应用结构的核心。

不懂得日志,你就不可能完全懂得数据库,NoSQL存储,键值存储,复制,paxos,Hadoop,版本控制以及几乎所有的软件系统;然而大多数软件工程师对它们不是很熟悉。我愿意改变这种现状。在这篇博客文章里,我将带你浏览你必须了解的有关日志的所有的东西,包括日志是什么,如何在数据集成、实时处理和系统构建中使用日志等。

第一部分:日志是什么?

日志

日志是一种简单的不能再简单的存储抽象。它是一个只能增加的,完全按照时间排序的一系列记录。日志看起来如下:

我们可以给日志的末尾添加记录,并且可以从左到右读取日志记录。每一条记录都指定了一个唯一的有一定顺序的日志记录编号。

日志记录的排序是由“时间”来确定的,这是因为位于左边的日志记录比位于右边的要早些。日志记录编号可以看作是这条日志 记录的“时间戳”。在一开始就把这种排序说成是按时间排序显得有点多余 ,不过 ,与任何一个具体的物理时钟相比,时间 属性是非常便于使用的属性。在我们运行多个分布式系统的时候,这个属性就显得非常重要。

对于这篇讨论的目标而言,日志记录的内容和格式不怎么重要。另外提醒一下,在完全耗尽存储空间的情况下,我们不可能 再给日志添加记录。稍后我们将会提到这个问题。

日志并不是完全不同于文件或者数据表的。文件是由一系列字节组成,表是由一系列记录组成,而日志实际上只是按照时间顺序存储记录的 一种数据表或者文件。

此时,你可能奇怪为什么要讨论这么简单的事情呢? 不同环境下的一个只可增加的有一定顺序的日志记录是怎样与数据系统关联起来的呢?答案是日志有其特定的应用目标:它记录了什么时间发生了什么事情。 而对分布式数据系统许多方面而言, 这才是问题的真正核心。

不过,在我们进行更加深入的讨论之前,让我先澄清有些让人混淆的概念。每个编程人员都熟悉另一种日志记录-应用使用syslog或者log4j可能写入到本地文件里的没有结构的错误信息或者追踪信息。为了区分开来,我们把这种情形的日志记录称为“应用日志记录”。应用日志记录是我在这儿所说的日志的一种低级的变种。最大的区别是:文本日志意味着主要用来方便人们阅读,而我所说明的“日志”或者“数据日志”的建立是方便程序访问。

(实际上,如果你对它进行深入的思考,那么人们读取某个机器上的日志这种理念有些不顺应时代潮流。当涉及到许多服务和服务器的时候,这种方法很快就变成一个难于管理的方式,而且为了认识多个机器的行为,日志的目标很快就变成查询和图形化这些行为的输入了-对多个机器的某些行为而言,文件里的英文形式的文本同这儿所描述的这种结构化的日志相比几乎就不适合了。)

数据库日志

我不知道日志概念起源于何处-可能它就像二进制搜索一样:发明者认为它太简单而不能当作一项发明。它早在IBM的系统R出现时候就出现了。数据库里的用法是在崩溃的时候用它来同步各种数据结构和索引。为了保证操作的原子性和持久性,在对数据库维护的所有各种数据结构做更改之前,数据库把即将修改的信息誊写到日志里。日志记录了发生了什么,而且其中的每个表或者索引都是一些数据结构或者索引的历史映射。由于日志是即刻永久化的,可以把它当作崩溃发生时用来恢复其他所有永久性结构的可信赖数据源。

随着时间的推移,日志的用途从实现ACID细节成长为数据库间复制数据的一种方法。利用日志的结果就是发生在数据库上的更改顺序与远端复制数据库上的更改顺序需要保持完全同步。

Oracle,MySQL 和PostgreSQL都包括用于给备用的复制数据库传输日志的日志传输协议。Oracle还把日志产品化为一个通用的数据订阅机制,这样非Oracle数据订阅用户就可以使用XStreams和GoldenGate订阅数据了,MySQL和PostgreSQL上的类似的实现则成为许多数据结构的关键组件。
正是由于这样的起源,机器可识别的日志的概念大部分都被局限在数据库内部。日志用做数据订阅的机制似乎是偶然出现的,不过要把这种 抽象用于支持所有类型的消息传输、数据流和实时数据处理是不切实际的。

分布式系统日志

日志解决了两个问题:更改动作的排序和数据的分发,这两个问题在分布式数据系统里显得尤为重要。协商出一致的更改动作的顺序(或者说保持各个子系统本身的做法,但可以进行存在副作用的数据拷贝)是分布式系统设计的核心问题之一。

以日志为中心实现分布式系统是受到了一个简单的经验常识的启发,我把这个经验常识称为状态机复制原理:如果两个相同的、确定性的进程从同一状态开始,并且以相同的顺序获得相同的输入,那么这两个进程将会生成相同的输出,并且结束在相同的状态。

这也许有点难以理解,让我们更加深入的探讨,弄懂它的真正含义。

确定性意味着处理过程是与时间无关的,而且任何其他“外部的“输入不会影响到处理结果。例如,如果一个程序的输出会受到线程执行的具体顺序影响,或者受到gettimeofday调用、或者其他一些非重复性事件的影响,那么这样的程序一般最有可能被认为是非确定性的。

进程状态是进程保存在机器上的任何数据,在进程处理结束的时候,这些数据要么保存在内存里,要么保存在磁盘上。

以相同的顺序获得相同输入的地方应当引起注意-这就是引入日志的地方。这儿有一个重要的常识:如果给两段确定性代码相同的日志输入,那么它们就会生成相同的输出。

分布式计算这方面的应用就格外明显。你可以把用多台机器一起执行同一件事情的问题缩减为实现分布式一致性日志为这些进程输入的问题。这儿日志的目的是把所有非确定性的东西排除在输入流之外,来确保每个复制进程能够同步地处理输入。

当你理解了这个以后,状态机复制原理就不再复杂或者说不再深奥了:这或多或少的意味着“确定性的处理过程就是确定性的”。不管怎样,我都认为它是分布式系统设计里较常用的工具之一。

这种方式的一个美妙之处就在于索引日志的时间戳就像时钟状态的一个副本——你可以用一个单独的数字描述每一个副本,这就是经过处理的日志的时间戳。时间戳与日志一一对应着整个副本的状态。

由于写进日志的内容的不同,也就有许多在系统中应用这个原则的不同方式。举个例子,我们记录一个服务的请求,或者服务从请求到响应的状态变化,或者它执行命令的转换。理论上来说,我们甚至可以为每一个副本记录一系列要执行的机器指令或者调用的方法名和参数。只要两个进程用相同的方式处理这些输入,这些进程就会保持副本的一致性。

一千个人眼中有一千种日志的用法。数据库工作者通常区分物理日志和逻辑日志。物理日志就是记录每一行被改变的内容。逻辑日志记录的不是改变的行而是那些引起行的内容被改变的SQL语句(insert,update和delete语句)。

分布式系统通常可以宽泛分为两种方法来处理数据和完成响应。“状态机器模型”通常引用一个主动-主动的模型——也就是我们为之记录请求和响应的对象。对此进行一个细微的更改,称之为“预备份模型”,就是选出一个副本做为leader,并允许它按照请求到达的时间来进行处理并从处理过程中输出记录其状态改变的日志。其他的副本按照leader状态改变的顺序而应用那些改变,这样他们之间达到同步,并能够在leader失败的时候接替leader的工作。

日志

为了理解两种方式的不同,我们来看一个不太严谨的例子。假定有一个算法服务的副本,保持一个独立的数字作为它的状态(初始值为0),并对这个值进行加法和乘法运算。主动-主动方式应该会输出所进行的变换,比如“+1”,“*2”等。每一个副本都会应用这些变换,从而得到同样的解集。主动-被动方式将会有一个独立的主体执行这些变换并输出结果日志,比如“1”,“3”,“6”等。这个例子也清楚的展示了为什么说顺序是保证各副本间一致性的关键:一次加法和乘法的顺序的改变将会导致不同的结果。

日志

分布式日志可以理解为一致性问题模型的数据结构。因为日志代表了后续追加值的一系列决策。你需要重新审视Paxos算法簇,尽管日志模块是他们最常见的应用。 在Paxos算法中,它通常通过使用称之为多paxos的协议,这种协议将日志建模为一系列的问题,在日志中每个问题都有对应的部分。在ZAB, RAFT等其它的协议中,日志的作用尤为突出,它直接对维护分布式的、一致性的日志的问题建模。

我怀疑的是,我们就历史发展的观点是有偏差的,可能是由于过去的几十年中,分布式计算的理论远超过了其实际应用。在现实中,共识的问题是有点太简单了。计算机系统很少需要决定单个值,他们几乎总是处理成序列的请求。这样的记录,而不是一个简单的单值寄存器,自然是更加抽象。

此外,专注于算法掩盖了 抽象系统需要的底层的日志。我怀疑,我们最终会把日志中更注重作为一个商品化的基石,不论其是否以同样的方式 实施的,我们经常谈论一个哈希表而不是纠结我们 得到是不是具体某个细节的哈希表,例如线性或者带有什么什么其它变体哈希表。日志将成为一种大众化的接口,为大多数算法和其实现提升提供最好的保证和最佳的性能。

变更日志101: 表与事件的二相性。

让我们继续聊数据库。数据库中存在着大量变更日志和表之间的二相性。这些日志有点类似借贷清单和银行的流程,数据库表就是当前的盈余表。如果你有大量的变更日志,你就可以使用这些变更用以创建捕获当前状态的表。这张表将记录每个关键点(日志中一个特别的时间点)的状态信息。这就是为什么日志是非常基本的数据结构的意义所在:日志可用来创建基本表,也可以用来创建各类衍生表。同时意味着可以存储非关系型的对象。

八卦

这个流程也是可逆的:如果你正在对一张表进行更新,你可以记录这些变更,并把所有更新的日志发布到表的状态信息中。这些变更日志就是你所需要的支持准实时的克隆。基于此,你就可以清楚的理解表与事件的二相性: 表支持了静态数据而日志捕获变更。日志的魅力就在于它是变更的完整记录,它不仅仅捕获了表的最终版本的内容,它还记录了曾经存在过的其它版本的信息。日志实质上是表历史状态的一系列备份。

这可能会引起你对源代码的版本管理。源代码管理和数据库之间有密切关系。版本管理解决了一个大家非常熟悉的问题,那就是什么是分布式数据系统需要解决的— 时时刻刻在变化着的分布式管理。版本管理系统通常以补丁的发布为基础,这实际上可能是一个日志。您可以直接对当前 类似于表中的代码做出“快照”互动。你会注意到, 与其他分布式状态化系统类似,版本控制系统 当你更新时会复制日志,你希望的只是更新补丁并将它们应用到你的当前快照中。

最近,有些人从Datomic –一家销售日志数据库的公司得到了一些想法。这些想法使他们对如何 在他们的系统应用这些想法有了开阔的认识。 当然这些想法不是只针对这个系统,他们会成为 十多年分布式系统和数据库文献的一部分。

这可能似乎有点过于理想化。但是不要悲观!我们会很快把它实现。


以“ 云计算大数据 推动智慧中国 ”为主题的 第六届中国云计算大会 将于5月20-23日在北京国家会议中心隆重举办。产业观察、技术培训、主题论坛、行业研讨,内容丰富,干货十足。票价优惠,马上 报名

看Go桌面技术副总,如何解读Facebook Home 增长最快的游戏公司Supercell 你学得会? 移动周报:为什么我们出不了IT神童? AWS、VMware和OpenStack谁是赢家? 消息称苹果正在寻找新任CEO取代库克 请别人云亦云 PC仍然重要且活得很好 比预想晚几年!IBM x86服务器或终将卖给联想 App推广的节操呢? iMessage垃圾短信产业链暗访 Apkudo CEO访谈:免费为Android开发者提供测试 Web API核查表:设计、测试、发布API时需思考的43件事 开源Android构建工具Buck 速度超Ant两倍 从史上八大MySQL事故中学到的经验 OpenStack Heat向应用市场更近一步 初创公司Ionic Security:云安全必须与时俱进 谷歌董事长:一年后消费者才能用上Goolge Glass Windows 8.1重新推出的“开始按钮”毫无意义 手眼并用 代码泄露三种Google Glass手势操作 Google新论文 CPI&#178;:基于Linux的世界级跨数据中心服务器CPU监控 20款非常实用的Web工具和资源列表 数据库界大事件 随机写性能巨好的TokuDB开源了 CMDN Club 26期:数字渠道营销主题沙龙 暴强:用iOS设备控制的HTML5“小蜜蜂”游戏 Leap Motion:500元体感,精确到0.01毫米 大事件:三大运营商将发布融合计费SDK 再培养一个扎克伯克:六款适合儿童上手编程的App 首届中国软件工程标准高峰论坛:软件开发的新机遇与挑战 Verizon研究显示:中国成为2012年度网络间谍攻击的主要来源 Clang宣布全面支持C++11标准 北大陈钟:SEMAT—中国软件工程发展的新机遇 超华尔街预期:苹果第二财季营收为436亿美元 跨平台游戏引擎Spaceport已被Facebook收购 有谁能够告诉我有关网站发展历史的资料么?世界上第一个网站是怎样建成的?以后的发展脉络呢?如果有谁能够相告不胜感激啊。 讨论:可视化开发XSLT的工具!! 如何使用VC进行“毫秒级”以下的 定时器。即(xx uS 的定时器)。。。。。。。。。。。。 看电视(转载) jsp比asp,php等好么?(在线等候) 怎样实现图像的自动拼接? 报表输出问题 我用ActionManage做出的菜单为何汉字显示总是最后一个字少半边? c#里如何使用shbrowseforfolder?那位兄弟给个例子 如何实现MAC和IP绑定。 帮帮我啊,老大们我真的很急谢了 session问题?????? 报表输出问题 你愿意吗? 关于PB中做VFP的ODBC的一个问题 我为什么不能提问? 在PASCAL语言中的"集合"概念,转化到C语言中,该怎么实现? 帮我看一下这个程序. 谁人发个QB的编辑器给我? 如何改变应用程序的图标 网吧管理 帮我看一下这个程序. 谁看谁头疼的问题!你除外! 请问JDK和J2SDK有什么区别? win98 转 win2000出现的问题,急,再线等候! 停止函数执行 请问如何在鼠标点击xx button 的时候获得 JtextField 中的文本输入--有重分送 我不能关机了!救救我哟~~给你分! tomcat4.0.1无法启动的问题 SoS!俺用fireworks做了一套菜单,但是应用于框架结构中时,只显示菜单所在框架的部分菜单。也就是说菜单显示不完整,如何能够让菜单跨越 刚装了REDHAT 7.2,不知道网络怎么设置 报表打印,望各位指点..... 是不是我这里设错了? 菜鸟有问题,Win2k的定时关机程序 关于天数累加的问题 webbrowser控件问题? 421连续进纸标准,打印问题,难啊,难 有个小问题难住偶了! 请教 bdf 文件的格式 在JPrint中如何设置页面的打印范围(不使用打印机的默认打印范围),找不到例子,那位能够给个实例。。。 开发jsp需要什么环境和安装软件,目前版本为多少? 在PASCAL语言中的"集合"概念,如何转化成C语言表示 怎么回事。formshow 不能写太多sql语句么〉?,怎么不显示?大家快帮看看,急死了 自动累加的问题?(100)我只能给这么多了 哪里可以下载powerbuilder7.0 网页自动累加的问题(100) help 求肋!! 有关SUN WORKSTATION OPENBOOT的问题 请问一下vb6和.NET 请问,如何用flash 做一个网页“访问量统计”计数器? 请问在win98繁体下开发的pb源程序,在简体win98下怎样转过来?急,请帮忙! 如图,在以O为圆心的两个同心圆中,AB经过圆心O,且与小圆相交于点A,与大圆相交于点B,小圆的切线AC与大圆相交于点D,且CO平分∠ACB.(1)试判断BC所在直线与小圆的位置关系,并说明理由;(2) 用狐狸,小山羊和小白兔. 机械图纸的尺寸标注,在标注数字前面有个圆圈,圆圈里面有个QC,rt24.5是全长尺寸,在24.5前面有个符号,这个 如图,在以O为为圆心的两个同心圆中,AB经过圆心O,且与小圆相交于点A,与大圆相交于点B.小圆的切线AC与大圆相交于点D,且CO平分∠ACD.(1)试判断BC所在直线与小圆的位置关系,并说明理由.(2) 用小白兔,胡萝卜和山羊编童话故事 500字 CAD2012标注半径时出现的是:半径的尺寸、直径的符号, 角铝规格6*60*60,长度是2636,怎么计算价格啊? 40(?)+20(?)=1(?)填单位! 3( )+4( )=1( ) 填数学单位,使等式成立.比如:1(斤)+1(斤)=1(公斤) 刺猬汉斯是-----国作家-------写的————(体裁)我还读过他们其他的童话,有,< > 《 》《 》等. 一棵树高20( )填单位 一个山羊撞树,一个刺猬拿苹果 5年级看图写作文(500)二楼的,太那个了 刺猬汉斯的主要内容是什么? 若二次函数y=f(x)的图像经过原点,且1≤f(-2)≤2,3≤f(1)≤4.求f(2)的取值范围 果园有桃树100棵,比苹果树多1/4,苹果树是x,列出方程,并求出苹果树. 刺猬汉斯讲了几件事,都什么事? 分米的英文符号是什么? 5棵苹果树产苹果a千克,照这样计算,100棵苹果树产苹果多少? 《刺猬汉斯》是《格林童话》写的. 改病句 若已知二次函数y=f(x)的图象过原点,且1 地球赤道上的物体和同步卫星的周期为什么相等?地球赤道上的物体不是忽略离地高度,同步卫星要计算离地高度吗? 刺猬汉斯帮我分段啊! 分米的符号怎么表示? 为什么同步卫星和地球上的物体半径不同,周期却相同 会计判断题 1.“短期借款”账户不核算应支付的借款利息.2、银行借款不论期限长短都必须按期偿还,并按规定支付利息.3、企业计提固定资产折旧时,应借记“累计折旧”账户,贷方“固定资产 1.若二次函数y=f(x)的图像过原点,且1小于等于f(-2)小于等于2,3小于等于f(1)小于等于4求f(2)得取值范围2.设a>0,a不等于0,t>0比较1/2loga^t与loga^(t+1)/2的大小,并加以证明3.若0 地球的同步卫星绕地球公转的周期为?是一恒星日?还是一太阳日? 求这些会计的判断题答案,最好能说明错在哪里 1.用银行存款去归还银行贷款,属于“一种形式的资产减少,引起另一种形式的负债减少”.2.按会计核算原则,凡是支出的效益仅与本会计年度 米分米厘米毫米国际上采用什么样的符号表示 在2004版中 已知圆弧的长度,起点何半径;如何用CAD划圆弧,怎么样标注圆弧?需要直接标注圆弧;可以吗! 点A在半径为1且圆心在原点的圆上,且角AOx=45度,点P从A点出发,逆时针等速沿着单位圆旋转已知P在1秒内转过的角度为M(0度 在同一圆里,直径的长度都( ),半径的长度都( ),直径的长度是半径的( ) 写一篇《刺猬汉斯》读后感,400字作文 如图,在平面直角坐标系xoy中,直线AB过点A(-4,0),B(0,4),圆的半径为1原点为圆心,点P在直线AB上,过点P作圆的一条切线PQ,Q为切点,则切线长PQ的最小值为? 1.在同一个圆里,直径的长度是半径的( ) 2.在同一个圆里,有( )条半径,所以的半径长度都( ).1.在同一个圆里,直径的长度是半径的( )2.在同一个圆里,有( )条半径,所以的半径长度都 机械制图多个相同直径的圆怎么标注,多个相同半径是不是标注一个就可以了? 如图,以原点为圆心的圆的直径AB= 在同一个圆里,直径的长度是半径的2倍,可以表示为( )或( ) 机械制图中,连续的几个相同的尺寸如何标注好... 如图,在平面直角坐标系中,半径为1的圆的圆心O在坐标原点,且与两座标轴分别交于A/B如图,在平面直角坐标系中,半径为1的圆的圆心O在坐标原点,且与两座标轴分别交于A、B、C、D四点,抛物线y=ax 几个政治判断题请给出正确答案!(错误的给予说明)1、禁止使用童工是法律保护未成年人生命健康的具体体现.( )2、人是自己性格的设计和创造师,因此塑造性格完全是个人修养的事()3 1、2、3、4题怎么写 童话故事,200字左右的 (文化) 要注明错在哪里,判断1.不同的民族文化,不同文化环境下的人们的交往行为和交往方式一定不同( )2.文化决定了人们的思维方式,认识活动,实践活动( )3.处在一定的文化环境中就 请问第3题和第4题怎么填 跨度9米,用那种规格H型钢能承受10吨的重量柱子与柱子距离是9米,上面铺导轨,10T双梁起重机在上面跑.H型钢用多大16T天车 ,柱子与柱子距离是9米,9米的跨度轨道梁应该是多大的,上面是16T天车 这道政治判断题哪里错了?2008年8月,十届人大常委会第四次会议通过 循环经济促进法,他的立法依据是可持续发展战略 西方童话中,猫头鹰常以最聪明的角色出现,是因为猫头鹰:A:头脑聪明B:活的长久C:与人长得相似D:经常保持思考的表情 如图在以O为原点的直角坐标系中,点A,C分别在X轴,Y轴的正半轴上,点B(a,b)在第一象限一四边形OABC,反比例函数y=分之k(k>0,x>0)的图像与AB相交于点D,与BC相交于点E,且BE=CE(1)试说明:BD=AD(2) 政治的判断题,我做得对不对? 用青草.桃子.老鼠编童话故事 以平面直角坐标系的原点O为圆心以1为半径作圆若点P是是该圆上第一象限内的一点且OP与X轴正方向组成角R则点则点P的坐标为 男女交配要注意什么 该题目的解法是如下 我的问题是这个式子是怎么来的? 解决几道判断题,顺便讲解一下对或错的理由1、将一个半径为rcm的圆形纸片切割成若干等份后拼成长方形,长方形的长是π rcm ( )2、r的平方=r×r=2r ( ) 如图,在以O为原点的直角坐标系中,点A、C分别在x轴、y轴的正半轴上,点B(a,b)在第一象限,四边形OABC是矩形,若反比例函数y=k/x的图像经过ab边的中点f,交bc边与点e (1)求证be=ce(2)若四边形oe 判断题 算法只能解决一个问题(说明理由) 1、准确数18精确到个位,2、四舍五入奖3.995精确的百分卫是4.00 市场营销判断题~无差异性市场营销战略完全不符合现代市场营销理论.市场定位、产品定位和竞争性定位分别有不同的含义.企业在市场营销方面的核心能力与优势,会自动地在市场得到表现. proe中怎样在尺寸标注前加半径、直径符号在对圆进行尺寸标注时怎样才能在尺寸前加r ψ 谢谢您了
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘