揭祕“撩”大資料的正確姿勢:生動示例解說大資料“三駕馬車”
我是我:“緣起於美麗,相識於邂逅,廝守到白頭!”
眾聽眾:“呃,難道今天是要分享如何作詩?!”
我是我:“大家不要誤會,今天主要的分享不是如何作詩,而是《揭祕:‘撩’大資料的正確姿勢》,下面進入正題。”
話說當下技術圈的朋友,一起聚個會聊個天,如果不會點大資料的知識,感覺都融入不了圈子,為了以後聚會時讓你有聊有料,接下來就跟隨我的講述,一起與大資料混個臉熟吧,不過在“撩”大資料之前,還是先揭祕一下研發這些年我們都經歷了啥?
緣起:應用系統架構的從 0 到 1
揭祕:研發這些年我們都經歷了啥?
大道至簡。生活在技術圈裡,大家靜下來想想,無論一個應用系統多龐大、多複雜,無非也就是由一個漂亮的網站門面 + 一個醜陋的管理模組 + 一個悶頭幹活的定時任務三大板塊組成。
我們負責的應用系統當然也不例外,起初設計的時候三大模組綁在一起(All in one),線上跑一個 Tomcat 輕鬆就搞定,可謂是像極了一個大泥球。
衍化至繁。由於網站模組、管理平臺、定時任務三大模組繫結在一起,開發協作會比較麻煩,時不時會有程式碼合併衝突出現;線上應用升級時,也會導致其它模組暫時不能使用,例如如果修改了一個定時任務的配置,可能會導致網站、管理平臺的服務暫時不能用。面對諸多的不便,就不得不對 All in one 的大泥球系統進行拆解。
隨著產品需求的快速迭代,網站 WEB 功能逐漸增多,我們起初設計時雄心勃勃(All in one 的單體架構),以為直接按模組設計疊加實現就好了,誰成想系統越發顯得臃腫(想想也是走彎路啦!)。所以不得不改變實現思路,讓模組服務下沉,分散式思想若現——讓原來網站 WEB 一個系統做的事,變成由子系統分擔去完成。
應用架構的演變,服務模組化拆分,隨之而來的就是業務日誌、業務資料散落在各處。隨著業務的推廣,業務量逐日增多,沉澱的資料日益龐大,在業務層面、運維層面上的很多問題,逐漸開始暴露。
- 在業務層面上,面對監管機構的監管,整合提取散落在各地的海量資料稍顯困難;海量資料散落,想做個統計分析報表也非常不易。
- 在運維層面上,由於缺少統一的日誌歸檔,想基於日誌做快速分析也比較困難;如果想從散落在各模組的日誌中,進行呼叫鏈路的分析也是相當費勁。
面對上述問題,此時一個碩大的紅色問號出現在我們面前,到底該如何解決?
面對結構化的業務資料,不妨先考慮採用國內比較成熟的開源資料庫中介軟體 Sharding-JDBC、MyCat 看是否能夠解決業務問題;面對日誌資料,可以考慮採用 ELK 等開源元件。如果以上方案或者能嘗試的方式都無法幫我們解決,嘗試搬出大資料吧。
那到底什麼時候需要用大資料呢?大資料到底能幫我們解決什麼問題呢?注意,前方高能預警,門外漢“撩”大資料的正確姿勢即將開啟。
邂逅:一起撬開大資料之門
槽點:門外漢“撩”大資料的正確姿勢
與大資料的邂逅,源於兩個頭痛的問題。第一個問題是海量資料的儲存,如何解決?第二個問題是海量資料的計算,如何解決?
面對這兩個頭痛的問題,不得不提及谷歌的“三駕馬車”(分散式檔案系統 GFS、MapReduce 和 BigTable),谷歌“三駕馬車”的出現,奠定了大資料發展的基石,毫不誇張地說,沒有谷歌的“三駕馬車”就沒有大資料,所以接下來很有必要逐一認識。
大家都知道,谷歌搜尋引擎每天要抓取數以億計的網頁,那麼抓取的海量資料該怎麼儲存?
谷歌痛則思變,重磅推出分散式檔案系統 GFS。面對谷歌推出的分散式檔案系統 GFS 架構,如 PPT 中示意,參與角色著實很簡單,主要分為 GFS Master(主伺服器)、GFS Chunkserver(塊儲存伺服器)、GFS Client(客戶端)。
不過對於首次接觸這個的你,可能還是一臉懵 ,大家心莫慌,接下來容我抽象一下。
GFS Master 我們姑且認為是古代的皇上,統籌全域性,運籌帷幄。主要負責掌控管理所有檔案系統的後設資料,包括檔案和塊的名稱空間、從檔案到塊的對映、每個塊所在的節點位置。說白了,就是要維護哪個檔案存在哪些檔案伺服器上的後設資料資訊,並且定期通過心跳機制與每一個 GFS Chunkserver 通訊,向其傳送指令並收集其狀態。
GFS Chunkserver 可以認為是宰相,因為宰相肚子裡面能撐船,能夠海納百川。主要提供資料塊的儲存服務,以檔案的形式儲存於 Chunkserver 上。
GFS Client 可以認為是使者,對外提供一套類似傳統檔案系統的 API 介面,對內主要通過與皇帝通訊來獲取後設資料,然後直接和宰相互動,來進行所有的資料操作。
為了讓大家對 GFS 背後的讀寫流程有更多認識,獻上兩首歌謠。
到這裡,大家應該對分散式檔案系統 GFS 不再陌生,以後在飯桌上討論該話題時,也能與朋友交涉兩嗓子啦。
不過這還只是瞭解了海量資料怎麼儲存,那如何從海量資料儲存中,快速計算出我們想要的結果呢?
面對海量資料的計算,谷歌再次創新,推出了 MapReduce 程式設計模型及實現。
MapReduce 主要是採取分而治之的思想,通俗地講,主要是將一個大規模的問題,分成多個小規模的問題,把多個小規模問題解決,然後再合併小規模問題的結果,就能夠解決大規模的問題。
也有人說 MapReduce 就像光頭強的鋸子和錘子,世界上的萬事萬物都可以先鋸幾下,然後再錘幾下,就能輕鬆搞定,至於鋸子怎麼鋸,錘子怎麼錘,那就是個人的手藝了。
這麼解釋不免顯得枯燥乏味,我們不妨換種方式,走進生活真實感受 MapReduce。
鬥地主估計大家都玩過,每次開玩之前,都會統計一副牌的張數到底夠不夠,最快的步驟莫過於:分幾份給大家一起數,最後大家把數累加,算總張數,接著就可以愉快地玩耍啦... ...這不就是分而治之的思想嗎?!不得不說架構思想來源於人們的生活!
再舉個不太貼切的例子來感受MapReduce 背後的運轉流程,估計很多人掰過玉米,每當玉米成熟的季節,地主家就開始忙碌起來。
首先地主將一畝地的玉米分給處於空閒狀態的長工來處理;專門負責掰玉米的長工領取任務,開始掰玉米操作(Map 操作),並把掰好的玉米放到在麻袋裡(緩衝區),麻袋裝不下時,會被裝到木桶中(溢寫),木桶被劃分為藍色的生玉米木桶、紅色的熟玉米木桶(分割槽),地主通知二當家來“收”屬於自己的那部分玉米,二當家收到地主的通知後,就到相應的長工那兒“拿回”屬於自己的那部分玉米(Fetch 操作),二當家對收取的玉米進行處理(Reduce 操作),並把處理後的結果放入糧倉。
一個不太貼切的生活體驗 + 一張畫得不太對的醜圖 = 苦澀難懂的技術,也不知道這樣解釋,你瞭解了多少?不過如果以後再談大資料,知道 MapReduce 這個詞的存在,那這次的分享就算成功(哈哈)。
MapReduce 解決了海量資料的計算問題,可謂是力作,但谷歌新的業務需求一直在不斷出現。眾所周知,谷歌要儲存爬取的海量網頁,由於網頁會不斷更新,所以要不斷地針對同一個 URL 進行爬取,那麼就需要能夠儲存一個 URL 不同時期的多個版本的網頁內容。谷歌面臨很多諸如此類的業務場景,面對此類頭痛的需求,該怎麼辦?
谷歌重磅打造了一款類似以“URL + contents + time stamp”為 key,以“html 網頁內容”為值的儲存系統,於是就有了 BigTable 這個鍵值系統的存在(本文不展開詳述)。
至此,兩個頭痛的問題就算解決了。面對海量資料儲存難題,谷歌推出了分散式檔案系統 GFS、結構化儲存系統 BigTable;面對海量資料的計算難題,谷歌推出了 MapReduce。
不過靜下來想想,GFS 也好、MapReduce 也罷,無非都是秉承了大道至簡、一人掌權、其它人辦事、人多力量大的設計理念。另外畫龍畫虎難畫骨,建議閒暇之餘也多些思考:為什麼架構要這麼設計?架構設計的目標到底是如何體現的?
基於谷歌的“三駕馬車”,出現了一大堆開源的輪子,不得不說谷歌的“三駕馬車”開啟了大資料時代。瞭解了谷歌的“三駕馬車”的設計理念後,再去看這些開源的輪子,應該會比較好上手。
好了,門外漢“撩”大資料就聊到這兒吧,希望通過上文的分享能夠了解幾個關鍵詞:大道至簡、衍化至繁、谷歌三駕馬車(GFS、MapReduce、BigTable)、痛則思變、開源輪子。
白頭:番外篇
扯淡:不妨換一種態度
本文至此也即將接近尾聲,最後是番外篇~
首先,借用日本劍道學習心訣“守、破、離”,希望我們一起做一個精進的人。
最後,在有限的時間內要多學習,不要停下學習的腳步,在瞭解和使用已經有的成熟技術之時,更要多思考,開創適合自己工作場景的解決方案。
文章來源:宜信技術學院 & 宜信支付結算團隊技術分享第6期-宜信支付結算部支付研發團隊高階工程師許賽賽《揭祕:“撩”大資料的正確姿勢》
分享者:宜信支付結算部支付研發團隊高階工程師許賽賽
原文首發於公號-野指標
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69918724/viewspace-2671367/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 大資料告訴你買車的正確姿勢!大資料
- 全面瞭解大資料“三駕馬車”的開源實現大資料
- 開啟醫療資料管理新模式的“正確姿勢”模式
- 資料庫 三大正規化資料庫
- 資料庫三大正規化資料庫
- 美團李凱揭祕資料庫發展三大趨勢 | TiDB Hackathon 評委訪談資料庫TiDB
- 大資料是什麼?大資料的趨勢?大資料
- 資料庫三大正規化 Mysql資料庫MySql
- TiDB 的正確使用姿勢TiDB
- Redis的正確使用姿勢Redis
- git commit 的正確姿勢GitMIT
- 大資料揭祕:學歷真的能改變命運?大資料
- 深度揭祕:大資料時代企業賣技術還是賣資料?大資料
- Postman 正確使用姿勢Postman
- 滴滴大資料揭祕:高溫天部委加班大比拼大資料
- BigDecimal 在資金計算時正確使用姿勢Decimal
- 提意見的正確"姿勢"
- 使用快取的正確姿勢快取
- 擼.NET Core的正確姿勢
- laravel 使用 es 的正確姿勢Laravel
- 使用列舉的正確姿勢
- 開啟Git的正確姿勢Git
- 玩轉 Ceph 的正確姿勢
- 用Python解鎖“吃雞”正確姿勢Python
- 車聯網大資料:你的駕駛軌跡雲知道大資料
- 【工業大資料】工廠大資料之資料來源分析;如何挖掘並駕馭大資料的價值,成為“大資料企業”?大資料
- 2016中國大資料企業排行榜釋出——首席資料官聯盟揭祕中國大資料如何發展大資料
- 資料湖揭祕—Delta Lake
- 什麼是大資料?大資料的產生、特點、用途大資料
- 官方答:在React18中請求資料的正確姿勢(其他框架也適用)React框架
- 解讀mysql的索引和事務的正確姿勢MySql索引
- POLY“三件套”,解鎖混合辦公的正確姿勢
- 原始碼|使用FutureTask的正確姿勢原始碼
- 在vscode使用editorconfig的正確姿勢VSCode
- 虛幻私塾的正確使用姿勢
- MySQL 5.6建索引的正確姿勢MySql索引
- Spring Boot使用AOP的正確姿勢Spring Boot
- 使用 react Context API 的正確姿勢ReactContextAPI