分布式部署那些事
什么是分布式
提到分布式,一定就會涉及到集中式,相比于集中式,分布式說明存在很多個節點,各個節點彼此協同工作。
從分布式的概念可以看出,分布式強調彼此的協同,每個節點負責部分工作,比如我們的一個商城系統,可以分成訂單系統,用戶系統,短信系統,支付系統等等。從外部來看他們是一個整體,提供一個商城的完整功能。
為什么會出現分布式
集中式的部署很方便,而且不會有節點網絡問題,不會出現不統一的問題,不會出現可用性等問題,雖然集中式有各種各樣的優點,但是面對高并發的時候,面對更大數據請求的時候,顯然單個節點無法滿足要求,這個時候就需要將請求分配到不同的機器節點上,這樣才能讓請求得到正確響應。
代碼如何編寫
不同于我們寫的集中式編碼方式,在涉及到分布式的時候,我們需要考慮session的共享問題,對于session的共享問題,我們一般通過redis來進行數據的共享。
對于同一個用戶的請求,如果被分配到不同的機器上可能會導致數據的不一致問題,這個時候我們需要考慮讓同一個用戶的請求被同一個節點機器處理,這就需要考慮對用戶的ip做hash處理,讓同一個ip被相同的機器處理。
對于文件的存儲我們也需要進行處理,我們不能將文件保存到各個機器上,我們應該做的是找一個單獨的文件服務器進行文件的存儲管理,不過一般我們都是采用云對象存儲,這樣所有的靜態資源請求都會由單獨的云存儲進行管理,可以進行cdn緩存,大大提高了服務器的負載。
分布式鎖
對于在一個主機上的資源并發訪問,我們可以通過加鎖來解決,但是對于分布式機器上的資源,如果有并發請求的話,我們就需要使用分布式鎖來進行處理。
對于分布式鎖有很多種解決方案,主要是數據庫mysql,分布式調度zooker,內存數據庫redis等。
很多情況下,我們都是采用redlock進行分布式鎖的處理。
分布式算法
提到分布式,離不開的問題就是一致性問題,為了保證數據的一致性,我們就需要通過一定的算法來實現,而常用的分布式一致性算法Paxos、Raft。
總結
分布式和我們平時開發集中式的業務有著本質上的區別,原本不會產生問題的地方,因為網絡或者其它原因都會產生問題,我們能夠做的就是充分考慮到可能出現的問題,學習別人已經總結出來的算法和架構,這樣在遇到問題的時候才能有的放矢。