中企動力科技股份有限公司做網(wǎng)站網(wǎng)絡(luò)銷售是干嘛的
為什么需要隔離設(shè)計
隔離其實就是Bulkheads,隔板。在生活中隔板的應(yīng)用主要在船艙中進(jìn)行設(shè)計,目的是為了避免因一處漏水導(dǎo)致整個船都沉下去。可以將故障減少在一定的范圍內(nèi),而不是整個船體。
從架構(gòu)演變來說的話,大多數(shù)系統(tǒng)都是從一個系統(tǒng)進(jìn)行拆分出多個子系統(tǒng),每個子系統(tǒng)之間通過異步通信、HTTP、RPC等方式去完成請求。當(dāng)系統(tǒng)較多的時候,本身就可以利用這種隔離機(jī)制去避免因一個功能導(dǎo)致整個系統(tǒng)的不可用,避免出現(xiàn)多米諾骨牌效應(yīng)。
具體的方式,一是通過按照服務(wù)的種類來分離,二是通過用戶類別分離。
按服務(wù)的種類來做分離
類比一個互聯(lián)網(wǎng)金融平臺來說,就可以劃分成用戶、訂單、支付、三方系統(tǒng)、風(fēng)控系統(tǒng)、大數(shù)據(jù)平臺等。
而每個系統(tǒng)基本都會做服務(wù)冗余,一般的話都是至少3臺服務(wù),這樣才可以做成高可用系統(tǒng)。這種從服務(wù)到數(shù)據(jù)庫層面就可以完全隔離開。接入層,應(yīng)用層,存儲層。也禁止直接訪問其他上下游系統(tǒng)的數(shù)據(jù)庫進(jìn)行數(shù)據(jù)的讀取。最好是通過API的方式提供相關(guān)的數(shù)據(jù)。
雖然好處可以直接隔離開來,但是如果想要獲取多個數(shù)據(jù)的話,需要訪問多個系統(tǒng)進(jìn)行獲取,響應(yīng)時間會增加,但是整體的吞吐量會提升。
并且多個系統(tǒng)之間的通訊不一定完全都是HTTP請求,可能HTTP、RPC、MQ多種方式進(jìn)行通信。所以梳理起來比較雜亂。
我實際的經(jīng)驗就是每個公司的落地方案都是不一樣的,基本都受限于早起的架構(gòu)設(shè)計,然后在此基礎(chǔ)上進(jìn)行迭代。
大多數(shù)公司都是基于這種服務(wù)種類進(jìn)行隔離
按用戶請求來做分離
對于付費類型APP,比如視頻網(wǎng)站,電商網(wǎng)站 可以根據(jù)不同的用戶進(jìn)行提供服務(wù),比如VIP,普通用戶。VIP專屬于特別通道,而普通用戶則直接進(jìn)行共享同一套系統(tǒng)服務(wù),即使出現(xiàn)網(wǎng)站不可用,也不會導(dǎo)致全部用戶服務(wù)不可用。這種其實就是多租戶模式。
對于多租戶架構(gòu)來說,會引入一些系統(tǒng)設(shè)計的復(fù)雜度,完全隔離,資源比較浪費,如果共享,程序設(shè)計上會比較復(fù)雜。
實現(xiàn)方式的話,其實就是服務(wù)是否共享,數(shù)據(jù)是否共享。
- 1.完全獨立的設(shè)計,服務(wù)獨立,數(shù)據(jù)獨立。
- 2.數(shù)據(jù)獨立,服務(wù)共享。
- 3.服務(wù)共享,數(shù)據(jù)也共享。
可以看到,如果服務(wù)和數(shù)據(jù)都獨立,那么隔離度和實現(xiàn)復(fù)雜度比較好,但是占用成本和資源共享度比較高。如果是共享的話,隔離度和共享低。開發(fā)難度比較高。
所以一般采用折中的方案,采用服務(wù)共享,數(shù)據(jù)分區(qū)。而今天可以采用虛擬化技術(shù)來實現(xiàn)物理隔離來降低成本。
隔離設(shè)計的重點
隔離設(shè)計需要考慮以下問題
- **業(yè)務(wù)層面:**我們需要對業(yè)務(wù)足夠了解之后,按照一定的拆分粒度進(jìn)行設(shè)計系統(tǒng),系統(tǒng)過大或者過小都不好。
- **復(fù)雜度層面:**無論是系統(tǒng)板塊還是多租戶的隔離,都需要考慮系統(tǒng)的復(fù)雜度、成本、性能、資源使用的問題,找到一個權(quán)衡的方案,確定哪些不要,哪些需要。
- **高可用設(shè)計層面:**隔離也需要配置一些高可用設(shè)計方案,比如 重試&冪等,限流&排隊,降級&熔斷,異步&隔離等配套使用
- **運維層面:**分布式系統(tǒng)的引入,雖然提升的整體的性能和穩(wěn)定性,但是也因此帶來了更多的問題,比如系統(tǒng)間通訊、運維層面。因此需要配置自動化運維工具,可以使用容器來管理。
- 監(jiān)控系統(tǒng),好的系統(tǒng)一定有一雙眼睛可以實時監(jiān)控系統(tǒng)的所有重要指標(biāo)。這里多說一句,有些人只關(guān)注系統(tǒng)的業(yè)務(wù)數(shù)據(jù)指標(biāo)是否正常,我覺得這并不夠,而要從系統(tǒng)的各個層面去觀測。比如系統(tǒng)層面(CPU、內(nèi)存、磁盤、網(wǎng)絡(luò))中間件層(MySQL、MQ、Redis)應(yīng)用層(JVM)日志層面,監(jiān)控報警等多個角度去觀測。
總結(jié)
好了,今天主要介紹了彈力設(shè)計中,隔離設(shè)計,所謂隔離也不過是通過將系統(tǒng)間進(jìn)行按照一定粒度拆分,故障不會蔓延開來。然后聊了兩種方式一種是系統(tǒng)板塊,另一種多租戶方式。最后說了下隔離設(shè)計的重點。