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


在分布式系统的构建中 。意识到这一点 。能够使得:
让全部的机器做同样的事,规约为:
构建分布式的、满足一致性的log系统,以为全部处理系统提供输入 。
Log系统的作用,就是将全部的输入流之上的不确定性驱散,确保全部的处理同样输入的复制节点保持同步 。
这样的方法的最妙之处在于,你能够将索引日志的时间戳,作为全部复制节点的时钟来对待:
通过将复制节点所处理过的log中最大的时间戳,作为复制节点的唯一ID,这样,时间戳结合log 。就能够唯一地表达此节点的整个状态 。
应用这样的方法的方式也非常多:
理论上来讲,我们能够记录一系列的机器指令,或者所调用方法的名称及參数,仅仅要数据处理进程的行为同样 。这些进程就能够保证跨节点的一致性 。
常玩儿数据库的人,会将逻辑日志和物理日志区分对待:
对分布式系统 。通常有两种方式来处理复制和数据处理:
1) Statemodel( - )
2) -back model ( - )
例如以下图所看到的:
为了理解上述两种方式的不同 。来看个简单的样例:
如今,集群须要提供一个简单的服务,来做加法、乘法等算术运算 。
初始,维护一个数字,比方0 。
上面的样例也揭示了,为什么顺序是复制节点之间保持一致性的关键因素 。假设打乱了这些操作的顺序 。就会得到不同的运算结果 。
分布式log,能够当做某些一致性算法的数据结构:
一条log,表征了一系列的关于下一个值是什么的决定 。
2.2.4
从数据库的角度来看 。一组记录数据变化的和表 。是对偶和互通的 。
1) 根据记录了数据变化的log,能够重构某一状态的表(也能够是非关系型存储系统中有key的记录)
2) 相反,表假设发生了变化 。能够将变化计入log 。
这正是你想要的准实时复制的秘籍所在!
这一点和版本号控制所做的事情极为相似:管理分布式的、并发的、对状态进行的改动 。
版本号控制工具,维护了反映改动的补丁,这事实上就是log,你和一个被签出( out)的分支快照进行交互,这份快照就相当于数据库中的表 。
你会发现 。版本号控制与分布式系统中,复制都是基于log的:当你更新版本号时,你仅仅是拉取了反映了版本号变化的补丁,并应用于当前的分支快照 。
2.3 数据集成(Data ) 2.3.1 数据集成的含义
所谓数据集成 。就是将一个组织中的全部服务和系统的数据,变得可用 。
实际上 。对数据进行有效利用 。非常符合马斯洛的层次需求理论 。
金字塔的最底层,是收集数据,将其整合进应用系统中(不管是实时计算引擎,还是文本文件,还是脚本) 。
而这些数据,须要经过转换,保持一个统一、规范、整洁的格式 。以易于被读取和处理 。
当上面的要求被满足后 。就能够開始考虑多种多样的数据处理方式 。比方map –或者实时查询系统 。
非常显然,假设没有一个可靠的、完备的数据流,就仅仅是一个昂贵的、难以整合的加热器(集群非常费电么?) 。
相反,假设能保证数据流可靠、可用且完备,就能够考虑更高级的玩法、更好的数据模型和一致的、更易被理解的语义 。
接着 。注意力就能够转移到可视化、报表、算法和预測上来(挖啊机啊深度啊) 。
2.3.2 数据集成的两个复杂性
事件
事件数据,记录了事件是怎么发生的 。而不仅仅是发生了什么,这一类log通常被当做应用日志,由于一般是由应用系统写入的 。
但这一点 。事实上混淆了log的功能 。