天天看點

《大資料系統建構:可擴充實時資料系統建構原理與最佳實踐》一1.5 大資料系統應有的屬性

你應該使大資料系統努力具備盡可能多的關于複雜性和可擴充性的屬性。大資料系統不僅要運作良好、有效地使用資源,還必須易于推理。下面逐一介紹這些屬性。

面對分布式系統的挑戰,建構“做正确的事”的系統并非易事。盡管會遇到機器随機出現故障、分布式資料庫中一緻性的複雜語義、重複的資料、并發性等問題,但系統仍需能夠正确運作。這些挑戰使得“推斷系統在做什麼”變得很難。使大資料系統具備魯棒性的一部分工作是為了避免這些複雜性(挑戰),以便你能很容易推斷系統(即探索系統)。

正如之前所讨論的,系統必須是可以容忍人為錯誤的。這是系統中經常被忽視的屬性,開發者應予以重視。在生産系統中,偶爾有人出差錯是不可避免的,比如部署錯誤代碼損壞了資料庫中的值。如果你将不變性和重新計算性建構到大資料的核心系統中,那麼該系統通過提供一個清晰、簡單的恢複機制,就能很容易地适應人為錯誤。這些内容将在第2~7章中較長的描述。

一方面,絕大多數的應用程式需要對讀取操作有很低的延遲—這一時間通常是幾毫秒到幾百毫秒;另一方面,更新延遲的需求在不同應用程式之間有着很大的差別。一些應用程式需要更新操作立即傳播,但其他應用程式延遲幾個小時也是可以的。無論如何,大資料系統中如果需要低延遲更新,你就必須能夠實作它。更重要的是,你需要在不影響系統魯棒性的前提下,能夠實作低延遲讀取和更新。本書将從第12章開始介紹如何在速度層實作低延遲更新。

面對資料或負載的增加,可擴充性能夠通過将資源添加到系統中來保持性能。lambda架構在系統堆棧的所有層是水準可擴充的—擴充是通過添加更多的機器來實作的。

一個通用系統可以支援大多數應用程式。事實上,如果本書所述内容沒有推及大多數的應用程式,那麼它不會是非常有用的。因為lambda架構是基于所有資料功能的,可以推廣到所有應用程式,無論是财務管理系統、社交媒體分析、科學應用、社交網絡,還是其他應用。

每次添加相關功能或對系統的工作方式做出一些改變時,你不需要重複勞動。具備可延展性的系統允許以最小的開發成本添加功能。

通常,一個新特性或一個現有功能的改變需要将舊資料遷移成新格式。系統具備可延展性的要素之一就是它容易實作大規模遷移。能夠輕松、快捷地完成大規模遷移,是你将學習的方法的核心。

幾乎每個大型資料集中都有意料之外的值,是以,能夠對資料進行即席(ad hoc)查詢是非常重要的。此外,能夠任意地挖掘資料集為業務優化和新的應用程式也提供了可能。最終,除非你可以問這些資料任意問題,否則你将不能利用資料發現有趣的事情。本書的第6章和第7章在讨論批處理時,将介紹進行即席查詢的方法。

維護是開發人員的重負,它是需要保持系統平穩運作的工作。包括預測什麼時候添加用于擴充的機器、保持程序啟動并運作以及調試生産環境中的任何錯誤。

減少維護的一個重要途徑是選擇實作複雜性盡量低的元件,即依賴底層具有簡單機制的元件。特别是分布式資料庫,它往往有着非常複雜的内部結構。系統越複雜,出錯的可能性就越大,你越需要了解有關系統調試和優化的知識。

通過依靠簡單的算法群組件,來降低實作複雜性,進而實作最少維護。lambda架構采用的一個技巧是:将複雜性推出核心元件,并将其送到幾小時後輸出是可丢棄的系統的片段中。所使用的最複雜的元件,如讀/寫分布式資料庫,在輸出最終是可丢棄的這一層中。本書第12章在讨論速度層時将詳細讨論該技術。

一旦出錯,大資料系統必須提供必要的資訊來調試系統。關鍵是能夠追蹤系統中的每一個值,并能明确該值是如何産生的。

“可調試性”是在lambda架構中通過批處理層的功能特性和盡可能使用重新計算算法來實作的。

将所有這些屬性組合在同一個系統中實作,這看起來是一個令人生畏的挑戰。但從基本原理出發,正如lambda架構做的,這些屬性将從最終的系統設計中自然而然地生成。

在深入介紹lambda架構之前,我們來看更傳統的架構—以依賴增量計算為特征—以及它們無法滿足這些屬性的原因。

繼續閱讀