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