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