資源描述:
《可擴展的web架構與分布式系統(tǒng)(上)》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在教育資源-天天文庫。
1、可擴展的Web架構與分布式系統(tǒng)(譯)Jan16,2013原文:ScalableWebArchitectureandDistributedSystems譯者:youngsterxyf開源軟件已成為一些最大型網(wǎng)站的基礎組件。并且隨著那些網(wǎng)站的發(fā)展,圍繞它們的架構出現(xiàn)了一些最佳實踐與指導性原則。本章嘗試闡述設計大型網(wǎng)站需要考慮的一些關鍵問題,以及一些實現(xiàn)這些目標的組件。本章主要側(cè)重于Web系統(tǒng),雖然其中一些內(nèi)容也適用于其它分布式系統(tǒng)。Web分布式系統(tǒng)設計原則構建和運維一個可擴展Web站點或者應用到底意味著什么?說到底這種系統(tǒng)只不過是通過互聯(lián)網(wǎng)將用戶與遠程資源相
2、連接—使其可擴展的是分布于多個服務器的資源,或者對這些資源的訪問。類似于生活中的大多數(shù)東西,從長遠來說,構建一個web服務之前花些時間提前規(guī)劃是很有幫助的。理解大型網(wǎng)站背后一些需要考慮的因素與權衡取舍,在創(chuàng)建小一些的web站點時能讓你作出更明智的決策。以下是影響大規(guī)模web系統(tǒng)設計的一些核心原則:·可用性:一個網(wǎng)站的正常運行時間對于許多公司的聲譽與運作都是至關重要的。對于一些更大的在線零售站點,幾分鐘的不可用都會造成數(shù)千或數(shù)百萬美元的營收損失,因此系統(tǒng)設計得能夠持續(xù)服務,并且能迅速從故障中恢復是技術和業(yè)務的最基本要求。分布式系統(tǒng)中的高可用性需要仔細考慮關
3、鍵部件的冗余,從部分系統(tǒng)故障中迅速恢復,以及問題發(fā)生時優(yōu)雅降級?!ば阅埽簩τ诙鄶?shù)站點而言,網(wǎng)站的性能已成為一個重要的考慮因素。網(wǎng)站的速度影響著使用和用戶滿意度,以及搜索引擎排名,與營收和是否能留住用戶直接相關。因此,創(chuàng)建一個針對快速響應與低延遲進行優(yōu)化的系統(tǒng)非常重要?!た煽啃裕合到y(tǒng)必須是可靠的,這樣相同數(shù)據(jù)請求才會始終返回相同的數(shù)據(jù)。數(shù)據(jù)變換或更新之后,同樣的請求則應該返回新的數(shù)據(jù)。用戶應該知道一點:如果東西寫入了系統(tǒng),或者得到存儲,那么它會持久化并且肯定保持不變以便將來進行檢索。·可擴展性:對于任何大型分布式系統(tǒng)而言,大小(size)只是需要考慮的規(guī)模
4、(scale)問題的一個方面。同樣重要的是努力去提高處理更大負載的能力,這通常被稱為系統(tǒng)的可擴展性??蓴U展性以系統(tǒng)的許多不同參數(shù)為參考:能夠處理多少額外流量?增加存儲容量有多容易?能夠處理多少更多的事務?·可管理性:系統(tǒng)設計得易于運維是另一個重要的考慮因素。系統(tǒng)的可管理性等價于運維(維護和更新)的可擴展性。對于可管理性需要考慮的是:問題發(fā)生時易于診斷與理解,便于更新或修改,系統(tǒng)運維起來如何簡單(例如:常規(guī)運維是否不會引發(fā)失敗或異常?)·成本:成本是一個重要因素。很明顯這包括硬件和軟件成本,但也要考慮系統(tǒng)部署和維護這一方面。系統(tǒng)構建所花費的開發(fā)者時間,系統(tǒng)
5、運行所需要的運維工作量,以及培訓工作都應該考慮進去。成本是擁有系統(tǒng)的總成本。這些原則中的每一個都為設計分布式web架構提供了決策依據(jù)。然而,它們之間也會相互不一致,這樣實現(xiàn)一個目標的代價是犧牲另一個目標。一個基本的例子:簡單地通過增加更多的服務器(可擴展性)來解決容量問題是以可管理性(你需要運維額外的一臺服務器)和成本(服務器的價錢)為代價的。設計任何一種web應用,考慮這些核心原則都是非常重要的,即使明知某個設計也許會犧牲其中的一個或多個原則。1.2.基礎概念說到系統(tǒng)架構,需要考慮幾個事情:什么是合適的部件,這些部件如何組合在一起,以及什么是正確的權衡
6、取舍。在需要之前擴大投資通常不是一種明智的商業(yè)主張;然而,在設計上的一些遠見在將來能夠節(jié)省大量的時間和資源。本節(jié)主要闡述對于幾乎所有大型web應用來說都是非常重要的一些核心因素:服務,冗余,分區(qū),以及故障處理。這些因素中的每一個都涉及選擇與折中,特別是在上一節(jié)所描述的那些原則的上下文中。為了詳細地解釋這些東西,最好是從一個例子開始。例子:圖片托管應用可能在以前的某個時候,你在網(wǎng)上張貼過圖片。對于托管和提供大量圖片的大網(wǎng)站來說,構建一個性價比高、高可用、以及低延遲(快速檢索)的架構是存在諸多挑戰(zhàn)的。想象存在這樣一個系統(tǒng),用戶可以上傳圖片到中央服務器,也可以
7、通過web鏈接或者API請求圖片,就像Flickr或Picasa一樣。為了簡單起見,我們假設這個應用有兩個關鍵部分:上傳(寫)圖片到服務器和查詢圖片。當然我們希望圖片上傳很高效,同時我們非常關注當有人請求一張圖片時(例如,網(wǎng)頁或者其他應用請求圖片),系統(tǒng)能夠快速地交付。這非常類似于web服務器或內(nèi)容分發(fā)網(wǎng)絡(CDN)邊緣服務器(CDN將這種服務器用于在多個地方存儲內(nèi)容,這樣內(nèi)容就在地理/物理距離上更接近用戶,從而更加快速)提供的功能。系統(tǒng)的另一些重要方面有:*對于將要存儲的圖片數(shù)量沒有限制,因此需要考慮存儲的可擴展性。*圖片下載/請求的延遲要低。*如果用
8、戶上傳了某張圖片,那么這張圖片就得一直存在(圖片數(shù)據(jù)的可靠性)。*系統(tǒng)應該易于維