首頁 Java java教程 分散式的系統核心日誌的詳細介紹(圖文)

分散式的系統核心日誌的詳細介紹(圖文)

Oct 09, 2018 pm 02:29 PM
紀錄

這篇文章帶給大家的內容是關於分散式的系統核心日誌的詳細介紹(圖文),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

什麼是日誌?

日誌就是按照時間順序追加的、完全有序的記錄序列,其實就是一種特殊的檔案格式,檔案是一個字節數組,而這裡日誌是一個記錄數據,只是相對於文件來說,這裡每筆記錄都是按照時間的相對順序排列的,可以說日誌是最簡單的一種存儲模型,讀取一般都是從左到右,例如訊息佇列,一般是線性寫入log文件,消費者順序從offset開始讀取。

由於日誌本身固有的特性,記錄從左向右開始順序插入,也就意味著左邊的記錄相較於右邊的記錄“更老”, 也就是說我們可以不用依賴於系統時鐘,這個特性對於分散式系統來說相當重要。

日誌的應用程式

#日誌在資料庫中的應用程式

日誌是什麼時候出現已經無從得知,可能是概念上來講太簡單。在資料庫領域中日誌更多的是用於在系統crash的時候同步資料以及索引等,例如MySQL中的redo log,redo log是一種基於磁碟的資料結構,用於在系統掛掉的時候保證數據的正確性、完整性,也叫預寫日誌,例如在一個事物的執行過程中,首先會寫redo log,然後才會應用實際的更改,這樣當系統crash後恢復時就能夠根據redo log進行重放從而恢復資料(在初始化的過程中,這個時候不會還沒有客戶端的連線)。日誌也可以用於資料庫主從之間的同步,因為本質上,資料庫所有的操作記錄都已經寫入到了日誌中,我們只要將日誌同步到slave,並在slave重播就能夠實現主從同步,這裡也可以實現許多其他需要的元件,我們可以透過訂閱redo log 從而拿到資料庫所有的變更,從而實現個人化的業務邏輯,例如審計、快取同步等等。

日誌在分散式系統中的應用程式

#分散式系統服務本質上就是關於狀態的變更,這裡可以理解為狀態機,兩個獨立的進程(不依賴於外部環境,例如係統時鐘、外部介面等)給定一致的輸入將會產生一致的輸出並最終保持一致的狀態,而日誌由於其固有的順序性並不依賴系統時鐘,正好可以用來解決變更有序性的問題。

我們利用這個特性來實現解決分散式系統中遇到的許多問題。例如RocketMQ中的備節點,主broker接收客戶端的請求,並記錄日誌,然後即時同步到salve中,slave在本地重播,當master掛掉的時候,slave可以繼續處理請求,例如拒絕寫入請求並繼續處理讀取請求。日誌中不只可以記錄數據,也可以直接記錄操作,例如SQL語句。

日誌是解決一致性問題的關鍵資料結構,日誌就像是操作序列,每一筆記錄代表一條指令,例如應用廣泛的Paxos、Raft協議,都是基於日誌建構起來的一致性協定。

日誌在Message Queue中的應用

#日誌可以很方便的用於處理資料之間的流入流出,每個資料來源都可以產生自己的日誌,這裡資料來源可以來自各個方面,例如某個事件流(頁面點擊、快取刷新提醒、資料庫binlog變更),我們可以將日誌集中儲存到一個叢集中,訂閱者可以根據offset來讀取日誌的每筆記錄,根據每筆記錄中的資料、操作套用自己的變更。

這裡的日誌可以理解為訊息佇列,訊息佇列可以起到非同步解耦、限流的作用。為什麼要說解耦呢?因為對消費者、生產者來說,兩個角色的職責都很清晰,就負責生產訊息、消費訊息,而不用關心下游、上游是誰,不管是來資料庫的變更日誌、某個事件也好,對於某一方來說我根本不需要關心,我只需要專注於自己感興趣的日誌以及日誌中的每筆記錄。

我們知道資料庫的QPS是一定的,而上層應用一般可以橫向擴容,這個時候如果到了雙11這種請求突然的場景,資料庫會吃不消,那麼我們就可以引入訊息佇列,將每個隊資料庫的操作寫到日誌中,由另外一個應用專門負責消費這些日誌記錄並應用到資料庫中,而且就算資料庫掛了,當恢復的時候也可以從上次訊息的位置繼續處理(RocketMQ和Kafka都支援Exactly Once語義),這裡即使生產者的速度異於消費者的速度也不會有影響,日誌在這裡起到了緩衝的作用,它可以將所有的記錄存儲到日誌中,並定時同步到slave節點,這樣訊息的積壓能力能夠得到很好的提升,因為寫日誌都是有master節點處理,讀請求這裡分為兩種,一種是tail-read,就是說消費速度能夠跟得上寫入速度的,這種讀可以直接走緩存,而另一種也就是落後於寫入請求的消費者,這種可以從slave節點讀取,這樣透過IO隔離以及作業系統自帶的一些檔案策略,例如pagecache、快取預讀等,性能可以得到很大的提升。

分散式系統中可橫向擴展是相當重要的特性,加上機器能解決的問題都不是問題。那麼如何實現一個能夠實現橫向擴展的消息隊列呢? 假如我們有一個單機的消息隊列,隨著topic數目的上升,IO、CPU、頻寬等都會逐漸成為瓶頸,性能會慢慢下降,那麼這裡如何進行效能最佳化呢?

1.topic/日誌分片,本質上topic寫入的訊息就是日誌的記錄,那麼隨著寫入的數量越多,單機會慢慢的成為瓶頸,這個時候我們可以將單一topic分為多個子topic,並將每個topic分配到不同的機器上,透過這種方式,對於那些訊息量極大的topic就可以透過加機器解決,而對於某些訊息量較少的可以分到到同一台機器或不進行分區

2.group commit,例如Kafka的producer客戶端,寫入訊息的時候,是先寫入一個本地記憶體佇列,然後將訊息依照每個分區、節點匯總,進行批量提交,對於伺服器端或broker端,也可以利用這種方式,先寫入pagecache,再定時刷盤,刷盤的方式可以根據業務決定,例如金融業務可能會採取同步刷盤的方式。

3.規避無用的資料拷貝

4.IO隔離

結語

#日誌在分散式系統中扮演了很重要的角色,是理解分散式系統各個元件的關鍵,隨著理解的深入,我們發現許多分散式中間件都是基於日誌進行建構的,例如Zookeeper、HDFS、Kafka、RocketMQ、Google Spanner等等,甚至於資料庫,例如Redis、MySQL等等,其master-slave都是基於日誌同步的方式,依賴共享的日誌系統,我們可以實現很多系統: 節點間資料同步、並發更新資料順序問題(一致性問題)、持久性(系統crash時能夠透過其他節點繼續提供服務)、分散式鎖服務等等,相信慢慢的透過實踐、以及大量的論文閱讀之後,一定會有更深層次的理解。

以上是分散式的系統核心日誌的詳細介紹(圖文)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

win10的事件ID 6013是什麼? win10的事件ID 6013是什麼? Jan 09, 2024 am 10:09 AM

win10的日誌可以幫助使用者詳細的了解系統使用情況,很多的使用者在尋找自己的管理日誌的時候,一定都遇到過日誌6013吧,那麼這個程式碼的意思是什麼呢,下面就來介紹一下。 win10日誌6013是什麼:1.這個是正常的日誌。這個日誌的資訊並不是表示你的電腦重啟了,而是說明自從上次啟動以來,系統運行了多長的時間了。日誌會每天12點整出現一次。如何查看系統運作多久了,可以在cmd中輸入systeminfo。其中有一行就是。

日誌記錄器緩衝區大小日誌有什麼用 日誌記錄器緩衝區大小日誌有什麼用 Mar 13, 2023 pm 04:27 PM

作用是:給工程師們回饋使用資訊與記錄方便分析問題(開發時使用的);由於使用者本身不是經常產生上傳日誌,所以對使用者無用。日誌記錄緩衝區是小型的、用於短期儲存將寫入到磁碟上的重做日誌的變更向量的臨時區域。日誌緩衝區對磁碟的一次寫入是來自多個交易的一批變更向量。即使如此,日誌緩衝區中的變更向量也是接近即時寫入磁碟,當會話發出COMMIT語句時,會即時執行日誌緩衝區寫入操作。

解決Win10中的事件7034錯誤日誌問題 解決Win10中的事件7034錯誤日誌問題 Jan 11, 2024 pm 02:06 PM

win10的日誌可以幫助用戶詳細的了解系統使用情況,很多的用戶在尋找自己的管理日誌的時候,肯定都看到過很多的錯誤日誌吧,那麼該怎麼解決他們呢,下面就一起來看看吧。 win10日誌事件7034怎麼解決:1、點擊“開始”打開“控制面板”2、找到“管理工具”3、點擊“服務”4、找到HDZBCommServiceForV2.0右鍵“停止服務”,並改為“手動啟動」

如何在ThinkPHP6中使用日誌 如何在ThinkPHP6中使用日誌 Jun 20, 2023 am 08:37 AM

隨著網路和Web應用的快速發展,日誌管理也越來越重要。在開發Web應用時,如何尋找和定位問題是一個非常關鍵的問題。日誌系統是一種非常有效的工具,可以幫助我們實現這些任務。 ThinkPHP6提供了一個強大的日誌系統,可以幫助應用程式開發人員更好地管理和追蹤應用程式中發生的事件。本文將介紹如何在ThinkPHP6中使用日誌系統,以及如何利用日誌系統

如何在iPhone上的健康應用程式中查看您的用藥日誌記錄 如何在iPhone上的健康應用程式中查看您的用藥日誌記錄 Nov 29, 2023 pm 08:46 PM

iPhone可讓您在「健康」App中添加藥物,以便追蹤和管理您每天服用的藥物、維生素和補充劑。然後,您可以在設備上收到通知時記錄已服用或跳過的藥物。記錄用藥後,您可以查看您服用或跳過用藥的頻率,以幫助您追蹤自己的健康狀況。在這篇文章中,我們將指導您在iPhone上的健康應用程式中查看所選藥物的日誌歷史記錄。如何在「健康」App中查看用藥日誌歷史記錄簡短指南:前往「健康」App>瀏覽「>用藥」>用藥「>選擇一種用藥>」選項「&a

Linux系統查看log日誌指令詳解! Linux系統查看log日誌指令詳解! Mar 06, 2024 pm 03:55 PM

在Linux系統中,可以使用下列指令來查看日誌檔案的內容:tail指令:tail指令用來顯示日誌檔案的末尾內容。它是查看最新日誌資訊的常用命令。 tail[選項][檔案名稱]常用的選項包括:-n:指定要顯示的行數,預設為10行。 -f:即時監視文件內容,並在文件更新時自動顯示新的內容。範例:tail-n20logfile.txt#顯示logfile.txt檔案的最後20行內容tail-flogfile.txt#即時監視logfile.txt檔案的更新內容head指令:head指令用於顯示記錄檔的開頭

了解win10日誌中事件ID455的意義 了解win10日誌中事件ID455的意義 Jan 12, 2024 pm 09:45 PM

win10的日誌有著很多豐富的內容,很多的用戶在尋找自己的管理日誌的時候,肯定都見過事件ID455顯示錯誤,那麼它到底是什麼意思呢,下面就一起來看看。 win10日誌中事件ID455是什麼:1、ID455是訊息儲存開啟日誌檔案時<檔案>發生的錯誤<錯誤>

linux查看日誌的三種指令 linux查看日誌的三種指令 Jan 04, 2023 pm 02:00 PM

linux查看日誌的三種指令分別是:1、tail指令,該指令可以即時查看檔案內容的變更以及日誌檔案;2、multitail指令,該指令可以同時監視多個日誌檔案;3、less指令,指令可以快速查看日誌的更改,並且不會使螢幕混亂。

See all articles