天天看點

《大資料系統建構:可擴充實時資料系統建構原理與最佳實踐》一1.8 技術上的最新趨勢

了解本書中所使用的工具的背景是很有幫助的。技術上的衆多趨勢深深影響着建構大資料系統的方式。

人們已經開始意識到單個cpu運作速度的實體限制。這意味着,如果想擴充到更多的資料,你必須能夠并行化計算。

這導緻了無共享的并行算法及其相應系統的增加,比如mapreduce。不是隻通過購買更好的機器進行擴充(這被稱為垂直擴充),而是通過添加更多的機器進行擴充(這被稱為水準擴充)。

技術上的另一個趨勢是彈性雲在不斷崛起,彈性雲又稱為基礎設施即服務(infrastructure as a service,iaas)。amazon web services(aws)的基礎設施就是最著名的彈性雲。彈性雲允許你根據需求租用硬體,而不是在自己的場地中擁有自己的硬體。彈性雲幾乎可以瞬間讓你增加或減小叢集的大小,是以如果要運作一個大的作業,你就可以臨時地配置設定硬體。

彈性雲大大簡化了系統管理。它們還提供額外的存儲和硬體配置設定選項,可以顯著降低基礎設施的價格。例如,aws有一個被稱為現買現賣(spot instances)的特性,即你對執行個體進行投标而不是支付固定的價格。如果有人出價比你更高,你就會失去該執行個體。因為現買現賣特性可以随時消失,是以它們往往是明顯低于正常價格的執行個體。如mapreduce的分布式計算系統,由于在軟體層處理容錯性,是以它們是很好的選擇。

在過去的幾年裡,開源社群創造了數量龐大的大資料技術。本書中所授的所有技術都是開源且免費使用的。

你将學習五類開源項目。記住,這不是一本調研書—其目的不是隻教一堆技術。你将學習基本原則,以便能夠評估和選擇适合自身需求的工具。

批處理計算系統—批處理計算系統是高吞吐量、高延遲的系統。批處理計算系統幾乎可以做任意計算,但是它們可能需要幾小時或幾天。本書唯一使用的批處理計算系統是hadoop。hadoop項目有兩個子項目:hadoop分布式檔案系統(hadoop distributed file system, hdfs)和hadoop mapreduce。hdfs是分布式的、容錯的存儲系統,可以擴充到pb級别的資料。mapreduce是一個內建了hdfs、水準可擴充的計算架構。

序列化架構—序列化架構為不同語言間使用的對象提供了工具和庫。它們可以将任何語言的對象序列化為一個位元組數組,然後将位元組數組反序列化成任何語言的對象。序列化架構提供了一種模式定義語言(schema definition language)來定義對象和對象的字段,它們為安全地版本化對象提供了機制,這樣不用使現有對象無效就可以形成模式。三個著名的序列化架構是thrift、protocol buffers和avro。

随機通路nosql資料庫—在過去的幾年裡,已經建立了大量的nosql資料庫。如cassandra、hbase、mongodb、voldemort、riak、couchdb等,完全了解它們是比較困難的。這些資料庫都有一個共同點:它們犧牲sql的完整表達,而專注于某些特定類型的操作。它們都有不同的語義,且用于特定的目的。它們不是作為任意的資料倉庫被使用的。在很多方面,選擇使用nosql資料庫,就像在程式中,在散列映射(hash map)、排序映射(sorted map)、連結清單(linked list)或者向量(vector)之間選擇使用資料結構一樣。你事先要知道自己想做什麼,然後恰當地進行選擇。cassandra将被用作我們建構的示例應用程式的一部分。

消息/隊列系統—消息/隊列系統提供了一種方法,以容錯和異步的方式在程序之間發送和使用消息。消息隊列是進行實時處理的一個關鍵元件。本書将使用的是apachekafka。

實時計算系統—實時計算系統是高吞吐量、低延遲、流處理的系統。它們無法進行批處理系統計算範圍内的計算,但它們處理消息非常迅速。本書将使用的是storm。storm拓撲很容易編寫和擴充。

随着這些開源項目的成熟,與之相關的企業已經成形并能提供企業級的支援,例如,cloudera提供hadoop支援,datastax提供cassandra支援,其他項目都是公司産品,例如,riak是basho科技的産品,mongodb是10gen的産品,rabbitmq是springsource的産品—它是vmware的一個部門。