我所读过的最好的一篇分布式技术文章 学习笔记:The Log

前言
这是一篇学习笔记 。
学习的材料来自Jay Kreps的一篇讲Log的博文 。
原文非常长 。可是我坚持看完了,收获颇多,也深深为Jay哥的技术能力、架构能力和对于分布式系统的理解之深刻所折服 。同一时候也由于某些理解和Jay哥观点吻合而略沾沾自喜 。
Jay Kreps是前的 Staff。现任公司的联合创始人和CEO 。Kafka和Samza的主要作者 。
所谓笔记,就是看了文章 。提笔就记 。由于Jay哥本身本章组织的太好,而其本身的科学素质及哲学素质也非常高,所以私以为出彩的东西就不省略了 。
一、资料来源
The Log: What everyknow about real-time data’s
二、笔记 2.1 Log的价值
1) Log是例如以下系统的核心:
2) Log可能跟计算机的历史一样长 。而且是分布式数据系统和实时计算系统的核心 。
3) Log的名字非常多:
4) 不理解Log,你就不可能充分理解
2.2 什么是Log? 2.2.1 概述
记录的顺序定义了这样的一个概念:时间 。
由于越靠左的记录越早 。
Entry的序号能够当作一种时间戳,将记录的顺序当作时间这一概念看起来非常奇怪,可是非常快你就会发现,这样做:能够方便地将“时间”与任一特定的物理时钟解耦 。
Log和常见的文件、表(table)没有那么大的区别 。
这样说,可能你会觉得log如此简单,还有讨论的必要吗?
事实上,log的核心意义在于:
Log记录了何时发生了什么(theywhatand when.) 。
而这一条 。一般是分布式系统最最最核心的东西 。
注意,这里有必要澄清几个概念:
2.2.2 数据库中的Logs
Log的起源不得而知,就像发明二分查找的人,难以意识到这样的发明是一种发明 。
Log的出现和IBM的 R 一样早 。
在数据库中,须要在数据库崩溃时 。保持多种多样的数据结构和索引保持同步 。
为保证原子性和持久性,数据库须要在对数据结构和索引进行改动提交之前 。记录其要改动的内容 。
所以log记录了何时发生了什么 。而每一张表和索引本身,都是这样的历史信息的映射 。
由于log是马上持久化的,所以当crash发生时,其成为恢复其他持久化结构的可靠来源 。
Log从保证ACID特性的一种实现,发展成了一种数据库之间数据复制的手段 。
非常显然 。数据库中发生的一系列的数据变更 。成为数据库之间 保持同步最须要的信息 。
、MySQL、,都包括了log传输协议 。将log的一部分发送到用于保持复制的从数据库(Slave) 。
的和 。将log当作一种通用的数据订阅机制 。以提供给非的数据库订阅数据 。
MySQL和也提供了相似的组件,这些组件是数据系统架构的核心 。
面向机器的Log 。不仅仅可被用在数据库中,也能够用在:
2.2.3 分布式系统中的logs
Log攻克了两个非常重要的分布式数据系统中的问题:
1) 有序的数据变化
2) 数据分布式化
所谓的状态机复制原理(State):
假设两个确定的处理过程,从同样的状态開始,依照同样的顺序 。接收同样的输入,那么它们将会产生同样的输出,并以 同样的状态结束 。
所谓确定的(),是指处理过程是时间无关的,其处理结果亦不受额外输入的影响 。
能够通过非确定的样例来理解:
所谓状态,能够是机器上的随意数据,不管在处理结束后 。是在机器的内存中还是磁盘上 。
同样的输入依照同样的顺序,产生同样的结果,这一点值得引起你的注意 。这也是为什么log会如此重要,这是一个直觉性的概念:假设你将同一个log输入两个确定性的程序,它们将产生同样的输出 。