這樣的事情經(jīng)常在各個互聯(lián)網(wǎng)公司發(fā)生,我以電商系統(tǒng)舉一個簡單的例子,A系統(tǒng)是一個活動運營頁面,給用戶抽取優(yōu)惠券,B系統(tǒng)是用戶的訂單系統(tǒng),我們常常遇到這樣的場景,當進行一場運營活動的時候,A系統(tǒng)的流量非常的大,最后把整個系統(tǒng)都拖垮了,造成用戶無法正常下單購買。
可能有人就會問,我們通常不是把活動系統(tǒng)跟訂單系統(tǒng)分開部署了么?怎么還會引起服務雪崩呢?
這是我們常見的系統(tǒng)部署的例子,雖然我們把不同的系統(tǒng)進行分開部署,但卻把流量入口跟數(shù)據(jù)庫部署在同一個模塊,所以,但數(shù)據(jù)庫過載或者Proxy過載的時候,仍然無法有效的保護系統(tǒng)。
隔離設計
每一位架構師、程序員、運維工程師都必須懂得隔離設計,隔離設置,源于輪船的設計,在輪船設計中,我們常常會設計多個船艙,每個船艙都是獨立的空間,這樣子,當輪船在行駛過程中,即便某個船艙遭受破壞進水,也有船艙能夠正常工作。從而保證整個輪船不會沉沒。
在分布式系統(tǒng)中,隔離設計的實現(xiàn)有兩種不同的方式,一是系統(tǒng)隔離,二是用戶隔離。
系統(tǒng)隔離
在分布式系統(tǒng)中,我們常常把不同的模塊部署到不同的機器上面,避免不同的模塊彼此之間受到影響。(每臺計算機的資源都是有限的,特別是IO密集型、CPU密集型的模塊,容易拖垮其他業(yè)務)。除此之外,我們還要對底層的存儲與上層的接入層進行分離。在實際的應用中,我們通常會對不同的不同業(yè)務的存儲進行數(shù)據(jù)庫拆分,而在接入層,常常為了節(jié)約成本,而使用限流設計。
用戶隔離
另外一種方式,我們常常根據(jù)用戶進行隔離,不同的用戶訪問不同的運行實例。這種在大型互聯(lián)網(wǎng)公司也是非常常見的。例如阿里巴巴有北京、上海、杭州、深圳等多個不同的數(shù)據(jù)中心,不同的用戶訪問不同的系統(tǒng)實例。
不同的用戶群訪問不同的實力群,可以讓隔離做的更加徹底,但同時也是伴隨著非常大的挑戰(zhàn)。我們會面臨著存儲、不同實例間的通信等多種問題,我們后面會再次進行分析跟學習,歡迎大家關注我。
總結
好了,今天我們介紹到這里,隔離設計,可以讓我們的系統(tǒng)更加穩(wěn)定,無論是程序員、架構師、還是運維,都是必備的計算機專業(yè)知識。歡迎大家關注我,整理后會和大家繼續(xù)分享。大家的支持是我繼續(xù)嘮嗑的動力。同名公眾號(沙茶敏碎碎念)






