分布式存儲原理總結


JVM的啟動

絕大部分的大數據技術都是建立在Java的JVM之上的。所以,我們對JVM的啟動的了解是非常有必要的,當然,我們也不用非常深入的去了解這個,我們只需要把握兩個非常關鍵的點即可:
  1. 我們只能通過java命令來啟動一個JVM,比如:當執行java com.twq.HelloWorld就會啟動一個JVM,然后在這個JVM上執行com.twq.HelloWorld中main方法中的程序代碼
  2. 當啟動的一個JVM需要參數的時候,我們可以通過java命令的參數設置來提供參數。比如,我們可以通過-Xmx300M來設置啟動的JVM的堆內存大小、我們可以通過-cp參數來設置啟動的JVM需要依賴的額外的Java字節碼文件、我們還可以通過-D的方式來設置我們的程序需要的一些參數

 

java -cp C:\\bigdata-course\\workspace\\hdfs-course\\target\\hdfs-course-1.0-SNAPSHOT.jar -Dname=yellow -DsleepDuration=5 -Xmx300m com.twq.basic.launcher.JvmLauncherTest

  當使用java命令啟動了一個JVM之后,執行的是我們指定的主類中的main方法中的程序代碼,這個方法里面的程序可以簡單到只打印Hello World,當然,也可以復雜到任何其他復雜的程序,這個就取決於業務場景了。

RPC

啟動的JVM可以做任何復雜的程序業務,當一個JVM之上的程序業務滿足不了需求的時候,我們可能再需要啟動一個JVM程序或者再啟動多個JVM程序,這些JVM程序之間是需要相互通訊,然后協調的完成業務需求,這個時候就會涉及到了JVM與JVM之間的通訊技術了,就是我們常用的RPC技術
RPC是英文單詞Remote Procedure Call的縮寫,翻譯成中文就是遠程過程調用的意思,其實就是遠程程序的調用執行的意思,RPC是和程序語言沒關系的,絕大部分程序語言都可以支持RPC。如果用在Java語言中,那么RPC的意思就是JVM與JVM之間的通訊了。
RPC技術的基礎是Socket網絡編程,Java語言也是支持Socket編程的,一個服務端程序和一個客戶端程序,這兩個程序是分別不同的兩個JVM中運行的,客戶端所在的JVM可以通過Socket技術向服務端所在的JVM上發送消息,服務端接收消息后就可以處理消息,然后還可以選擇是否將結果返回給客戶端,這個就是一個典型的JVM之間的通訊的場景。
在JVM之間通過Socket進行通訊的時候,當然需要指定協議,客戶端肯定不能發送服務端不能處理的消息吧。客戶端也不能接收不能處理的消息吧。所以基於RPC的技術,服務端金額客戶端之間肯定是會有協議的
當然,在真實的實現RPC的時候,我們不會使用原生的Socket編程,我們會使用對Socket進行了封裝的並且成熟了的工業級RPC框架,比如netty等
分布式存儲原理
分布式存儲解決的就是大量數據存儲的問題了。這個量一般是TB、PB級別
1PB = 1024TB;1TB = 1024GB;1GB = 1024M
如果一個文件的數據量比較小,那么一台機器就可以存儲的下,當這個文件的數據量越來越大的時候,等大到一台機器存儲不下的時候,這個時候就需要分布式的存儲。
比如,我們現在有一個大文件,它的數據量是5PB。這個時候一台機器肯定是存儲不下的。那我們可以將這5PB的數據文件划分成若干個小塊,假設每一個塊的大小是256M,那么5PB的數據文件就被划分成20971520個數據塊了,我們可以將這么多的數據塊分布式的存儲在1000台機器上(假設每台機器的磁盤容量是10TB),大約每一台機器存儲2萬多一點的數據塊。
數據分塊,分布式的存儲在多態機器上,這就是分布式存儲的第一個特點。
假設上面1000台機器中有一台機器掛掉了,那么存在於這台機器上的數據塊都不能對外提供服務了,這樣的話5PB的文件的數據就不完整了。那么為了解決這個問題,我們可以將每一個數據塊再備份一個,然后兩個相同的數據塊分別存儲在不同的機器上,這樣的話一個數據塊所在的機器掛了,那么另一個機器上的相同的數據塊還可以對外提供服務。這樣做就可以容錯了,提高了數據塊的高可用性
數據塊冗余存儲在多台機器以提高數據塊的高可用性,這就是分布式存儲的第二個特點
現在問題又來了,這么多的機器節點以及存儲在機器節點上的這么多數據塊該怎么管理呢?我們可以在另外的一台服務器上啟動一個JVM進程,這個JVM進程就是負責管理所有存儲數據的機器節點以及存儲在這些機器節點上的所有數據塊,如下圖:

 

 

 

 

 

上圖中的Storage master就是負責管理所有的存儲數據的機器以及所有的數據塊,所以在Storage master中會存在:機器節點的信息(Node Info) 以及 數據塊信息(Block Info)
上圖中的Storage slaves就是負責數據塊的存儲,當Storage slaves中的每一個機器啟動了后都會將自己所含有的磁盤容量等信息告訴Storage master機器,當每一個數據塊存儲在某個Storage slave上時都會把自己的信息告訴Storage master機器。
所以分布式存儲的第三個特點就是:遵從主/從(master/slave)結構的分布式存儲集群
這里一定要明白的三點是:
  1. 在Storage master和Storage slave上都是會啟動一個JVM進程,在Storage master機器上,這個JVM進程負責機器節點和數據塊的管理;在Storage slave上的JVM進程負責數據塊的存儲服務
  2. Storage master上的JVM進程和Storage slave上的JVM進程之間的通訊是通過RPC完成的。當然兩個不同Storage slave機器上的JVM進程也是有可能通過RPC進行通訊的(需要將一個數據塊備份,然后將這個備份的數據塊通過RPC傳輸到另一個slave機器中)
  3. 所以說,分布式存儲的基礎就是我們前面講到的兩點:JVM的啟動 以及 RPC。當然我們以后碰到的大數據技術的基礎基本也都是JVM的啟動 以及 RPC

 

總結分布式存儲的特點

  1. 數據分塊,分布式的存儲在多台機器上
  2. 數據塊冗余存儲在多台機器以提高數據塊的高可用性
  3. 遵從主/從(master/slave)結構的分布式存儲集群

分布式存儲中的文件

在遵從主/從(master/slave)結構的分布式存儲集群中,其實存在兩種類型的文件:
  1. 真實存放數據的文件,這類文件都是存儲在slave上的文件,我們稱之為物理文件
  2. 相對於存儲在slave上的文件,那么在master上其實也有一個文件的概念,這個文件不是存儲數據的文件,它是一個邏輯文件,就是用一個文件全路徑名表示,這個文件全路徑名對應着數據塊的存儲信息(數據塊的存儲位置等信息)
  3. 如果這里還沒有理解分布式存儲系統中的物理文件 和 邏輯文件的話,沒有關系,我們在講HDFS的時候會再次提到

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM