為什麼需要分布式系統
相信大家在學習階段學習的demo或者是項目基本上都是單體系統,在自己的一台機器上就可以成功運作了,我自己也是如此.但是無論是面試中或者說随着學習的深入,自己又常常遇到分布式,可是分布式的相關知識在我的腦海中就像蒙上一層霧氣,可以看清輪廓,卻不見其細節,是以自己也打算系統的學習一下.
1.單體結構系統的不足
我們把我們的服務部署在一台伺服器上就可以正常運作了,但是我們可以假設一些場景來說明分布式的重要性
-
和facebook
等世界級網站每秒可能要承受幾百萬級别的通路,在峰值可能甚至會達到億級别的流量,這種量級的流量一台伺服器承受得了嗎,這麼多使用者的資料一台伺服器能存儲的了嗎?-----這就是高性能問題Instagram
- 假如
唯一的那一台伺服器所在的地區停電了或者說那棟樓發生火災了,服務因為不可抗力被終止了,怎麼辦?Facebook
所有的使用者都不能使用了,這是多麼糟糕的使用者體驗,造成的損失是不可估計的!—這就是高可用問題Facebook
2.分布式是怎樣解決這些問題的呢?
- 高性能:高性能可以指兩個方面,一個是存儲的高性能,一個是計算的高性能.解決的思路都很相似:都是在水準層面來增加更多的機器,然後将計算和存儲的壓力分擔到不同的機器上面,一台機器存儲不了,我們就将資料
,分别存儲在不同的機器上.如果一個計算運算能力不夠,我們就将大任務分成很多小任務,最後将結果彙總,這就是分片(partition)
的基本思想.MapReduce
- 高可用:高可用就是指在整個系統中,即使某個節點某台機器出現了問題,整個系統也不會是以而停止向使用者提供服務,以存儲為例:假設有兩個節點分别存儲不同的資料,張三的使用者資料存在
裡面,如果Node1
突然當機了,這時張三就不能正常通路了,這時我們可以Node1
,在備援存儲(Replication)
上都存儲.Node1&Node2
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL0sGRPpXSE9EMRpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL3Y2NyUTNyUjN4IzMjBzM5YTZzQTYiZTM1M2M2YWYyUzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
應用分布式帶來的挑戰
- 我們會使用不同的節點提供相同的服務來保證
,這時候就會帶來一個問題,如果一個請求過來,我們應該選擇那一個節點來為它提供服務了,因為不可能所有節點提供服務的能力都相同.如果選擇一個合适的節點來提供服務.這就是高可用
負載均衡
- 在
中,不同的節點存儲着相同的資料,如果我們需要對資料進行更新,因為網絡等等原因,有的節點更新的快,有的慢,有的因為網絡沒有接收到更新的請求,這個時候不同的資料就會有短暫的不一緻情況,我們就會需要在備援存儲(Replication)
和一緻性(consistency)
進行一定的權衡,這裡就會涉及到高可用(Availability)
&CAP理論
等相關知識Raft算法
- 為了提供
,我們會将一個大的服務拆分成不同的小服務,例如一個商城服務,我們将使用者子產品,商品子產品,下單服務等放在不同機器上,這個時候我們怎麼去調用其他服務呢?因為在不同機器,是以我們就需要使用網絡通信,而因為網絡通信比較複雜,我們希望調用其他遠端服務就像本地方法一樣友善簡單,這就涉及到了**高性能
**相關的知識RPC
- 在分布式系統中,我們也需要事務,希望涉及到不同服務的一組操作能夠正常運作.這就又涉及到**
**分布式事務
然後借用網上的一張圖來簡單的概括下一個分布式系統