我們已經(jīng)知道了同步的基本定義和一些示例,那么讓我們拓寬一-下討論,看看應(yīng)用中的同步調(diào)用和異步調(diào)用。同步調(diào)用是在調(diào)用返回時才能完全執(zhí)行它們的動作。如果一個方法被調(diào)用了,控制權(quán)被轉(zhuǎn)給該方法來行使,那么只有當(dāng)該方法完成了自己要執(zhí)行的操作,成功地返回了或者返回有錯時,應(yīng)用中調(diào)用該方法的地方才會重新得到控制權(quán)。換而言之,同步方法先被調(diào)用,然后它們執(zhí)行操作,當(dāng)它們完成時,會返還控制權(quán)。...
對象緩存用于存儲會被應(yīng)用再用到的對象。這些對象通常來自數(shù)據(jù)庫,或由計算或應(yīng)用操作生成。這些對象幾乎都是有序?qū)ο?,會被排列或組編成有序的格式,以便最小化內(nèi)存占用量。在獲取這些對象時,它們的排序會被打亂或解編,以轉(zhuǎn)換成原始的數(shù)據(jù)類型。所謂組編,就是把對象的內(nèi)存表示形式轉(zhuǎn)換成字節(jié)流或字節(jié)序列進(jìn)程,以便存儲或傳輸。所謂解編,就是把字節(jié)流表示的對象解碼成原始的對象格式的進(jìn)程。如果使用了對象緩存,應(yīng)用必須注意到它們,并且實現(xiàn)操作緩存的方法。...
AllScale公司的數(shù)據(jù)架構(gòu)師認(rèn)為數(shù)據(jù)架構(gòu)將在三個維度上受到限制,即交易量的增長、第23章所做的擴(kuò)展應(yīng)用的決策以及客戶和產(chǎn)品的增長。因此,他們需要依靠AKF數(shù)據(jù)庫擴(kuò)展立方的所有坐標(biāo)軸。...
要是天上掉餡餅該多好...但故障隔離不是免費的,而且并不便宜。雖然它有很多好處,但如果把平臺上的每個功能都設(shè)計為故障隔離的,那成本就太高了,而且它可能還不會帶來什么股東回報。...
故障隔離程度最好的系統(tǒng),是那些絕對不調(diào)用它們的功能或數(shù)據(jù)范圍以外的東西并且與之沒有任何交互的系統(tǒng)??梢韵胂笠唤M混凝土襯托的房間,每個房間有一扇門,每扇門后面是一個長長的隔離通道,通道的盡頭有另一扇門;也就是說,一扇門可以訪問混凝土襯托的房間,而另一扇門可以訪問一個共享的房間,該房間中有無窮多個桌子和人。在每個混凝土房間中,有一條信息,坐在那許多桌子后面的某個人,可能需要這條信息。要得到這條信息,他就要沿著這個具有他所需信息的房間的專用通道走到其中,然后再返回自己所在的桌子。在...
如果創(chuàng)建的架構(gòu)允許你以面向服務(wù)或者面向資源的方式劃分代碼,那么你就有了關(guān)注的靈活性,能夠給這些服務(wù)專門指派工程師了。當(dāng)你還是一家小公司時,這樣做可能意義不大。但是隨著你的公司發(fā)展,代碼數(shù)量、服務(wù)器數(shù)量和系統(tǒng)的整體復(fù)雜度都在增長。要處理這種復(fù)雜度的增長,你就需要集中你的工程師。如果不能讓你的員工專注于自己特定的領(lǐng)域,那么就會造成太多的工程師了解太少的整個系統(tǒng)的信息,以致效率低下。...
故障隔離還可以提高可用性,因為故障更容易被檢測、發(fā)現(xiàn)和解決。如果你有多個泳道,每個泳道分配給一組客戶,只要一個泳道出故障了,那么你就會很快知道哪里出故障了,而且故障的影響僅限于一組客戶。這樣你要解決的問題范圍幾乎立即縮小了。很可能這個問題是由服務(wù)于這組客戶的系統(tǒng)或服務(wù)造成的,比如這個客戶泳道專用的數(shù)據(jù)庫。這時你可以問“我們剛在這個泳道或豆莢中發(fā)布過代碼嗎”或者更一般的“這個泳道或豆莢最近做過什么變更”。...
故障隔離的架構(gòu)會給平臺或產(chǎn)品帶來很多好處。其中明顯的好處是提高了可用性和可擴(kuò)展性,而不明品的好處是減少了上市時間和開發(fā)成本。公司會發(fā)現(xiàn),采用故障隔離的架構(gòu),回退發(fā)會更容易,而當(dāng)站點、平臺或產(chǎn)品“上線”后,再推出新功能也會更加容易。...
根據(jù)我們的經(jīng)驗,我們通常把故障隔離的架構(gòu)稱為泳道(swim lanes)。雖然這個術(shù)語不是我們創(chuàng)造的,但是我們認(rèn)為它很形象地比喻了我們想在架構(gòu)中創(chuàng)建的東西。對于泳者來說,泳道既有屏障的作用,又有引導(dǎo)的作用。作為屏障,泳道可以確保泳者不會游到其他的泳道中,干擾到另一個泳者。在比賽中,這樣有助于避免發(fā)生意外的干擾,影響到泳者奪冠的機(jī)會。在實踐或練習(xí)中,屏障的存在確保了游泳新手不會干擾優(yōu)秀的泳者。此外,泳道還可以引導(dǎo)泳者以最少的力量向目標(biāo)前進(jìn),因為泳者需要不停地把腦袋沒人水中,而每...
那么這些關(guān)于成本、質(zhì)量、速度和范圍的權(quán)衡決策是如何影響系統(tǒng)的可擴(kuò)展性呢?正如上一章提到的,對于擴(kuò)展項目或基礎(chǔ)設(shè)施項目來說,可擴(kuò)展性與這些權(quán)衡之間有著簡單明了的關(guān)系。而對于開發(fā)功能的項目來說,這些約束的權(quán)衡決策從長期來看會影響該功能和整個系統(tǒng)的可擴(kuò)展性,這是權(quán)衡決策與可擴(kuò)展性之間的間接關(guān)系。...