首頁 > 科技

分散式部署那些事

2021-07-07 03:02:44

什麼是分散式

提到分散式,一定就會涉及到集中式,相比於集中式,分散式說明存在很多個節點,各個節點彼此協同工作。

從分散式的概念可以看出,分散式強調彼此的協同,每個節點負責部分工作,比如我們的一個商城系統,可以分成訂單系統,使用者系統,簡訊系統,支付系統等等。從外部來看他們是一個整體,提供一個商城的完整功能。

為什麼會出現分散式

集中式的部署很方便,而且不會有節點網路問題,不會出現不統一的問題,不會出現可用性等問題,雖然集中式有各種各樣的優點,但是面對高併發的時候,面對更大資料請求的時候,顯然單個節點無法滿足要求,這個時候就需要將請求分配到不同的機器節點上,這樣才能讓請求得到正確響應。

程式碼如何編寫

不同於我們寫的集中式編碼方式,在涉及到分散式的時候,我們需要考慮session的共享問題,對於session的共享問題,我們一般通過redis來進行資料的共享。

對於同一個使用者的請求,如果被分配到不同的機器上可能會導致資料的不一致問題,這個時候我們需要考慮讓同一個使用者的請求被同一個節點機器處理,這就需要考慮對使用者的ip做hash處理,讓同一個ip被相同的機器處理。

對於檔案的儲存我們也需要進行處理,我們不能將檔案儲存到各個機器上,我們應該做的是找一個單獨的檔案伺服器進行檔案的儲存管理,不過一般我們都是採用雲物件儲存,這樣所有的靜態資源請求都會由單獨的雲端儲存進行管理,可以進行cdn快取,大大提高了伺服器的負載。

分散式鎖

對於在一個主機上的資源併發訪問,我們可以通過加鎖來解決,但是對於分散式機器上的資源,如果有併發請求的話,我們就需要使用分散式鎖來進行處理。

對於分散式鎖有很多種解決方案,主要是資料庫mysql,分散式排程zooker,記憶體資料庫redis等。

很多情況下,我們都是採用redlock進行分散式鎖的處理。

分散式演算法

提到分散式,離不開的問題就是一致性問題,為了保證資料的一致性,我們就需要通過一定的演算法來實現,而常用的分散式一致性演算法Paxos、Raft。

總結

分散式和我們平時開發集中式的業務有著本質上的區別,原本不會產生問題的地方,因為網路或者其它原因都會產生問題,我們能夠做的就是充分考慮到可能出現的問題,學習別人已經總結出來的演算法和架構,這樣在遇到問題的時候才能有的放矢。


IT145.com E-mail:sddin#qq.com