
在這個(gè)例子中,我們不僅展示了如何看待故障隔離的設計,還說(shuō)明了這種設計的兩個(gè)好處。第一個(gè)好處是,通道堵塞時(shí),不會(huì )妨礙人們從共享房間移動(dòng)到另一. 個(gè)房間。第二個(gè)好處是,每個(gè)人都會(huì )立即知道哪個(gè)房間已經(jīng)滿(mǎn)了。與這個(gè)例子相反的是,每個(gè)房間都連接到一個(gè)共享通道上,通道被阻塞了,就很難判斷是哪個(gè)房間滿(mǎn)了,而從共享房間進(jìn)人這個(gè)共享通道的人口只有一個(gè)。這時(shí)雖然這里的每個(gè)房間都是隔離的,但如果 而且也不能從共享房間旅行到其他房間了。這個(gè)例子也說(shuō)明了故障隔離的架構的第一個(gè)原則。
原則1:什么都不能共享
這一原則過(guò)于極端,從經(jīng)濟上來(lái)說(shuō)不可行。但即使加此,它仍然是故障隔離的架構的起點(diǎn)。如果故障隔離的設計或架構的第一個(gè)原則是絕對不能共事任何東西。當然,對于某些公司來(lái)說(shuō),你想確保產(chǎn)能故障或系統故障不會(huì )引發(fā)多個(gè)系統的問(wèn)題,就需要隔離系統組件。對于某些組件,這樣做也許非常困難,如邊界路由器或網(wǎng)關(guān)路由器。也就是說(shuō),考慮到某些情況下的經(jīng)濟和技術(shù)約束,這條原則應用得越全面,得到的結果就越好。
人們常常會(huì )忽略的方面是URI/URL。例如,考慮為不同的分組使用不同的子域。如果按照客戶(hù)分組,那么可以考慮采用custl allscale.com到custNallscale.com,依此類(lèi)推。理想狀況下,域分組也涉及隔離的Web服務(wù)器和應用服務(wù)器以及那個(gè)URI/URL專(zhuān)用的數據庫和存儲。如果經(jīng)濟因素允許而又有相應的需求,那么你應該采用專(zhuān)門(mén)的負載均衡器、DNS和訪(fǎng)問(wèn)交換機。
如果你劃分了兩條泳道卻讓它們與一個(gè)共享數據庫通信,那么從全局來(lái)看它們仍然是一個(gè)泳道。也許從服務(wù)角度看,你有兩個(gè)較小的故障隔離區域(如應用服務(wù)器),當一個(gè)應用服務(wù)器發(fā)生故障時(shí),這種方法是有幫助的,但如果數據庫發(fā)生了故障,那么這兩個(gè)服務(wù)泳道都會(huì )停機。
原則2:什么都不能跨過(guò)泳道邊界
在設計故障隔離的系統時(shí),還有一個(gè)重要的原則。如果你有同步通信的系統,甚至是有異步通信的系統,那么它們就可能引發(fā)潛在的故障。雖然異步通信的系統引發(fā)這種故障的可能性較小,但在需求極大的場(chǎng)景中,超時(shí)設置不足以完成整個(gè)通信流程時(shí),它們也會(huì )引發(fā)大量問(wèn)題。
你不能構建了一個(gè)故障隔離的區域,同時(shí)卻讓這個(gè)區域與區域之外的東西通信?;叵胍幌挛覀兡莻€(gè)混凝土房間的比喻,混凝土房間和它們的通道是故障隔離的區域或域。大的共享房間是Intemet。如果不返回桌子所在的位置(我們的瀏覽器),然后選擇另一條通道,是不能從一個(gè)房間進(jìn)人另一個(gè)房間的。這樣我們就能知道瓶頸或問(wèn)題所在的確切位置,然后找出處理這些問(wèn)題的方法。
不同區域之間的任何通信以及我們上述場(chǎng)景中的任何通道之間的通信,都可能使故障隔離出現問(wèn)題。一個(gè)通道中堆滿(mǎn)了人,不僅可能引發(fā)這個(gè)通道的問(wèn)題,還可能引發(fā)通過(guò)其他通道連接的房間的問(wèn)題。如果沒(méi)有全面的診斷,我們怎么能輕松地發(fā)現問(wèn)題到底發(fā)生在哪里呢?反過(guò)來(lái),任何一個(gè)房間堆滿(mǎn)了人,也可能會(huì )給其他房間帶來(lái)意想不到的影響,從而降低了房間的可用性。
原則3:在泳道內交易
考慮到網(wǎng)站建設故障隔離的名字和前面的原則,這個(gè)原則似乎應該是不言而喻的,但我們在很久之前就學(xué)到了不要做任何假設。在技術(shù)領(lǐng)域,假設就是災難之母。你見(jiàn)到過(guò)泳者排在泳池邊上準備出發(fā),他們眼前卻橫置著(zhù)一條條泳道的分道線(xiàn)嗎?當然沒(méi)有。不過(guò),這樣的障礙游泳倒是挺有趣的。這對于技術(shù)泳道來(lái)說(shuō)同樣如此。例如,聲稱(chēng)自己創(chuàng )建了一個(gè)數據庫泳道,這是不對的。交易是怎么到達數據庫的?顯然會(huì )有跨泳道的通信,而根據原則2,這種情況不應該發(fā)生。對于這個(gè)例子,你可能創(chuàng )建了一個(gè)池,但由于交易是要跨界的,所以根據我們的定義,它不是泳道。
本文地址:http://havencoinwallet.com//article/3895.html