Skip to content
MisakaTang's Blog
Go back

The Log What every software engineer should know about real-time data's unifying abstraction

Edit page

第一部分: 什么是日志

什么是日志

image-20200428143046866

数据库中的日志

作为一种ACID模型的实现细节,日志的作用:

作为数据库之间的同步的方法 (MySQL主从同步通过日志实现)

分布式系统中的日志

分布式系统的设计核心问题: 如何根据事件发生的顺序在多台机器上更新对应的数据并保持同步

也就是: 使得多台机器都对接收的相同的分布式日志进行相同的操作

日志解决了两个问题:

状态机复制原理

如果两个确定性的进程以相同的状态开始并且以相同的顺序获得相同的输入,则产生相同的输出并且结束在相同的状态(状态机的性质)

日志的目的是排除了输入流中的全部的不确定性,确保处理相同数据的每个节点状态都保持同步

这种方法的好处在于索引日志的时间戳可以作为每个节点状态的唯一ID来表达每个节点的状态

分布式系统中两种复制和处理数据的方法:

主-主模型

主-备模型

这也揭示了为什么记录的顺序是数据一致性的关键:操作的顺序不同就会导致完全不一样的结果(运算顺序不同结果也会不同)

一些分布式一致性协议

日志和表的二象性

把日志类比成银行账户的交易记录的话

所以可以看到日志所能表达的信息量是比表多很多的,但是相对于的存储的成本也高很多

第二部分: 数据集成

数据集成指:一个组织的所有数据对这个组织所有的服务和系统可用

马斯洛的层次需求理论

两个难题

日志结构的数据流

image-20200428160306069

在LinkedIn

大量的数据专用系统:

原先的数据管道架构:

image-20200428163507582

直接使用管道对接数据源的问题:

任何时候任何管道都可能出问题,在坏数据上进行操作只会产生更多坏数据

在实践中意识到的几件事:

  1. 虽然很混乱,但是建立的管道是有价值的
  2. 需要对数据管道更深入的支持才能对数据进行可靠的加载
  3. 数据覆盖率仍然很低

需要的架构: 一个数据源只连接一个单一的管道 ==> kafka

image-20200428163527737

ETL和数据仓库的关系

数据仓库

ETL

数据仓库团队的经典问题

一个更好的形式

image-20200428164628144

日志文件和事件

优势: 支持解耦的事件驱动的系统

构建可伸缩的日志

image-20200428165518804

第三部分:日志与实时流处理

流处理的另一个观点

其实只有很少的公司拥有实时数据流,因为缺少实时的数据收集

在金融领域实时数据流已经成为标准并且流处理已经成为了瓶颈

流处理覆盖了实时响应服务和离线批处理架构之间的差距

日志解决的最大问题是使得多订阅者可以获得实时的数据输入

数据流图

image-20200428172047446

有状态的实时处理

需要在流处理的某个大小的时间窗口内进行更复杂的计数、聚合和关联操作

如何支持类似”表”的东西并将其与处理过程分开:

日志合并

image-20200428173223740

第四部分:系统构建

日志在分布式系统中的地位

日志能做什么:

这也是一个分布式系统所需要做的

如何工作

分为两个逻辑部分:

image-20200428175431735

分布式系统中比较复杂的事

处理方法:

image-20200428175515805

以日志为核心的分布式系统

资料


Edit page
Share this post on:

Previous Post
深入浅出现代Web编程(全栈公开课 2020) 笔记
Next Post
我的周报(3)