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