BI系统的分布式部署原理和技术实现
1.什么是分布式
關于“分布式系統”的定義,我們先看下書中是怎么說的。《分布式系統原理和范型》一書中是這樣定義分布式系統的:“分布式系統是若干獨立計算機的集合,這些計算機對于用戶來說就像是單個相關系統”。
關于這個定義,我們直觀的感受就是:
首先,這種系統相對來說很厲害,由好幾臺主機組成。以谷歌、亞馬遜等服務商而言,他們的數據中心都由上萬臺主機支撐起來的。
其次,雖然很它很厲害,但對于外人來說,是感覺不到這些主機的存在。也就是說,我們只看到是一個系統在運作。以最近的“亞馬遜 S3 宕機事件”為例,平時,我們壓根不知道亞馬遜所提供的服務背后是由多少臺主機組成,但是等到 S3 宕機才知道,這貨已經是占了互聯網世界的半壁江山了。
從進程角度看,兩個程序分別運行在兩個臺主機的進程上,它們相互協作最終完成同一個服務(或者功能),那么理論上這兩個程序所組成的系統,也可以稱作是“分布式系統”。
當然,這個兩個程序可以是不同的程序,也可以是相同的程序。如果是相同的程序,我們又可以稱之為“集群”。所謂集群,就是將相同的程序,通過不斷橫向擴展,來提高服務能力的方式。
舉一個生活中的例子來說明:
小飯店原來只有一個廚師,切菜洗菜備料炒菜全干。后來客人多了,廚房一個廚師忙不過來,又請了個廚師,兩個廚師都能炒一樣的菜,兩個廚師的關系是集群。
為了讓廚師專心炒菜,把菜做到極致,再請了個配菜師負責切菜,備菜,備料 … , 廚師和配菜師的關系是分布式。
一個配菜師也忙不過來了,又請了個配菜師,兩個配菜師關系是集群。
一個配菜師因故請假了,但是其余的配菜師還是該啥就干啥,只是沒請假的配菜師任務均勻的加量了,但他們的任務和職責是不變的,這是集群。
店里生意很好,當店長接到訂單后,看哪個廚師活兒不重,就將新的訂單分給誰,這就是負載均衡。
集群:多個人在一起做同樣的事 。
分布式 :多個人在一起做不同的事 。
負載均衡:決定將任務以某種規則分給誰做。
2.為什么使用分布式部署
了解了什么是分布式之后,為什么要使用分布部署呢;
首先分布式部署優點很明顯,主要體現在下面4個方面:
系統可用性提升
傳統的集中式計算或集中式存儲在遇見單點故障時很容易造成整個服務不可用,分布式下的服務體系,單臺機器有故障,不致于造成整個服務不可用。
系統并發能力提升
比如雙 11 活動,平時訂單少 50 臺機器就夠了,到了 11 訂單量劇增,服務器增加到 100 臺,每臺機器之間相互獨立,互不影響。
系統容錯能力提升
同一組服務分別部署在北京上海杭州,杭州的機房突發斷電或者火災,杭州機房的流量會被自動分發到北京和上海的機房,不影響用戶使用。
低延遲
參考上一個圖,北京的用戶請求自動分發到北京,上海的用戶請求被分發到上海,服務器會根據用戶的 IP 選擇距離自己最近的機房,降低網絡延遲。
同樣分布式部署帶來好處的同時也會有一些缺點,只要是下面3個方面:
分布式服務依賴網絡
服務器間通訊依賴網絡,不可靠網絡包括網絡延時,丟包、中斷、異步,一個完整的服務請求依賴一連串服務調用,任意一個服務節點網絡出現問題,都可能造成本次請求失敗。
維護成本高
傳統單體式服務只需要維護一個站點就可以。
分布式服務系統被拆分成若干個小服務,服務從 1 變為幾十個上百個服務后,增加運維成本。
一致性,可用性,分區容錯性無法同時滿足
這個是最主要的,這三種特性就是平時說的 CAP 定理,在分布式系統中,這三種特性最多只能滿足兩種,無法同時滿足,需要根據實際情況去調整犧牲掉其中哪個。
3.BI系統的分布式部署原理和技術實現
隨著數據的爆炸性增長,BI系統需要處理的數據越來越多,動輒TB級,甚至PB級,于是服務器宕機,反應遲鈍,查詢緩慢等各種性能問題接踵而來,BI系統的用戶,心里簡直又苦又難~~~
各路BI廠商也意識到這些問題,紛紛推出各種解決方案。
這里提供一種使用分布式部署解決方案。
架構圖如下:
那么分布式部署呢,主要是對ReportWorker,CotWorker,DashboardWorker組件進行橫向擴展,這幾個組件主要是負責儀表板和報表運算的組件,可以部署多個以提供系統的計算性能。
為了降低用戶部署成本,提供了在線的遠程部署方式,UI界面化操作,可以在線添加節點,遠程為每個節點部署需要的組件,以及對節點組件進行在線啟停,進一步降低用戶部署成本。
同時也可以在線的運維管理和系統診斷功能,可以查看系統資源消耗,系統日志下載,方便對BI系統進行運維管理,降低用戶的運維成本。
大家如果感興趣歡迎訪問各種在線demo,體會BI工具為數據可視化帶來的便利:https://www.grapecity.com.cn/solutions/wyn/demo00
總結
以上是生活随笔為你收集整理的BI系统的分布式部署原理和技术实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Django项目--首页静态化
- 下一篇: Django二次开发对接FastDFS