I ? Logs 第一章 導(dǎo)言

第1章 導(dǎo)言

這是一本關(guān)于日志的書项钮。為什么有人會(huì)寫這么長(zhǎng)的文章來(lái)講日志棒厘?事實(shí)證明檩互,樸素的日志是一種抽象,它是從NoSQL數(shù)據(jù)庫(kù)到加密貨幣的各種系統(tǒng)的核心蓖柔。除了可能偶爾查閱一下日志文件外辰企,大多數(shù)工程師對(duì)日志都沒(méi)有太深的思考。為了解決這個(gè)問(wèn)題况鸣,我會(huì)大致地描述日志在分布式系統(tǒng)中的工作方式牢贸,然后將這些概念實(shí)際應(yīng)用于一些常見(jiàn)用途:數(shù)據(jù)集成,企業(yè)系統(tǒng)架構(gòu)懒闷,實(shí)時(shí)數(shù)據(jù)處理以及數(shù)據(jù)系統(tǒng)設(shè)計(jì)十减。我還將談?wù)撐以贚inkedIn工作期間,有關(guān)數(shù)據(jù)基礎(chǔ)結(jié)構(gòu)系統(tǒng)的工作中愤估,將其中一些想法付諸實(shí)踐的經(jīng)驗(yàn)帮辟。但是在正式開始之前,我還是要解釋一下你可能已經(jīng)了解的內(nèi)容玩焰。

什么是日志由驹?

當(dāng)大多數(shù)人想到日志時(shí),他們想到的可能會(huì)是圖1-1所示的樣子昔园。

圖1-1.Apache日志的摘錄

每個(gè)程序員都對(duì)這種日志很熟悉——一系列松散的結(jié)構(gòu)請(qǐng)求蔓榄,錯(cuò)誤或其他消息(一系列旋轉(zhuǎn)文本文件)。

這種日志是我將要描述的“日志”概念的退化形式默刚。最大的區(qū)別是這類應(yīng)用程序日志主要供人類閱讀甥郑,而我將介紹的日志同時(shí)還需要供程序來(lái)訪問(wèn)。

實(shí)際上荤西,如果你細(xì)思一下就會(huì)發(fā)現(xiàn)澜搅,由人類在單臺(tái)機(jī)器上閱讀日志的想法并不好伍俘。當(dāng)涉及許多服務(wù)和服務(wù)器時(shí),這種方法很快就會(huì)變得難以持續(xù)勉躺。日志的作用很快會(huì)變成根據(jù)輸入查詢或展示圖形癌瘾,以便了解更多機(jī)器上的行為,此時(shí)饵溅,日志文件中的英文文本并不像我將要討論的那種結(jié)構(gòu)化日志那樣合適妨退。

我想討論的日志是一種更為通用,并且更接近數(shù)據(jù)庫(kù)或系統(tǒng)領(lǐng)域中可能稱為“commit log(提交日志)”或“journal(通報(bào))”的概念蜕企。它是按時(shí)間排序的只可追加的記錄序列咬荷,如圖1-2所示。

圖1-2 結(jié)構(gòu)化日志(記錄從0開始編號(hào)轻掩,根據(jù)它們的寫入順序)

每個(gè)矩形代表一個(gè)附加到日志的記錄萍丐。記錄按其添加順序存儲(chǔ)。讀取從左到右進(jìn)行放典。附加到日志的每個(gè)條目都分配有一個(gè)唯一的順序日志條目編號(hào),該編號(hào)是它的唯一鍵基茵。記錄的內(nèi)容和格式在這里并不重要奋构。具體來(lái)說(shuō),我們可以想象每個(gè)記錄都是一個(gè)JSON Blob拱层,當(dāng)然弥臼,任何數(shù)據(jù)格式都可以。

記錄的順序定義了“時(shí)間”的概念根灯,因?yàn)樽髠?cè)的條目定義為比右側(cè)的條目更早径缅。日志條目編號(hào)可以認(rèn)為是條目的“時(shí)間戳”。將這種順序描述為時(shí)間概念起初似乎有些奇怪烙肺,但是它具有與任何特定物理時(shí)鐘解耦的便利特性纳猪。當(dāng)我們討論分布式系統(tǒng)時(shí),此特性將變得至關(guān)重要桃笙。

一個(gè)日志與一個(gè)文件或一張表并沒(méi)有什么不同氏堤。文件是字節(jié)數(shù)組,表是記錄數(shù)組搏明,日志實(shí)際上就是一種表或文件鼠锈,只是其中的記錄要按時(shí)間排序。

與我之前展示的Apache日志相比星著,你可以看到:兩者都是僅追加記錄的序列购笆。但是,重要的是我們將日志視為抽象數(shù)據(jù)結(jié)構(gòu)虚循,而不是文本文件同欠。

基于這一點(diǎn)样傍,您可能會(huì)想:“這么簡(jiǎn)單的事有什么值得談的?” 以何種方式追加記錄序列與數(shù)據(jù)系統(tǒng)有什么關(guān)系行您?答案是日志有特定的用途:它們記錄發(fā)生的情況和時(shí)間铭乾。對(duì)于分布式數(shù)據(jù)系統(tǒng)來(lái)說(shuō),從很多方面看娃循,這都是問(wèn)題的核心炕檩。

數(shù)據(jù)庫(kù)中的日志

我不知道日志概念起源于何處——可能類似于二進(jìn)制搜索,發(fā)明它的人可能會(huì)覺(jué)得太過(guò)簡(jiǎn)單捌斧,以至于無(wú)法意識(shí)到這是一項(xiàng)發(fā)明笛质。它早在IBM的R系統(tǒng)中就已存在。在數(shù)據(jù)庫(kù)中的應(yīng)用與出現(xiàn)崩潰時(shí)保持各種數(shù)據(jù)結(jié)構(gòu)和索引的同步有關(guān)捞蚂。為了讓其具有原子性和持久性妇押,數(shù)據(jù)庫(kù)會(huì)在將一次更改應(yīng)用到任何數(shù)據(jù)結(jié)構(gòu)之前,使用日志寫出即將修改的記錄的有關(guān)信息姓迅。日志就是發(fā)生過(guò)的事情的記錄敲霍,每個(gè)表或索引都是這些歷史記錄對(duì)數(shù)據(jù)結(jié)構(gòu)以及索引的投射。由于日志會(huì)即可生成丁存,因此在發(fā)生崩潰時(shí)肩杈,它將用作還原所有其他持久性結(jié)構(gòu)的權(quán)威來(lái)源。

隨著多年的發(fā)展解寝,日志的使用從ACID數(shù)據(jù)庫(kù)(atomicity 原子性扩然,consistency一致性 ,isolation隔離性和durability持久性)的特性實(shí)現(xiàn)細(xì)節(jié)發(fā)展為在數(shù)據(jù)庫(kù)之間復(fù)制數(shù)據(jù)的方法聋伦。事實(shí)證明夫偶,數(shù)據(jù)庫(kù)中發(fā)生的更改順序正是保持遠(yuǎn)程副本數(shù)據(jù)庫(kù)同步所需的。Oracle觉增,MySQL兵拢,PostgreSQL和MongoDB都包含日志傳送協(xié)議,來(lái)將日志的一部分傳輸?shù)綇膶俚母北緮?shù)據(jù)庫(kù)中逾礁。然后卵佛,從服務(wù)器中將日志所記錄的更改應(yīng)用于本地?cái)?shù)據(jù)結(jié)構(gòu),以保持與主服務(wù)器同步敞斋。Oracle已將日志作為非Oracle數(shù)據(jù)訂閱者的XStreamsGoldenGate產(chǎn)品的通用數(shù)據(jù)訂閱機(jī)制截汪,使其產(chǎn)品化,并且MySQL和PostgreSQL中也存在類似的功能植捎。

事實(shí)上衙解,本書其余大部分內(nèi)容中日志的使用方式都是數(shù)據(jù)庫(kù)中的兩種用法的變體:

  1. 日志用作發(fā)布/訂閱機(jī)制,以將數(shù)據(jù)傳輸?shù)狡渌北?/li>
  2. 日志用作一致性機(jī)制焰枢,用于訂閱要應(yīng)用于的更新多個(gè)副本

也許是由于起源于數(shù)據(jù)庫(kù)內(nèi)部蚓峦,機(jī)器可讀日志的概念尚未廣為人知舌剂,盡管正如我們將看到的那樣,這種抽象是支持各種消息傳遞暑椰,數(shù)據(jù)流和實(shí)時(shí)數(shù)據(jù)處理的理想選擇霍转。

分布式系統(tǒng)日志

對(duì)于所有分布式系統(tǒng),最基本的問(wèn)題之一就是數(shù)據(jù)庫(kù)日志解決的相同問(wèn)題(例如一汽,將數(shù)據(jù)分發(fā)給副本并同意更新順序)避消。

以日志為中心的分布式系統(tǒng)方法源于一個(gè)簡(jiǎn)單的觀察,即我稱之為“狀態(tài)機(jī)復(fù)制”的理論:

如果兩個(gè)相同的確定性過(guò)程召夹,以相同的狀態(tài)開始岩喷,并以相同的順序獲得相同的輸入,則它們將產(chǎn)生相同的輸出并以相同的狀態(tài)結(jié)束监憎。

這似乎有點(diǎn)難理解纱意,所以讓我們深入了解它的含義。

確定性 意味著操作不依賴于時(shí)序鲸阔,同時(shí)也不允許任何其他影響其結(jié)果的輸入存在偷霉。例如,以下情況就符合不確定性的模型:一個(gè)多線程程序褐筛,其輸出取決于線程的執(zhí)行順序腾它;或者一個(gè)程序受對(duì)gettimeofday()函數(shù)的調(diào)用結(jié)果影響,或依賴其他不可重復(fù)的源輸入死讹。當(dāng)然,這些東西是否真的是確定性的曲梗,更多情況還和物理因素有關(guān)赞警。對(duì)我們而言沒(méi)什么關(guān)系,我們對(duì)它們的狀態(tài)和輸入不足夠了解虏两,還無(wú)法將它們的輸出建模為適當(dāng)?shù)臄?shù)學(xué)函數(shù)愧旦。

進(jìn)程的狀態(tài)指的是操作完成后保留在計(jì)算機(jī)內(nèi)存或磁盤中的任何數(shù)據(jù)。

關(guān)于以相同順序獲得相同輸入的部分定罢,必須提醒一下——這就是日志的來(lái)源笤虫。

因此,這實(shí)際上是一個(gè)非常直觀的概念:如果向兩個(gè)確定性代碼段輸入相同的日志祖凫,則它們將以相同的順序產(chǎn)生相同的輸出琼蚯。

分布式計(jì)算的應(yīng)用非常明顯。你可以減少讓所有機(jī)器做一樣的事的問(wèn)題以及實(shí)現(xiàn)一致的日志以將輸入提供給這些進(jìn)程的問(wèn)題惠况。在這里遭庶,日志的作用是從輸入流中杜絕掉所有的不確定性,以確保正在處理此輸入的每個(gè)副本都保持同步稠屠。

一旦你理解了它峦睡,就不會(huì)對(duì)這個(gè)原理感到艱深晦澀:它所表示的僅僅是“確定性的過(guò)程是確定的”翎苫。不過(guò),我認(rèn)為它是用于分布式系統(tǒng)設(shè)計(jì)的更通用的工具之一榨了。

這都不是什么新鮮的技術(shù)煎谍。如果說(shuō)分布式計(jì)算古老到已經(jīng)具備了比較經(jīng)典的方法,那么這些就是龙屉。

但是呐粘,這種基本設(shè)計(jì)模式的含義并未得到廣泛的理解,并且在企業(yè)系統(tǒng)架構(gòu)的應(yīng)用中甚至更少叔扼。

還有一個(gè)好處就是事哭,離散的日志條目號(hào)可以充當(dāng)副本狀態(tài)的時(shí)鐘——你可以用一個(gè)數(shù)字來(lái)描述每個(gè)副本的狀態(tài):已處理的最大日志條目的時(shí)間戳。同時(shí)的兩個(gè)副本將處于相同狀態(tài)瓜富。因此鳍咱,此時(shí)間戳與日志結(jié)合可以唯一地捕獲副本的整個(gè)狀態(tài)。這提供了一個(gè)離散的与柑,由事件驅(qū)動(dòng)的時(shí)間概念谤辜,與機(jī)器的本地時(shí)鐘不同,它可以很容易地在不同機(jī)器之間進(jìn)行比較价捧。

其他以日志為中心的設(shè)計(jì)

根據(jù)日志中的內(nèi)容丑念,如何應(yīng)用此原理有很多變體。例如结蟋,我們可以將傳入請(qǐng)求記錄到服務(wù)中脯倚,并讓每個(gè)副本獨(dú)立處理這些請(qǐng)求∏妒海或者推正,我們可以創(chuàng)建一個(gè)實(shí)例來(lái)處理請(qǐng)求,并記錄服務(wù)響應(yīng)請(qǐng)求所經(jīng)歷的狀態(tài)變化宝惰。從理論上講植榕,我們甚至可以記錄一系列x86機(jī)器指令或需要調(diào)用的方法名稱和參數(shù)以供每個(gè)副本執(zhí)行。只要兩個(gè)進(jìn)程以相同的方式處理這些輸入尼夺,這些進(jìn)程就將在副本之間保持一致尊残。

不同的社區(qū)會(huì)以不同的方式描述相似的模式。數(shù)據(jù)庫(kù)人員通常區(qū)分為物理日志記錄和邏輯日志記錄淤堵∏奚溃基于物理或基于行的日志記錄意味著記錄已更改的每一行的內(nèi)容。邏輯或語(yǔ)句記錄則意味著不記錄已更改的行拐邪,而是記錄導(dǎo)致行更改的SQL命令(insert竞端,update和delete語(yǔ)句)。

在分布式系統(tǒng)文獻(xiàn)中通常將兩者區(qū)分為操作和副本 庙睡。狀態(tài)機(jī)模型 通常是指一個(gè)Active-Active模型事富,在該模型中技俐,我們保留傳入請(qǐng)求的日志,每個(gè)副本以日志順序處理每個(gè)請(qǐng)求统台。如果稍作改變雕擂,選出一個(gè)作為主副本,則可被稱為主從備份模型贱勃。主副本按請(qǐng)求到達(dá)的順序處理請(qǐng)求井赌,并將由于處理請(qǐng)求而發(fā)生的更改記錄到其狀態(tài)中。其他副本則應(yīng)用主副本的狀態(tài)更改贵扰,以便在主副本掛掉時(shí)仇穗,同步并接管主副本。

如圖1-3所示戚绕,在主從備份模型中纹坐,選擇了一個(gè)主副本來(lái)處理所有讀取和寫入操作。每次寫入都會(huì)發(fā)布到日志中舞丛。從副本通過(guò)訂閱日志耘子,將主副本執(zhí)行的更改應(yīng)用于其本地狀態(tài)。如果主副本發(fā)生故障球切,則會(huì)從從屬副本中選擇一個(gè)新的主服務(wù)器谷誓。在狀態(tài)機(jī)復(fù)制模型中,所有節(jié)點(diǎn)都是對(duì)等的吨凑。寫操作首先進(jìn)入日志捍歪,并且所有節(jié)點(diǎn)均按日志確定的順序應(yīng)用寫操作。

圖1-3 在主備份模型中鸵钝,選擇一個(gè)主節(jié)點(diǎn)來(lái)處理所有讀取和寫入糙臼。在狀態(tài)機(jī)復(fù)制模型中,所有節(jié)點(diǎn)都充當(dāng)對(duì)等方蒋伦。

一個(gè)例子

想要了解使用日志構(gòu)建系統(tǒng)的不同方法,我們先來(lái)看一個(gè)小問(wèn)題焚鹊。假設(shè)我們要實(shí)現(xiàn)一個(gè)復(fù)制的算術(shù)服務(wù)痕届,該服務(wù)將維護(hù)一組變量(初始值為零),并對(duì)這些值應(yīng)用加末患,乘研叫,減,除和查詢璧针。我們的服務(wù)將響應(yīng)以下命令:

x? // get the current value of x
x+=5 // add 5 to x
x-=2 // subtract 2 from x
y*=2 // double y

假設(shè)該服務(wù)作為遠(yuǎn)程網(wǎng)絡(luò)服務(wù)運(yùn)行嚷炉,并通過(guò)HTTP發(fā)送請(qǐng)求和響應(yīng)。

如果我們只有一臺(tái)服務(wù)器探橱,則實(shí)現(xiàn)將非常簡(jiǎn)單申屹。它可以將變量存儲(chǔ)在內(nèi)存或磁盤中绘证,并以接收請(qǐng)求的任何順序更新它們。但是哗讥,由于只有一臺(tái)服務(wù)器嚷那,因此我們?nèi)狈θ蒎e(cuò)能力,也沒(méi)有辦法擴(kuò)展服務(wù)范圍(假如我們的算術(shù)服務(wù)很受歡迎)杆煞。

我們可以通過(guò)添加復(fù)制此狀態(tài)和處理邏輯的服務(wù)器來(lái)解決此問(wèn)題魏宽。但是,這帶來(lái)了一個(gè)新問(wèn)題:服務(wù)器之間可能不同步决乎。發(fā)生這種情況的方式有很多队询。例如,服務(wù)器可能以不同的順序接收更新命令(并非所有操作都是可交換的)构诚,或者有的服務(wù)器發(fā)生故障或無(wú)響應(yīng)而錯(cuò)過(guò)更新蚌斩。

當(dāng)然,實(shí)際上唤反,大多數(shù)人只是將查詢和更新推送到遠(yuǎn)程數(shù)據(jù)庫(kù)中凳寺。這樣做確實(shí)可以讓我們的應(yīng)用程序不發(fā)生問(wèn)題,但并不能真正解決問(wèn)題彤侍。畢竟肠缨,現(xiàn)在我們需要解決數(shù)據(jù)庫(kù)中的容錯(cuò)問(wèn)題。因此盏阶,出于示例的考慮晒奕,讓我們直接討論應(yīng)用程序中日志的使用。

使用日志名斟,有好幾種方法可以解決這個(gè)問(wèn)題脑慧。使用狀態(tài)機(jī)副本的方法是,首先將要執(zhí)行的操作寫入日志砰盐,然后讓每個(gè)副本按日志順序應(yīng)用這些操作闷袒。這樣,日志里就要包含一系列命令岩梳,例如“ x + = 5”或“ y * = 2”囊骤。

主從副本的方法也是可行的。在這種設(shè)計(jì)中冀值,我們將選擇其中一個(gè)副本作為主要副本(也叫領(lǐng)導(dǎo)者或母版)也物。這個(gè)主副本將在本地按順序執(zhí)行它所接收到的所有命令,并且記錄執(zhí)行命令所產(chǎn)生的一系列變量值列疗。在這種設(shè)計(jì)中滑蚯,日志僅包含結(jié)果變量值,例如“ x = 1”或“ y = 6”,而不包含產(chǎn)生值的原始命令告材。其余副本將充當(dāng)備份(也叫跟隨者或從屬)坤次;它們訂閱這個(gè)日志,并將新的變量值被動(dòng)地應(yīng)用于其本地存儲(chǔ)创葡。當(dāng)主副本宕機(jī)時(shí)浙踢,我們則從其余副本中選擇一個(gè)新的主副本。

這個(gè)示例清楚說(shuō)明了為什么排序?qū)τ诖_保副本之間的一致性至關(guān)重要:對(duì)加法和乘法命令進(jìn)行重新排序?qū)a(chǎn)生不同的結(jié)果灿渴,就像對(duì)同一變量的兩次更新重新排序一樣洛波。

日志和共識(shí)

分布式日志可以看作是模擬共識(shí)問(wèn)題的數(shù)據(jù)結(jié)構(gòu)。畢竟骚露,日志代表的是產(chǎn)生下一個(gè)值的一系列決策蹬挤。你必須瞥一眼看看Paxos系列算法中的日志,盡管日志構(gòu)建是它們最常見(jiàn)的實(shí)際應(yīng)用棘幸。使用Paxos時(shí)焰扳,通常使用稱為“ multi-paxos”的協(xié)議擴(kuò)展來(lái)完成,該協(xié)議將日志建模為一系列共識(shí)問(wèn)題误续,每個(gè)問(wèn)題對(duì)應(yīng)一個(gè)日志吨悍。該日志在ZAB,RAFT和 Viewstamped Replication等其他協(xié)議中更為突出蹋嵌,它們直接對(duì)維護(hù)分布式一致日志的問(wèn)題進(jìn)行建模育瓜。

我懷疑,我們過(guò)去對(duì)這些東西的看法有些偏頗栽烂,這可能是由于幾十年來(lái)分布式計(jì)算理論已經(jīng)趙越了其實(shí)際應(yīng)用躏仇。實(shí)際上,共識(shí)問(wèn)題有點(diǎn)太簡(jiǎn)單了腺办。計(jì)算機(jī)系統(tǒng)很少需要確定的單個(gè)值焰手,它們幾乎總是處理一系列請(qǐng)求。因此怀喉,日志不是簡(jiǎn)單的單值寄存器而是更自然的抽象书妻。

此外,對(duì)算法的關(guān)注也掩蓋了系統(tǒng)所需的底層日志抽象躬拢。我懷疑我們最終將把重點(diǎn)放在作為商品化構(gòu)建基塊的日志上躲履,而不管其實(shí)現(xiàn)如何纺涤,就像我們經(jīng)常談?wù)摴1硪粯樱槐刭M(fèi)心去弄清楚是線性探測(cè)還是雜項(xiàng)哈希其他一些變體凑阶。日志將變成商品化的界面泪掀,許多算法和實(shí)現(xiàn)相互競(jìng)爭(zhēng)將提供最佳的可靠性和最優(yōu)的性能。

變更日志101:表和事件是一對(duì)

讓我們先回到數(shù)據(jù)庫(kù)诵竭。變更日志和表格之間有一種奇妙的二重性。日志類似于銀行處理的所有借貸操作列表总寻,而表格則是所有當(dāng)前帳戶余額汗销。如果你更改了日志犹褒,則可以應(yīng)用這些更改以創(chuàng)建表并捕獲當(dāng)前狀態(tài)。表格將記錄每個(gè)鍵的最新狀態(tài)(以特定的日志時(shí)間為準(zhǔn))弛针。從某種意義上說(shuō)叠骑,日志是更基本的數(shù)據(jù)結(jié)構(gòu):除了創(chuàng)建原始表之外,您還可以對(duì)其進(jìn)行轉(zhuǎn)換以創(chuàng)建各種派生表削茁。(是的宙枷,表可以為非關(guān)系人員提供鍵控?cái)?shù)據(jù)存儲(chǔ)。)

這個(gè)過(guò)程也可以反向進(jìn)行:如果您對(duì)一個(gè)表進(jìn)行了更新茧跋,則可以記錄這些更改并發(fā)布所有更新到該表狀態(tài)的更改日志慰丛。這個(gè)變更日志正是支持“Near-Real-Time(近實(shí)時(shí))”副本所需要的。從這個(gè)意義上講瘾杭,您可以將表和事件視為一對(duì):表支持靜態(tài)數(shù)據(jù)诅病,日志捕獲更改行為。日志的神奇之處在于粥烁,如果它是更改的完整日志贤笆,則它不僅可以保存表最終版本的內(nèi)容,而且還可以重新創(chuàng)建可能已經(jīng)存在的所有其他版本讨阻。實(shí)際上芥永,它是對(duì)表的每個(gè)先前狀態(tài)的一種備份。

這可能會(huì)使您想起代碼版本控制变勇。源代碼管理與數(shù)據(jù)庫(kù)之間有著密切的關(guān)系恤左。版本控制解決了與分布式數(shù)據(jù)系統(tǒng)必須解決的非常相似的問(wèn)題:管理狀態(tài)的分布式并發(fā)更改。版本控制系統(tǒng)通常需要對(duì)補(bǔ)丁序列進(jìn)行建模搀绣,實(shí)際上就是日志飞袋。你可以直接與當(dāng)前代碼的已檢出快照進(jìn)行交互,這個(gè)快照類似于表链患。請(qǐng)注意巧鸭,在版本控制系統(tǒng)中,就像在其他分布式有狀態(tài)系統(tǒng)中一樣麻捻,復(fù)制是通過(guò)日志進(jìn)行的:更新時(shí)纲仍,您只需拉下補(bǔ)丁并將其應(yīng)用于當(dāng)前快照即可。

最近有人從Datomic贸毕,一家銷售日志數(shù)據(jù)庫(kù)的公司郑叠,看到了其中一些想法。當(dāng)然明棍,這些概念并不是該系統(tǒng)獨(dú)有的乡革,因?yàn)樗鼈円呀?jīng)成為分布式系統(tǒng)和數(shù)據(jù)庫(kù)文獻(xiàn)的一部分已有十多年了。以上這些內(nèi)容看起來(lái)似乎有點(diǎn)偏純理論。不要絕望沸版!我們將快速介紹實(shí)用的內(nèi)容嘁傀。

后續(xù)內(nèi)容

在本書的其余部分中,我將讓你嘗到超越分布式系統(tǒng)或抽象的分布式計(jì)算模型內(nèi)部以外的甜頭视粮,包括:

  • 數(shù)據(jù)集成
    • 使組織的所有數(shù)據(jù)可以輕松地在其所有存儲(chǔ)和處理中使用系統(tǒng)细办。
  • 實(shí)時(shí)數(shù)據(jù)處理
    • 計(jì)算派生數(shù)據(jù)流。
  • 分布式系統(tǒng)設(shè)計(jì)
    • 以日志為中心的設(shè)計(jì)如何簡(jiǎn)化實(shí)際系統(tǒng)蕾殴。

這些應(yīng)用都是圍繞著將日志作為獨(dú)立服務(wù)的思想設(shè)計(jì)的笑撞。

在每種情況下,日志的實(shí)用性都來(lái)自于日志提供的簡(jiǎn)單功能:生成持久的钓觉,可重播的歷史記錄娃殖。令人驚訝的是,前面提到的這些日志的應(yīng)用议谷,其核心都是使多臺(tái)計(jì)算機(jī)以確定的方式以自己的速率回放歷史記錄的能力炉爆。


章節(jié)列表

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市卧晓,隨后出現(xiàn)的幾起案子芬首,更是在濱河造成了極大的恐慌,老刑警劉巖逼裆,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件郁稍,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡胜宇,警方通過(guò)查閱死者的電腦和手機(jī)耀怜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)桐愉,“玉大人财破,你說(shuō)我怎么就攤上這事〈踊澹” “怎么了左痢?”我有些...
    開封第一講書人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)系洛。 經(jīng)常有香客問(wèn)我俊性,道長(zhǎng),這世上最難降的妖魔是什么描扯? 我笑而不...
    開封第一講書人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任定页,我火速辦了婚禮,結(jié)果婚禮上绽诚,老公的妹妹穿的比我還像新娘典徊。我一直安慰自己竟趾,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開白布宫峦。 她就那樣靜靜地躺著,像睡著了一般玫鸟。 火紅的嫁衣襯著肌膚如雪导绷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,050評(píng)論 1 291
  • 那天屎飘,我揣著相機(jī)與錄音妥曲,去河邊找鬼。 笑死钦购,一個(gè)胖子當(dāng)著我的面吹牛檐盟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播押桃,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼葵萎,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了唱凯?” 一聲冷哼從身側(cè)響起羡忘,我...
    開封第一講書人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎磕昼,沒(méi)想到半個(gè)月后卷雕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡票从,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年漫雕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片峰鄙。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡浸间,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出吟榴,到底是詐尸還是另有隱情发框,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布煤墙,位于F島的核電站梅惯,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏仿野。R本人自食惡果不足惜铣减,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望脚作。 院中可真熱鬧葫哗,春花似錦缔刹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)捺典。三九已至,卻和暖如春襟己,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背擎浴。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工员咽, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人贝室。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓仿吞,卻偏偏與公主長(zhǎng)得像档玻,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子茫藏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351