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