自己擴展你的系統(tǒng),不要依靠供應商的解決方案實現(xiàn)擴展。了解如何擴展,如何用最簡單的方式使用供應商提供的產(chǎn)品和服務。遵循該原則的原因有三點:主宰自己的命運、保持架構(gòu)簡單、減少在所有權(quán)方面的成本。不要依賴供應商的產(chǎn)品、服務或功能來擴展系統(tǒng)。保持架構(gòu)簡單,把命運掌控在自己手中,自己控制成本。而如果使用供應商的專有擴展方案,可能就做不到這三點了。...
讓總線流量僅限于價值高于處理成本的數(shù)據(jù)。價值和成本是調(diào)整消息流量的標準。要減少低價值高成本的流量。對低價值/低成本和高價值/高成本的流量進行采樣,以減少成本。消息流量并非“免費的”,對系統(tǒng)是有成本需求的。不要所有東西都發(fā)布。對流量進行采樣可以在成本和價值之間取得平衡。...
盡可能使用異步通信,而不是同步通信。服務和各個層之間的所有調(diào)用。使用程序設計語言專有的調(diào)用,確保發(fā)出了請求,且沒有在等待。同步詞用會使整個程序執(zhí)行停止來等待一個響應,從而把所有的展務和各個層維系在一起,造成級聯(lián)性的故障。使用異步通信技術(shù)可以確保每個服務和層是獨立的,這樣系統(tǒng)的可擴展程度比所有部件都掲合在一起的系統(tǒng)大得多。...
在系統(tǒng)中存儲會話數(shù)據(jù)時,使用分布式緩存。適用于任何需要存儲會話數(shù)據(jù)但又不能將其存放在用戶瀏覽器中的情況。小心一些常見的錯誤,如會話管理系統(tǒng)要求關(guān)聯(lián)用戶和Web服務器。...
盡量完全避免會話數(shù)據(jù),必要時,可以考慮把數(shù)據(jù)放在用戶的瀏覽器中。適用于任何需要會話數(shù)據(jù)來實現(xiàn)最佳用戶體驗的情形。采用cookie在用戶的瀏覽器中存放會話數(shù)據(jù)。把會話數(shù)據(jù)存放在用戶的瀏覽器中,可以使服務器池中的 任何一個Web服務器都能為該用戶的請求提供服務,而且你的系統(tǒng)也不必再為它提供存儲空間了。用cookie存放會話數(shù)據(jù)是種常見的方法,而且具有易于擴展的優(yōu)點,但也有一些缺點。最關(guān)鍵的缺點就是未加密的cookie可以被輕易捕獲,用于登錄用戶的賬戶。...
設計和實現(xiàn)無狀態(tài)系統(tǒng)。適用于設計新系統(tǒng)或重新設計已有系統(tǒng)時。盡可能選擇無狀態(tài)實現(xiàn)。如果出于業(yè)務需求,合理地實了狀態(tài)。實現(xiàn)狀態(tài)會限制可擴展性,增大成本。在任何系統(tǒng)中,都要抵制對狀態(tài)的需要。使用業(yè)務指標和多元(或AB)測試,判斷應用中的狀態(tài)是否真的實現(xiàn)了用戶預期的行為和業(yè)務價值。...
減少以串聯(lián)方式連接的組件數(shù)。無論何時要添加組件都適用。刪除不必要的組件或添加它們的多個版本,將影響最小化。串聯(lián)組件會使故障成倍增加。避免給系統(tǒng)添加串聯(lián)組件。如果一定需要,則添加該組件的多個版本,這樣一個版本出故障了,其他的版本還可以代替它。...
絕對不要實現(xiàn)且一定要減少單點數(shù)障。在架構(gòu)圖上我出單點實例。盡量采用主動/主動配置。通過多個實景大化可用性。盡量采用主動/主動配置,不要用主動被動解決方案。利用均衡器均衡跨服務實例的流量。對于單例模式,使用主動/被動配置的控制。...
在SELECT語句中聲明游標時,不要使用 FOR UPDATE從句。適用情形:無論何時都適用。審查關(guān)于游標的代碼,質(zhì)疑每個 SEL ECT FOR UPDATE語向。使用 FOR UPDATE從句會鎖定行,從而降低事務處理速度。要點:游標是一種強大的結(jié)構(gòu),使用得當,能夠使編程更快更容易,同時還能加速事務處理。但 FOR UPDATE游標可能會長期鎖定數(shù)據(jù),降低事務處理速度。參考數(shù)據(jù)庫文檔,看是否需要使用 FOR READ ONIY從句,最小化鎖的數(shù)量。 ...
不要使用多階段提交協(xié)議存儲或處理事務。不要使用它。用Y軸或Z軸劃分分割數(shù)據(jù)存儲和處理系統(tǒng)。應用理由:多階段提交協(xié)議是一種阻斷提議,在它完成之前,其他事務不能執(zhí)行。不要將多階段提交協(xié)議作為廷長整體數(shù)據(jù)庫生命的簡單方式。它很可能降低擴展性,甚至更早地終止系統(tǒng)的壽命。...