天天看點

初識分布式系統

為什麼需要分布式系統

相信大家在學習階段學習的demo或者是項目基本上都是單體系統,在自己的一台機器上就可以成功運作了,我自己也是如此.但是無論是面試中或者說随着學習的深入,自己又常常遇到分布式,可是分布式的相關知識在我的腦海中就像蒙上一層霧氣,可以看清輪廓,卻不見其細節,是以自己也打算系統的學習一下.

1.單體結構系統的不足

我們把我們的服務部署在一台伺服器上就可以正常運作了,但是我們可以假設一些場景來說明分布式的重要性

  1. facebook

    Instagram

    等世界級網站每秒可能要承受幾百萬級别的通路,在峰值可能甚至會達到億級别的流量,這種量級的流量一台伺服器承受得了嗎,這麼多使用者的資料一台伺服器能存儲的了嗎?-----這就是高性能問題
  2. 假如

    Facebook

    唯一的那一台伺服器所在的地區停電了或者說那棟樓發生火災了,服務因為不可抗力被終止了,怎麼辦?

    Facebook

    所有的使用者都不能使用了,這是多麼糟糕的使用者體驗,造成的損失是不可估計的!—這就是高可用問題

2.分布式是怎樣解決這些問題的呢?

  1. 高性能:高性能可以指兩個方面,一個是存儲的高性能,一個是計算的高性能.解決的思路都很相似:都是在水準層面來增加更多的機器,然後将計算和存儲的壓力分擔到不同的機器上面,一台機器存儲不了,我們就将資料

    分片(partition)

    ,分别存儲在不同的機器上.如果一個計算運算能力不夠,我們就将大任務分成很多小任務,最後将結果彙總,這就是

    MapReduce

    的基本思想.
  2. 高可用:高可用就是指在整個系統中,即使某個節點某台機器出現了問題,整個系統也不會是以而停止向使用者提供服務,以存儲為例:假設有兩個節點分别存儲不同的資料,張三的使用者資料存在

    Node1

    裡面,如果

    Node1

    突然當機了,這時張三就不能正常通路了,這時我們可以

    備援存儲(Replication)

    ,在

    Node1&Node2

    上都存儲.
初識分布式系統

應用分布式帶來的挑戰

  1. 我們會使用不同的節點提供相同的服務來保證

    高可用

    ,這時候就會帶來一個問題,如果一個請求過來,我們應該選擇那一個節點來為它提供服務了,因為不可能所有節點提供服務的能力都相同.如果選擇一個合适的節點來提供服務.這就是

    負載均衡

  2. 備援存儲(Replication)

    中,不同的節點存儲着相同的資料,如果我們需要對資料進行更新,因為網絡等等原因,有的節點更新的快,有的慢,有的因為網絡沒有接收到更新的請求,這個時候不同的資料就會有短暫的不一緻情況,我們就會需要在

    一緻性(consistency)

    高可用(Availability)

    進行一定的權衡,這裡就會涉及到

    CAP理論

    &

    Raft算法

    等相關知識
  3. 為了提供

    高性能

    ,我們會将一個大的服務拆分成不同的小服務,例如一個商城服務,我們将使用者子產品,商品子產品,下單服務等放在不同機器上,這個時候我們怎麼去調用其他服務呢?因為在不同機器,是以我們就需要使用網絡通信,而因為網絡通信比較複雜,我們希望調用其他遠端服務就像本地方法一樣友善簡單,這就涉及到了**

    RPC

    **相關的知識
  4. 在分布式系統中,我們也需要事務,希望涉及到不同服務的一組操作能夠正常運作.這就又涉及到**

    分布式事務

    **

然後借用網上的一張圖來簡單的概括下一個分布式系統

初識分布式系統

繼續閱讀