熱線電話:13121318867

登錄
首頁精彩閱讀大型互聯網站解決海量數據的常見策略
大型互聯網站解決海量數據的常見策略
2017-12-19
收藏

大型互聯網站解決海量數據的常見策略

大型互聯網站的數據存儲與傳統存儲環境相比不僅是一個服務器、一個數據庫那么簡單,而是由網絡設備、存儲設備、應用服務器、公用訪問接口、應用程序 等多個部分組成的復雜系統。分為 業務數據層、計算層、數據倉儲、數據備份,通過應用服務器軟件提供數據存儲服務,并且通過監控工具對存儲單元監控。

隨著系統中用戶數據量的線性增長,數據量將會越來越多。在這樣一個數據不斷膨脹的環境中,數據已經如洪水般洶涌泛濫。數據查找和調用困難,在海量數據中一些用戶提交的請求往往要等到第二天才能得知結果,直接影響到了用戶滿意度的提升和新業務的布局。在技術上而言,這一特點使得RDBMS在大型應用場景被大幅限制,唯一的可選方案是Scale Out,通過增加多個邏輯單元的資源,并使它們如同一個集中的資源那樣提供服務來實現系統的擴展性。

系統中的數據就好比我們家里的物品,衣服放在衣柜里,碟子放在碗櫥里,數據庫、存儲系統就好比你的衣柜和碗櫥是一個存放的容器,衣服和碟子就好比不同的數據,將不同類型的東西放入合適的存儲空間里面,這樣系統的效率和利用率將會更高,所以我們將會做出如下設計,如圖所示:

對于大型系統存儲單元的結構模型我們分為6個部分組成,清單如下:

1. 業務數據層
各類業務所產生的各種文件類型的數據,其中包含 用戶信息、用戶操作記錄、實時業務數據、手機客戶端升級應用程序、圖片,等。

2. 計算層
針對不同的數據格式、不同類型的數據文件,通過不同的工具、計算方法進行操作,針對大量的數據計算采用一些分布式、并行計算的算法,例如:MapReduce,BSP。并且對一部分的數據進行緩存,緩解對存儲應用服務器的壓力。

3. 數據存儲層
對于海量數據的查詢與存儲,特別是針對用戶行為日志操作,需要使用到一些列式數據庫服務器,對于處理業務和一些業務規則的數據依然存放在關系型數據庫中,將采用MySQL來存儲。

4. 數據倉儲
數據存儲主要是針對于用戶行為日志和用戶行為分析,也是系統中數據量產生較大的一個環節,將會采用Apache Hive、Pig、Mathout 對數據倉儲進行構建。

5. 數據備份
分為在線數據備份和離線數據備份,數據備份環節需要經過運維經驗的積累,根據業務和用戶訪問量進行定制合理的備份規律。

6. 硬件
硬件環境是存儲單元最基礎的部分,分為磁盤、內存、網絡設備存儲,將不同的業務數據、文件存儲在不同的硬件設備上。

技術實現
對于系統不同的業務數據和應用服務器的架構需要采用不同的讀寫方式,以及數據存儲類型存放,數據倉儲構建,數據冷熱分離、數據索引多個部分組成。例如:業務應用程序、日志采集代理、用戶空間文件系統(Filesystem in Userspace)。Data Access Proxy Layer(DDAL/Cache Handler)、OLAP、日志服務器、Oracle(暫定)、MySQL、Redis、Hive、HDFS、Moosefs。

如圖所示:

針對以上設計架構,描述清單如下:

1. Data Access Proxy Layer
統稱數據訪問代理層(簡稱 DAPL),封裝了DDAL和Cache Handler層,抽象的對編寫的應用程序進行了劃分,便于擴展和維護,例如:需要對HDFS或者圖形數據庫操作,上層不需要知道HDFS具體操作,只需要關注提供的接口。DAPL封裝了很多訪問各種數據源的讀寫策略。因此,可以保證對不同數據庫、數據源操作的事務完整性。

2. DDAL
統稱分布式數據訪問層(簡稱 DDAL)主要針對關系數據庫的讀寫分離操作,需要做到讀寫分離,首先需要對傳入的SQL語句進行解析,并且采用Round-Robin算法負載分載對數據大量讀取的操作,在代碼實現中將使用MySQL-JDBC中的參數配置實現對MySQL-Slave的讀取壓力分載。

3. Cache Handler
與DDAL的相似,具體區別在于自己實現了Round-Robin算法負載分載對數據大量讀取的操作,并且能在Redis Master當機的狀態下重新指派新的Master進行寫的操作。

4. Redis一主多從
對緩存數據進行讀寫分離,減少單臺機器的I/O瓶頸,值得一提的是Cache不是可靠的存儲,所以在設計時,需要容許Cache的數據丟失,因此,Cache的數據全部失效時,會從數據庫里重新裝載。

5. MySQL雙主多從
這種方式是MySQL架構設計中最折中的方案,對數據的訪問壓力分載和數據的可靠性都有了相應的保障。前端2臺Master MySQL相互進行數據備份,后端大量的Slave MySQL對Master寫入的數據進行同步,所以每臺機器節點上的MySQL數據庫中的數據都是一致的,并且DDAL應用程序將數據輪詢寫入Master MySQL數據庫中。

6. 數據庫讀寫分離
主要采用mysql的策略,學習MySQL-Prxoy的策略,自己開發對MySQL書籍節點進行讀寫分離的方法,MySQL驅動支持讀寫分離的數據完整性,當數據量超大規模的時候將會采用Sharding策略。

7. 緩存讀寫分離
緩存Redis的策略,采用自己開發的應用程序需要實現Round Robin算法,對Redis Master和Slave緩存集群進行讀寫分離操作。

8. ETL Tools
采用Apache Hadoop項目中的Pig對海量的行為數據進行清洗,Pig可以針對有規律的半結構化數據執行類似SQL的腳本,并且可以將計算壓力分載到每臺服務器上進行分布式、并行處理。

9. Hive集群
針對數據倉庫的建設由Apache Hive進行構建,是一個建立在Hadoop上的數據倉庫框架,它提供了一個方便的數據集成方法和類似SQLHive QL查詢語言,實現了Map/Reduce算法支持在Hadoop框架上進行大規模數據分析。

10. HDFS分布式文件系統
Hive中的數據全部存儲在Hadoop分布式文件系統中,所有被存儲的數據都會有數據的存儲副本,這樣對數據的可靠性有了保障。

11. Moosefs分布式文件系統
與上面提到的HDFS一個文件系統是有區別的,Moosefs不需要任何客戶端程序對分布式文件進行操作的服務器,可以直接與任何運行環境進行對接,而且服務端也有副本復制的功能。

12. 冷熱數據分離
將系統中產生的進行歸類存放,將用戶更多關心、熱門話題等內容 抽象為“最近幾天”的“熱數據”,而越早的數據我們在設計中抽象的分為“冷數據”。由此可見,“熱節點”存放最新的、被訪問頻率較高的數據。對于這部分數據,我們希望能給用戶提供盡可能快的查詢速度,因此無論在硬件還是軟件的選擇上都會有了明顯的區分,例如:最近常訪問頻率高的數據將會存儲在系統緩存中,需要經常性被的業務數據將會存儲在MySQL或者Oracle數據庫系統中,

數據分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數據分析師資訊
更多

OK
客服在線
立即咨詢
日韩人妻系列无码专区视频,先锋高清无码,无码免费视欧非,国精产品一区一区三区无码
客服在線
立即咨詢