可伸縮性Web服務(wù)的指導(dǎo)原則
可伸縮性Web服務(wù)關(guān)注性能優(yōu)化,但一味注意優(yōu)化也并非是其關(guān)鍵所在。Tom Killalea,Amazon負(fù)責(zé)基礎(chǔ)設(shè)施與分布式系統(tǒng)的技術(shù)副總裁在近期的ACM queue上發(fā)表了一篇關(guān)于構(gòu)建可伸縮性Web服務(wù)的文章。 他概述了構(gòu)建可伸縮性Web服務(wù)的指導(dǎo)原則并舉了許多現(xiàn)實世界的實際案例,其核心主題是“只構(gòu)建你所需要的”。
警惕:過早優(yōu)化
花費在優(yōu)化可伸縮性上面的時間和資源不如花費在改進(jìn)用戶體驗和吸引流量上。
采納:他人的成果
他解釋到,學(xué)習(xí)他人在框架與基礎(chǔ)設(shè)施方面的工作可以減短上市時間,幫助將重點轉(zhuǎn)移到提供客戶價值上。
三個重要的進(jìn)展從不同的方面對降低門檻作出了貢獻(xiàn):邁向SOA的趨勢(面向服務(wù)的架構(gòu)),云計算基礎(chǔ)設(shè)施服務(wù)的涌現(xiàn),以及ASP.NET,Django,Rails和Spring等等Web應(yīng)用框架的可用性。
警惕:過度優(yōu)化
他引用了Nicholas Nassim Taleb在高度非概然性不可測事件所產(chǎn)生的重大影響方面所做的工作,并建議使用冗余作為提高可用性的策略;使用冗余作為負(fù)載平衡而不僅僅是故障恢復(fù)機制這一想法比起對于低概率的可能性事件進(jìn)行過度優(yōu)化來說,顯然更加有成本效率。
采納:云
Tom給出了Animoto的例子,這一通過Amazon.com的EC2基礎(chǔ)設(shè)施托管的社交Web應(yīng)用是如何隨需應(yīng)變的快速平面伸縮(scale out)的,甚至擴展到3500個實例。同樣的情況在非云的基礎(chǔ)設(shè)施里,為了保證尖峰時刻的流量將會花費巨大的成本。
警惕:目標(biāo)驅(qū)動的優(yōu)化
對于期望的流量進(jìn)行建模然后構(gòu)建精確的伸縮性計劃以滿足這一目標(biāo)是***風(fēng)險的。好的模型難于構(gòu)建,并且會因為簡化或者是降低變因的樂觀估計而受到影響。[…]如果你的Web服務(wù)是成功的,你最終會遇到比目標(biāo)模型更大的需求——也許不是這個黑色的星期一或者超級碗周末,但有可能是很快以后,在你所沒想到的時間范圍內(nèi)。
采納:扯下翅膀
“除了分析哪部分會***個出問題以及其原因以外”,Tom談到“我們會查看給定的應(yīng)用或者服務(wù)在沒有出問題或缺少這部分的情況下會有怎樣的表現(xiàn),并且重新進(jìn)行測試,以找下一個出問題的部分”。
Tom這樣總結(jié)了他的文章“構(gòu)建一個可伸縮的Web服務(wù)所面臨的最困難的挑戰(zhàn)就是在出現(xiàn)故障以及高度的并發(fā)訪問械的情況下,如何去處理持續(xù)性,可靠性,性能以及成本效率之間的折衷。”。
除了Tom的這篇文章,2008年10號還有其它的關(guān)于構(gòu)建可伸縮性Web服務(wù)的精彩文章。
【編輯推薦】