臉書(Facebook)透過GitHub開源LogDevice,LogDevice是一個分散式的日誌系統,負責儲存並交付日誌。LogDevice能提供大規模高可靠性的各類型日誌,其擁有靈活可調校的能力,能對每個使用案例進行最佳化,讓使用者在耐久性與效率,還有一致性與可用性之間,相互權衡取捨。

LogDevice提供了多種類型的日誌格式,並且使用一種稱為非確定性分散記錄放置(Non-deterministic Decentralized Record Placement )技術,即便叢集中的某些節點嚴重發生問題,LogDevice依然能提供低延遲、高可用性與一致性的資料寫入服務。與其他分散式系統類似,LogDevice會在不同的機器上儲存每筆紀錄的副本,來達到耐久性要求,透過這些副本的放置選項,在叢集中的許多儲存節點發生故障、速度緩慢或磁碟空間不足,只要叢集中部分節點繼續運作,LogDevice仍然可以完成高效能寫入工作負載。

使用者還可以透過分散單一日誌,寫入到所有可用節點以舒緩寫入速率的高峰,相反的,當特定日誌僅限於使用幾個特定節點,則單個日誌的最大資料吞吐量,將受這些節點能力限制,在這之中如果又有節點故障,就可能導致部分日誌所有寫入失敗。

雖然LogDevice設計中並沒有主節點存在,但是卻能提供存在主節點設計相同的靈活度。臉書把日誌紀錄的順序和實際紀錄副本的儲存脫鉤,LogDevice會執行定序器(Sequencer),對要附加到日誌上的每筆紀錄給出單向遞增序號。一旦紀錄有了序號,該筆紀錄的副本就可能被存放在叢集上的任何節點,開發團隊也對存取這些副本做了特殊處理,使得副本放置的方法,並不會影響後續讀取者查看該日誌紀錄的順序。定序器可以在任何方便的機器執行,包括儲存節點、專用於排序的節點,或是只有執行功能的節點。

臉書的LogDevice的日誌儲存在本機硬碟上使用了LogsDB,這是一個寫入資料最佳化的儲存應用,目的在減少硬碟搜尋的次數,並且維持寫入和讀取的I/O模式都是有序的。而LogsDB提供的寫入最佳化,即便分屬不同的檔案或是日誌,LogDevice在寫入資料的時候仍可以維持極高的效率,但這也是犧牲一些存取模式的讀取效率換來的。臉書耕耘許久的RocksDB資料庫,也在LogDevice派上用場,LogsDB建構在RocksDB之上,是一個基於LSM樹的有序耐久鍵值資料儲存應用。

LogDevice日誌提供紀錄一致性保證,多個寫入器可以對同一個日誌並行增加紀錄,所有這些紀錄都能以相同的順序交付給日誌讀取者。LogDevice提供內建的資料遺失檢測報告功能,當偵測到紀錄遺失,LogDevice會遞送錯誤報告給所有相關的讀取者。

LogDevice是臉書從頭開始設計的日誌系統,因此其不只在大規模使用案例中,提供高可靠性和高效率的服務,同時也具高度可調校的特性,能讓使用者針對每個案例進行最佳化,並根據需求在耐久性與效率,或是一致性與可用性之間,互做取捨。臉書提到,LogDevice的靈活性可以勝任不少使用案例,包括一般的耐久性寫入紀錄、分散式資料庫的交易日誌、事件日誌,也可以應用在串流處理、機器學習訓練工作管線中或是複製狀態機等。

熱門新聞

Advertisement