華為十年架構師實戰經驗總結:大規模分佈式系統架構與設計實戰

前言

本篇是從程序員到首席架構師十多年職業生涯的實戰經驗總結,系統講解構建大規模分佈式系統的核心技術與實現方法,包含開源的Fourinone系統的設計與實現過程,手把手教你掌握分佈式技術。

通過學習這個系統的實現方法與相關的理論,讀者可快速掌握分佈式系統的理論並設計自己的分佈式系統。

華為十年架構師實戰經驗總結:大規模分佈式系統架構與設計實戰

本篇從分佈式計算的基本概念開始,解剖了眾多流行概念的本質,深入講解分佈式系統的基本原理與實現方式,包括masterslave結構、消息中樞模式、網狀直接交互模式、並行結合串行模式等,以及Fourinone系統的架構、實現分佈式功能的示例。接下來詳細介紹分佈式協調、分佈式緩存、消息隊列,分佈式文件系統、分佈式作業調度平臺的設計與實現方法,不僅包括詳細的架構原理、算法,還給出了實現步驟、核心API、實現代碼。

在大數據、雲計算如火如荼的今天,各類技術產品順應潮流層出不窮。大家是不是有這種感覺: Hadoop還沒學完,Storm 就來了; Storm剛學會安裝配置, Spark、 Hama、Yarn 等又一起出現了;同時國內外各大雲平臺廠商,如Google、亞馬遜、阿里雲等,還在推各自應用開發平....要學習的東西太多了,就是這樣疲於奔命地學,剛學會了某個產品的安裝配置與開發步驟,沒多久它又過時了。

這麼多千姿百態的分佈式技術和產品背後有沒有某些共性的東西呢?能讓我們]換了馬甲還能認出它,讓我們超越學習每個產品的“安裝配置開發”而掌握背後的精髓呢?有沒有可能學一反三,學一招應萬招,牢牢掌握好技術的船舵,穿越一次次顛覆性的技術浪潮?


本篇的目的就是為你揭示分佈式技術的核心內幕,透徹理解其精髓,站在浪潮之巔。

因此,這不是講如何使用Hadoop,而是講如何實現Hadoop的功能,講如何簡化實現分佈式技術核心功能。這是來源於作者十多年來在私企、港企、外包、創業、淘寶、華為等企業打拼,從底層程序員一路走到首席架構師的實戰經驗總結。。

本篇面向千千萬萬戰鬥在一線攻城拔寨的程序員、工程師們,你可以有很多基礎,也可以從頭開始,本篇儘量做到深人淺出和通俗易懂,希望幫助你降低分佈式技術的學習成本,幫助你更容易完成工作任務,更輕鬆地掙錢。

華為十年架構師實戰經驗總結:大規模分佈式系統架構與設計實戰

因為內容實在是太多了,所以小編只把部分知識點截圖出來粗略的介紹了一下,每個小節都有更多細化的內容,希望大家能夠學到知識。

本篇一共分為七個大章節,大家從頭開始閱讀就可以了。

第1章,概述

在概述分佈式核心技術之前,我們有必要先概括闡述一-下分佈式計算、並行計算、雲計算等相關概念,以及市場上流行的相關技術產品,如Hadoop生態體系,然後再結合背景引出我們為什麼要歸納出一個輕量級的分佈式框架。本章為後續章節的背景。本章意在使讀者對分佈式技術話題的前因後果先有所瞭解。

由於只是概述,我們對涉及的分佈式計算概念和Hadoop生態體系只是蜻蜓點水地帶過,目的僅是讓讀者瞭解到這些內容大致是什麼。

第2章,分佈式並行計算的原理與實踐

本章首先講述分佈式並行計算的各種設計模式和原理機制,並進一步說明Fourinone與市場上其他並行計算產品和技術的區別,最後手把手演示大量並行計算案例。

本章講述的分佈式並行計算思想、模式、技巧、實現,與編程語言無關,讀者可以用多臺計算機來嘗試編程。

華為十年架構師實戰經驗總結:大規模分佈式系統架構與設計實戰

第3章,分佈式協調的實現

分佈式協調是分佈式應用中不可缺少的,通常會設立專門的協調者角色,即將多機協調的職責從分佈式應用中獨立出來,以減少系統的耦合性和增強可擴展性。Apache的ZooKeeper、Google的Chubby都是分佈式協調的實現者。Fourinone實際上可以單獨當做ZooKeeper用,它使用最少的代碼實現了ZooKeeper 的所有功能,並且力圖做到功能更強、使用更簡潔。

本章會從設計角度講述分佈式協調系統的實現原理,包括歸納出的API介紹,權限機制介紹,並詳細闡述了在領導者選舉機制上和Paxos算法的區別,最後再結合實踐中的統一配置和集群管理等應用講解demo,讓讀者有更直觀的體會。

第4章,分佈式緩存的實現

本章講述小型緩存、大型分佈式緩存的原理和實現機制,並且講述經典的一致哈希算法原理,以及改進的基於日期key取模和分組算法去做集群負載均衡和擴容,最後講述一個分佈式Session的實現案例,以及相關的配置屬性。

華為十年架構師實戰經驗總結:大規模分佈式系統架構與設計實戰

第5章,消息隊列的實現

本章講述了中間件和消息隊列(MQ)的發展史JMS規範定義的發送/接收、主題訂閱兩種經典消息服務模式的機制原理,並詳細舉例說明如何在Fourinone中實現這兩種經典模式。

第6章,分佈式文件系統的實現

本章講述如何使用FTTP去實現一個分佈式文件系統,包括FTTP的架構原理和遠程文件各種方式的訪問和操作,以及整型數據處理等,包含了每一一步的具體操作,可幫助入門的讀者快速上手。

在FTTP中通過FttpAdapter和FileAdapter實現文件I0的支持。其中,FttpAdapter 提供對遠程文件的操作,FileAdapter 提供對本地文件的操作,兩者的API和使用相似,這裡主要說明FttpAdapter。

華為十年架構師實戰經驗總結:大規模分佈式系統架構與設計實戰

第7章,分佈式作業調度平臺的實現

在前面第2章介紹的分佈式並行計算原理中,我們看到可以將工頭工人程序部署到不同的機器_上運行,然後完成計算。但是,.當這樣的並行計算應用非常多,而我們的機器數量有限時,我們需要排隊依次來使用機器,第一個並行計算應用跑完了,再跑第二個應用,如果第一個並行計算應用只佔部分機器,那麼可以考慮同時跑第二個應用....這就涉及建立-個作業調度平臺去完成。

我們知道Hadoop本身包含了作業調度的部分,按照Hadoop開發規範,開發好一個作業,打包後,Hadoop 會分發到相應的機器上去運行,但是實際上這僅僅是-種任務調度層面的實現,我們還需要資源層面的調度,比如對CPU、內存、帶寬等的分配和管理。

本章會講述調度平臺的設計和實現,包括任務調度和資源調度的實現機制,各種資源調度算法,並以MPI調度器的為例講述一個完整Demo,最後再講述市場上常用的調度實現和框架,比如Torque、Mesos、Yarn 等。

華為十年架構師實戰經驗總結:大規模分佈式系統架構與設計實戰

由於篇幅限制,小編在這裡就不做過多的介紹了,有需要本【大規模分佈式系統架構與設計實戰】技術文檔的小夥伴,就可以轉發關注一下小編,私信小編“學習”來得到獲取方式吧!感謝大家的配合和信任。

現在的架構很多,各種各樣的,如高併發架構、異地多活架構、容器化架構、微服務架構、高可用架構、彈性化架構等,還有和這些架構相關的管理型的技術方法,如 DevOps、應用監控、自動化運維、SOA 服務治理、去 IOE 等等,還有很多。

那什麼是分佈式系統?分佈式系統是支持分佈式處理的軟件系統,是由通信網絡互聯的多處理機體系結構上執行任務的系統。包括分佈式操作系統、分佈式程序設計語言及其編譯系統、分佈式文件系統分佈式數據庫系統等,當然這些也是分佈式的關鍵技術。

使用分佈式系統主要有:

1.增大系統容量。我們的業務量越來越大,而要能應對越來越大的業務量,一臺機器的性能已經無法滿足了,我們需要多臺機器才能應對大規模的應用場景。所以,我們需要垂直或是水平拆分業務系統,讓其變成一個分佈式的架構。

2.加強系統可用。我們的業務越來越關鍵,需要提高整個系統架構的可用性,這就意味著架構中不能存在單點故障。這樣,整個系統不會因為一臺機器出故障而導致整體不可用。所以,需要通過分佈式架構來冗餘系統以消除單點故障,從而提高系統的可用性。

3.因為模塊化,所以系統模塊重用度更高

4.因為軟件服務模塊被拆分,開發和發佈速度可以並行而變得更快

5.系統擴展性更高

6.團隊協作流程也會得到改善

分佈式系統的類型有三種:

1.分佈式處理,但只有一個總數據庫,沒有局部數據庫

2.分層式處理,每一層都有自己的數據庫

3.充分分散的分佈式網絡,沒有中央控制部分,各節點之間的聯繫方式又可以有多種,如鬆散的聯接,緊密的聯接,動態的聯接,廣播通知式的聯接等

然後來對比一下單體應用和分佈式架構的優缺點:


華為十年架構師實戰經驗總結:大規模分佈式系統架構與設計實戰


1.從上面的表格可以看到,分佈式系統雖然有一些優勢,但也存在一些問題

2.架構設計變得複雜(尤其是其中的分佈式事務)

3.部署單個服務會比較快,但是如果一次部署需要多個服務,部署會變得複雜

4.系統的吞吐量會變大,但是響應時間會變長

5.運維複雜度會因為服務變多而變得很複雜

6.架構複雜導致學習曲線變大

7.測試和查錯的複雜度增大

8.技術可以很多樣,這會帶來維護和運維的複雜度

9.管理分佈式系統中的服務和調度變得困難和複雜

所以總結一下,分佈式系統架構的難點在於系統設計,以及管理和運維。所以分佈式系統架構在解決了一些問題的同時,也增加了其他的問題,這就需要不斷的再用各種各樣的技術跟手段去解決這些新增的問題。後續會跟上分佈式系統架構的搭建以及使用。

Hadoop偽分佈式集群搭建使用

Hadoop HA 高可用關鍵搭建


分享到:


相關文章: