tft每日頭條

 > 科技

 > 大數據信息導論論文

大數據信息導論論文

科技 更新时间:2024-08-14 15:16:05

日志是什麼

在中文互聯網上,無論是用谷歌搜索還是用百度搜索,講述日志的文章寥寥無幾。畢竟日志這個概念太簡單,簡單到不禁讓大家忽視了它。大道至簡,我想這四個字用在日志這個概念身上是很貼切的。

首先,日志是什麼?這裡的日志指的是隻能增加的,完全按照時間排序的一系列記錄。就像下圖一樣:

大數據信息導論論文(日志--被大數據時代遺忘的奠基石)1

真的是不能再簡單的一個概念了。新的記錄隻能添加日志的最後,讀取日志時可以從最左邊的最舊的一條記錄依次讀到最右邊的最新的一條記錄。

日志的概念很容易和開發人員為了記錄應用程序狀态的日志弄混淆。開發人員為了記錄應用程序狀态的日志,用 Kreps 的話來說,這是一種“應用日志記錄”,而這篇文章提到的日志更像是一種“數據日志”,是記錄數據變化狀态的。

數據庫的奠基石

日志的概念第一個的應用領域是數據庫,當然按照曆史來說,數據庫才是日志概念的發明者,具體是誰發明已不可知了,可能發明者覺得日志這個概念太過簡單而不屑于記錄,畢竟誰也沒想到日志這個概念會脫離于數據庫,而成為數據領域的“基石”。

數據庫裡的日志有 Undo 日志、Redo 日志和 Undo/Redo 日志三種,最常用的日志當然是 Redo 日志。Redo,可以理解為可回放、可重複的意思,在數據庫裡的含義就是隻要知道日志上記錄的對應的數據庫某個初始狀态,便可以通過日志回放出數據庫任意時刻的狀态。想一想,數據庫一旦有了這個特性,那麼意味着隻要日志不丢失、不損壞,無論數據庫出了什麼故障,我們都可以依賴日志恢複。

除了故障恢複外,很快人們就發現日志也可以用來做數據同步。無論是哪一個關系型數據庫,都依賴于日志作為主庫向備份庫的同步數據的樞紐,當然也不僅僅用于主備同步,異構數據庫也可以依賴這個日志,簡單的進行解析轉換從而實現數據同步。

分布式算法的誕生

日志不僅僅在關系型數據庫領域大肆擴張,而且在分布式算法領域也占據了一席之地。也許你會問,日志這個簡單的東西怎麼和高大上的分布式算法扯在了一塊?且聽我慢慢說來。

日志有一個很重要的特性:按順序記錄的狀态變化。依賴于這個特性,我們可以進行不同的異構數據庫之間數據分發。再次強調一遍:日志可以用來記錄狀态變化和用做數據分發。分布式系統的核心問題是什麼?讓系統内的各個節點有着同樣的狀态變化,達成一緻的共識。通俗來講就是,團體内個體都有着同一個理念才會形成團體,要是理念不同,那這個團體也就散夥了。

前面已經提到了,如果兩個系統都按照同一份日志的同一刻的狀态回放,那麼兩個系統最後得到的結果肯定是一樣的。那麼推廣到分布式系統内部的不同節點,也是一樣的道理:隻要所有節點都有着同樣的初始狀态,那麼按照日志回放,那麼所有節點最終就會達到同樣的結束狀态,算不算某種程度上的共識呢?雖然分布式系統裡經常會遇上各種各樣的不确定性的問題,比如網絡崩潰、機器故障,但是日志給與了分布式系統一個确定性的東西:隻要老老實實的按照日志回放狀态,那麼得到的結果一定是确定的。也就是“确定性的過程導緻了确定性的結果”。

這有點像宿命論,但是分布式系統在不确定性的世界找到了确定性的東西,并以此作為錨點,在一大堆不可靠的機器上面構建了一套可靠的系統。或許這就是計算機的美妙。

課外拓展:

上面提到的實際上就是狀态機複制原理:如果兩個相同的、确定性的進程從同一狀态開始,并且以相同的順序獲得相同的輸入,那麼這兩個進程将會生成相同的輸出,并且結束在相同的狀态。

以日志為核心的分布式算法有 Paxos 、Raft 等等。

當然,應用到生産環境不可能像上文提到的那麼簡單,還需要做非常多的努力。

實時計算裡的日志

2018年出了一本新書 Streaming Systems 是關于實時計算的,基本上把實時計算遇到的問題都在理論上解決了,其中幾章是關于流表二象性的。所謂流表二象性,指的是不斷變化的數據流和數據庫裡的靜态的表本質上同一種的東西。隻不過我們從不同的角度去觀察,看到了不同的樣子,從而以為它們兩個是不同的東西。這和物理學裡的波粒二象性,有着異曲同工之妙,光既是波,也是粒子,至于它到底是波還是粒子,取決于你觀察的角度。

Streaming Systems 論證流表二象性的一個核心的論證點就是日志。以數據庫為例,當數據庫裡的表發生變化時,這些變化實際上是可以按順序記錄在日志上的,日志上動态的,像流一樣不斷變化。數據庫可以依賴于日志,回放出任意狀态的表,表是靜态的,記錄了某一刻的狀态。是不是隐約有那麼一種感覺了,所謂表就是不斷複現日志上面狀态的結果集,流則是表的變化記錄。随着日志的不斷回放,流的變化聚合成表,而表的變化過程就是流。

通俗來講,表是靜态的數據,流是動态的數據。至于你認為數據是什麼,取決于你的觀察角度,要是你看到的是某一時刻的數據,那麼它就是表,要是你是持續不斷的觀察,那麼你看到的就是流。

基于這個觀念,演化出了 Streaming SQL ,并直接成為了 Flink 和 Spark Structure Streaming 的理論基礎。

大家要是感興趣的話,可以讀下《Streaming Systems》這本書,寫的非常之好。

結語

當然,日志不僅僅隻是本文提到的這些應用場景,比如像 Kafka 就是受了日志的概念啟發而誕生的,并且日志的概念也可以作為微服務之間保證數據一緻性的樞紐,諸如此類,就不在本文一一細說了。

回到前面提過的問題,為什麼筆者會認為日志這個概念如此重要呢?

  • 日志是數據庫的奠基石,而數據庫在互聯網世界的重要性不用多提了,要是沒有數據庫,你在手機上玩的任何遊戲,閱讀的各類小說甚至你的操作系統都不會存在;
  • 其次,日志這個概念啟發了分布式算法,而分布式系統的核心就在于分布式算法,至于分布式系統本身就是大數據的基礎,大數據喂養了人工智能;
  • 進入5G時代中的物聯網時代,我們會越來越強調實時分析、實時計算,而 Streaming SQL 讓實時計算不再複雜,簡單到一個不懂技術的業務也能分析到實時的數據。Streaming SQL 的背後就是日志這個簡單的概念。
  • 。。。

篇幅和能力所限,最後,讀者要是因為本文而對日志這個概念感興趣的話,再次強烈推薦 Jay Kreps 寫的《The Log: What every software engineer should know about real-time data's unifying abstraction》,本文很多思路也都來源于這篇文章。

感謝 Jay Kreps !

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved