不一样的日志

2018-08-06 11:24:47 浏览数 (1)

日志的概念

这里提的日志并不是应用程序产生的日志,应用程序产生的日志是以一种人类读得懂的方式展示程序运行信息的记录方式,本身不包含任何数据,这篇文章所要描述的日志指的数据系统里的日志,它是一种只增不减,随时间有序的存储抽象。

数据系统可以是关系型数据库,也可以是NoSQL,甚至是版本控制系统。在不同的数据系统,日志有着不同的名字,在Hbase,被称为write-ahead log,在Mysql变成了binlog,版本控制系统,例如SVN,它是一种“snapshot”,名字很多,但本质依然是日志。日志本身是只能增加的,数据会从头到尾开始记录在日志上,拥有着自己的唯一ID,所以程序需要从头到尾的按着顺序读取。日志所关注的时间,并不是一般意义上的物理时间,而是带着因果关系的有序的时间戳。在分布式系统里,由于各个服务器所能依赖的只有网络,网络的不稳定导致了每台服务器的物理时间不能确定事件的发生先后,所以在分布式系统的日志的时间有序不是平常意义的时间有序。

在数据库系统里,我们要区分日志、表和文件的细微区别。文件指的是字节的集合,表是记录的集合,集合本身是可以无序,可以修改的,而日志的载体可以是表,也可以是文件,但是其中存储的数据记录必须时间有序的。

总的而言,日志存储着在某个时刻发生了什么的信息,也就是when和what。

数据库里的日志

在数据库中,日志的作用在于保证数据和索引之间的同步及其持久化。数据库原子性和持久性也来源于日志。

日志会记录整个数据库发生的所有的变化。原子性要求数据可以任意回滚、撤回而不影响数据本身,日志因为会记录各个版本的数据,所以数据库可以在从日志中恢复未发生变化版本的数据,而日志本身不会和系统运行强相关中,在服务器突然发生崩溃时,数据库随时可以从日志中读取的最新版本的数据。

后来,随着系统备份重要性的提升,日志也被当做了数据同步的工具,备份系统可以从主库中抽取数据,自行解析其日志,而不影响主库的运行,完成数据的备份。

分布式系统里的日志

在分布式系统里,日志主要解决了如何保证数据顺序以及数据分布两个问题。为了说明这两个问题,不得不提分布式系统里一个很重要的概念,“State Machine Replication Principle”。 在维基百科里,是这么解释的:

“If two identical, deterministic processes begin in the same state and get the same inputs in the same order, they will produce the same output and end in the same state.”

deterministic表示一个进程本身不依赖于时间,也不依赖于任何外部输入,例如无论何时输入1,1 1这个过程都会返回2,但是例如getNowDays这种类型的函数,它依赖于时间,在每个时间段调用时,返回的结果都是不一样的,所以它是不deterministic的。state指的是数据在机器中保存的状态。所以上面这句话表示的是当你在在调用一个程序时,无论多少次,只要同样的输入顺序会获得同样的结果,“deterministic processing is deterministic”。

分布式系统非常依赖这个原则,只要系统内部各个机器的程序只要在读入相同的日志时都会输出相同的结果,这使得数据可以分布在集群中,而不用担心数据会在不同机器产生不同的结果,并且日志本身具有的时间有序,可以有效的确定一个时间发生的先后顺序。

简而言之,当每台机器都是状态机时,我们可以根据日志从任何时间开始进程,都能保证输出结果的并不会顺着时间发生变化。

日志的种类

在数据库里的日志可以区分为物理日志和逻辑日志两种:

  • 物理日志会记录数据的所有变化;
  • 逻辑日志则是只会记录SQL语句的增删改查对数据的影响。

但在分布式系统里,日志可以理解为两种模型。

  • state machine model认为所有机器都是平等的,用户发送的请求会首先发送到各个服务器,每个服务器上的日志进而发生改变,用户在读取日志时会是从各个服务器进行读取;
  • primary-backup model会将服务器区分为主从两种,用户发送的日志发送改变的请求都由主机接收处理,再由主机同步到日志上,从机再读取日志。
在数据库里相爱相杀的日志和表

在数据库里,日志类似于银行里每一次转账的记录,而表是银行里现有的存款记录。当日志发生改变时,会将发生的变化应用在表上,而表则是记录着最新状态的日志。相反的,当表发生改变时,改变的过程也会如实的记录在日志中,而这份日志保证了数据库可以实现近实时的备份数据。简而言之,表存储着数据,日志记录着变化。

0 人点赞