本文首發於一世流雲的我的博客: https://www.tpvlog.com/articl...
《分佈式系統從理論到實戰系列》是我寫的第三個專欄,也將會是涵蓋面最廣、知識點最複雜的一個專欄。我一直在思考怎樣才能將分佈式相關的知識系統化的闡述出來,網絡上有不少關於分佈式的文章、視頻、書籍,但要麼過於零散,要麼泛泛而談,不多看到有能系統、全面、深刻淺出的闡述和概括實際工做中用的各類分佈式知識和框架的系列文章。算法
雖然分佈式涉及的東西確實很是龐雜,但我認爲仍是能夠系統的經過文章由面到點的闡述出來的,由於咱們工做中用到的分佈式技術其實就那麼幾種,剩下的就是在實戰中積累經驗,坑踩得多了,經驗纔會豐富。我寫這個系列的過程自己也是一個不斷自我學習、總結概括的過程,每一個知識點和每一個框架的介紹都參考了很是多的文章、書籍,也感謝前人的總結概括,我後面也會列出我認爲一些比較好的書籍供讀者參考。緩存
整個系列包含三部分:理論篇、進階篇、實戰篇。咱們先從最基本的「什麼是分佈式系統?」開始。網絡
分佈式系統(Distributed System),對於不少剛接觸的同窗來講,聽到這個詞就會感到畏懼,彷彿以爲這是一類很高深的理論或技術。其實否則,分佈式理論自己當然很晦澀,但通過幾十年的發展,在工業環境應用中已經較爲成熟。架構
許多分佈式框架爲使用者屏蔽了複雜的底層細節,咱們要作的就是掌握基本的分佈式理論,而後對各種分佈式框架的特性和適用場景有全局性的瞭解,最後結合應用實際落地的場景,選擇適合本身的框架,在應用中逐步去了解框架細節,切勿爲了學習而學習,死鑽牛角尖。因此,學習分佈式技術的訣竅無他,惟熟爾。併發
何謂分佈式系統?負載均衡
分佈式系統是由集中式系統演化來的,因此在談分佈式系統以前,不妨先來看下傳統的集中式系統。框架
所謂集中式系統,就是把全部的程序、功能都集中到一臺主機上,從而往外提供服務的單體應用。集中式系統的優勢是便於維護、操做簡單。分佈式
但這樣的系統也有缺陷,不出問題還好,一出問題,就容易形成單點故障,全部功能就都不能正常工做了。另外,集中式系統的性能瓶頸就是單機性能的上限,橫向擴展比較困難。高併發
爲了解決集中式系統存在的缺陷問題,分佈式系統誕生並逐漸演化。關於分佈式系統的定義有不少,這裏引用《分佈式系統原理和範型》中的定義:性能
分佈式系統是若干獨立計算機的集合,這些計算機對於用戶來講就像是單個相關係統。
說的再直白點,分佈式系統就是一組經過網絡進行通訊、爲了完成共同任務而協調工做的計算機節點(Node)組成的系統。系統中的各個節點對於用戶是透明的,用戶感知不到背後的邏輯,就像訪問單個計算機同樣。
分佈式系統的目標就是要解決集中式系統的各類缺陷,實現整個系統的 高性能、 高可用、 可擴展。可是,要實現這三個目標並不容易,由於將系統從集中式拆分紅分佈式,會遇到各類各樣的問題,好比數據的一致性、節點間通訊方式、節點宕機問題等等。因而爲了解決這些問題,誕生出不少分佈式基本理論,好比CAP、一致性哈希、BASE等等。
分佈式理論是分佈式系統可以實現高性能、高可用、可擴展這三個主要目標的基礎。
本部分從應用拆分爲分佈式後遇到的問題出發,介紹解決這些問題背後所依賴的分佈式理論,爲後續學習高性能、高可用、可擴展打下基礎。
本部分主要包含如下文章:
進階篇和理論篇相輔相成,在進階篇中,咱們會以一些分佈式框架爲示例,依然從從高性能、可擴展、高可用三個維度出發講解分佈式理論的落地,以及在運用這些框架時的一些核心關注問題。
進階篇中,咱們不會具體去講某個分佈式框架怎麼使用,可是會羅列出一些比較好的書籍供讀者參考。後續若有須要,也會針對某些分佈式框架作一個專欄講解,好比分佈式MQ。
本部分包含如下文章:
實戰篇部分,咱們會以一個真實的線上系統爲案例,從零開始搭建,期間運用理論篇和進階篇中涉及的各類分佈式框架和理論,逐步完善咱們的應用,以掌握各類分佈式框架的組合應用。
本部分包含如下文章:
TO BE CONTINUED...