網(wǎng)站建設(shè):Web設(shè)計(jì)分布式系統(tǒng)的四個核心原則

2023-05-21    分類: 網(wǎng)站建設(shè)

Web分布式系統(tǒng)設(shè)計(jì)的原則。開源軟件已經(jīng)成為許多大型網(wǎng)站的基本組成部分,隨著這些網(wǎng)站的逐步壯大,他們的網(wǎng)站架構(gòu)和一些指導(dǎo)原則也出現(xiàn)在開發(fā)者們的面前,給予切實(shí)有用的指導(dǎo)和幫助。本文旨在介紹一些核心問題以及通過構(gòu)建模塊來制作大型網(wǎng)站,實(shí)現(xiàn)終目標(biāo)。

構(gòu)建并運(yùn)營一個可伸縮的Web站點(diǎn)或應(yīng)用程序到底指的是什么?在初,僅是通過互聯(lián)網(wǎng)連接用戶和訪問遠(yuǎn)程資源。
和大多數(shù)事情一樣,當(dāng)構(gòu)建一個Web服務(wù)時,需要提前抽出時間進(jìn)行規(guī)劃。了解大型網(wǎng)站創(chuàng)建背后的注意事項(xiàng)以及權(quán)衡可能會給你帶來更加明智的決策,當(dāng)你在創(chuàng)建小網(wǎng)站時。下面是設(shè)計(jì)大型Web系統(tǒng)時,需要注意的一些核心原則:
1.可用性
2.性能
3.可靠性
4.可擴(kuò)展
5.易管理
6.成本
上面的這些原則給設(shè)計(jì)分布式Web架構(gòu)提供了一定的基礎(chǔ)和理論指導(dǎo)。然而,它們也可能彼此相左,例如實(shí)現(xiàn)這個目標(biāo)的代價(jià)是犧牲成本。一個簡單的例子:選擇地址容量,僅通過添加更多的服務(wù)器(可伸縮性),這個可能以易管理(你不得不操作額外的服務(wù)器)和成本作為代價(jià)(服務(wù)器價(jià)格)。
無論你想設(shè)計(jì)哪種類型的Web應(yīng)用程序,這些原則都是非常重要的,甚至這些原則之間也會互相羈絆,做好它們之間的權(quán)衡也非常重要。
一、基礎(chǔ)
當(dāng)涉及到系統(tǒng)架構(gòu)問題時,這幾件事情是必須要考慮清楚的:什么樣的模塊比較合適?如何把它們組合在一起?如何進(jìn)行恰當(dāng)?shù)貦?quán)衡?在擴(kuò)大投資之前,它通常需要的并不是一個精明的商業(yè)命題,然而,一些深謀遠(yuǎn)慮的設(shè)計(jì)可以幫你在未來節(jié)省大量的時間和資源。
討論的重點(diǎn)幾乎是構(gòu)建所有大型Web應(yīng)用程序的核心:服務(wù)、冗余、分區(qū)和故障處理能力。這里的每個因素都會涉及到選擇和妥協(xié),特別是前面所討論的那些原則。解釋這些核心的佳辦法就是舉例子。
圖片托管應(yīng)用程序
有時,你會在線上傳圖片,而一些大型網(wǎng)站需要托管和傳送大量的圖片,這對于構(gòu)建一個具有成本效益、高可用性并具有低延時(快速檢索)的架構(gòu)是一項(xiàng)挑戰(zhàn)。
在一個圖片系統(tǒng)中,用戶可以上傳圖片到一個中央服務(wù)器里,通過網(wǎng)絡(luò)連接或API對這些圖片進(jìn)行請求,就像Flickr或者Picasa。簡單點(diǎn),我們就假設(shè)這個應(yīng)用程序只包含兩個核心部分:上傳(寫)圖片和檢索圖片。圖片上傳時好能夠做到高效,傳輸速度也是我們關(guān)心的,當(dāng)有人向圖片發(fā)出請求時(例如是一個Web頁面或其他應(yīng)用程序)。這是非常相似的功能,提供Web服務(wù)或內(nèi)容分發(fā)網(wǎng)絡(luò)(一個CDN服務(wù)器可以在許多地方存儲內(nèi)容,所以無論是在地理上還是物理上都更加接近用戶,從而導(dǎo)致更快的性能)邊緣服務(wù)器。
該系統(tǒng)需要考慮的其他重要方面:
1.圖片存儲的數(shù)量是沒有限制的,所以存儲應(yīng)具備可伸縮,另外圖片計(jì)算也需要考慮
2.下載/請求需要做到低延遲
3.用戶上傳一張圖片,那么圖片就應(yīng)該始終在那里(圖片數(shù)據(jù)的可靠性)
4.系統(tǒng)應(yīng)該易于維護(hù)(易管理)
5.由于圖片托管不會有太高的利潤空間,所以系統(tǒng)需要具備成本效益
二、 服務(wù)
當(dāng)我們考慮構(gòu)建可伸縮的系統(tǒng)時,它應(yīng)有助于解耦功能,系統(tǒng)的每個部分都可以作為自己的服務(wù)并且擁有清晰的接口定義。在實(shí)踐中,這種系統(tǒng)設(shè)計(jì)被稱作面向服務(wù)的體系結(jié)構(gòu)(SOA)。對于此類系統(tǒng),每個服務(wù)都有它自己的獨(dú)特功能,通過一個抽象接口可以與外面的任何內(nèi)容進(jìn)行互動,通常是面向公眾的另一個服務(wù)API。
把系統(tǒng)分解成一組互補(bǔ)性的服務(wù),在互相解耦這些操作塊。這種抽象有助于在服務(wù)、基本環(huán)境和消費(fèi)者服務(wù)之間建立非常清晰的關(guān)系。這種分解可以有效地隔離問題,每個塊也可以互相伸縮。這種面向服務(wù)的系統(tǒng)設(shè)計(jì)與面向?qū)ο笤O(shè)計(jì)非常相似。
快進(jìn)并假設(shè)服務(wù)正在大量使用;在這種情況下,很容易看到寫圖片的時間對讀圖片時間有多大影響(他們兩個功能在彼此競爭共享資源)。根據(jù)各自體系,這種影響會是巨大的。即使上傳和下載速度相同(這是不可能的,對于大多數(shù)的IP網(wǎng)絡(luò)來說,下載速度:上傳速度至少是3:1),通常,文件可以從緩存中讀取,而寫入,終是寫到磁盤中(也許在終一致的情況下,可以被多寫幾次)。即使是從緩存或者磁盤(類似SSD)中讀取,數(shù)據(jù)寫入都會比讀慢(Pole Position,一個開源DB基準(zhǔn)的開源工具和結(jié)果)。
這種設(shè)計(jì)的另一個潛在問題是像Apache或者Lighttpd這些Web服務(wù)器通常都會有一個并發(fā)連接數(shù)上限(默認(rèn)是500,但也可以更多),這可能會花費(fèi)高流量,寫可能會迅速消掉所有。既然讀可以異步或利用其他性能優(yōu)化,比如gzip壓縮或分塊傳輸代碼,Web服務(wù)可以快速切換讀取和客戶端來服務(wù)于更多的請求,超過每秒的成都接數(shù)(Apache的成都接數(shù)設(shè)置為500,這種情況并不常見,每秒可以服務(wù)幾千個讀取請求)。另一方面,寫通常傾向于保持一個開放的鏈接進(jìn)行持續(xù)上傳,所以,使用家庭網(wǎng)絡(luò)上傳一個1 MB的文件花費(fèi)的時間可能會超過1秒,所以,這樣的服務(wù)器只能同時滿足500個寫請求。
當(dāng)然,如果你有兩個不同的端點(diǎn),上面的例子可能會運(yùn)行的很好(事實(shí)上,這非常類似于幾個云存儲供應(yīng)商之間的實(shí)現(xiàn)和內(nèi)容分發(fā)網(wǎng)絡(luò))。雖然有很多種方法可以解決這些瓶頸,但每個人都會有不同的權(quán)衡,所以采用適合你的方法才是重要的。
當(dāng)談到這些系統(tǒng)時,其實(shí)并沒有非常正確的答案,但有助于我們回到文章開始處的原則上看問題。確定系統(tǒng)需求(大量的讀或?qū)懟蛘邇蓚€都進(jìn)行、級別并發(fā)、跨數(shù)據(jù)查詢、范圍、種類等等),選擇不同的基準(zhǔn)、理解系統(tǒng)是如何出錯的并且對以后的故障發(fā)生情況做些扎實(shí)的計(jì)劃。
三、冗余
為了可以正確處理錯誤,一個Web架構(gòu)的服務(wù)和數(shù)據(jù)必須具備適當(dāng)?shù)娜哂?。例如,如果只有一個副本文件存儲在這臺單獨(dú)的服務(wù)器上,那么如果這臺服務(wù)器出現(xiàn)問題或丟失,那么該文件也隨即一起丟失。丟失數(shù)據(jù)并不是什么好事情,避免數(shù)據(jù)丟失的常用方法就是多創(chuàng)建幾個文件或副本或冗余。
同樣也適用于服務(wù)器。如果一個應(yīng)用程序有個核心功能,應(yīng)確保有多個副本或版本在同時運(yùn)行,這樣可以避免單節(jié)點(diǎn)失敗。
在系統(tǒng)中創(chuàng)建冗余,當(dāng)系統(tǒng)發(fā)生危機(jī)時,如果需要,可以消除單點(diǎn)故障并提供備份或備用功能。例如,這里有兩個相同的服務(wù)示例在生產(chǎn)環(huán)境中運(yùn)行,如果其中一個發(fā)生故障或者降低,那么該系統(tǒng)容錯轉(zhuǎn)移至那個健康的副本上。容錯轉(zhuǎn)移可以自動發(fā)生也可以手動干預(yù)。
服務(wù)冗余的另一重要組成部分是創(chuàng)建一個無共享架構(gòu)。在這種體系結(jié)構(gòu)中,每個節(jié)點(diǎn)都能相互獨(dú)立運(yùn)行,并且沒有所謂的中央“大腦”管理狀態(tài)或協(xié)調(diào)活動其他節(jié)點(diǎn)。這對系統(tǒng)的可擴(kuò)展幫助很大,因?yàn)樾鹿?jié)點(diǎn)在沒有特殊要求或知識的前提下被添加。然而,重要的是,這些系統(tǒng)是沒有單點(diǎn)故障的,所以失敗的彈性就更大。
例如在我們的圖片服務(wù)器應(yīng)用程序中,所有的圖片在另一個硬件上都有冗余副本(理想情況下是在不同的地理位置,避免在數(shù)據(jù)中心發(fā)生一些火災(zāi)、地震等自然事故),服務(wù)去訪問圖片將被冗余,所有潛在的服務(wù)請求。
四、分區(qū)
數(shù)據(jù)集有可能非常大,無法安裝在一臺服務(wù)器上。也有可能這樣,某操作需要太多的計(jì)算資源、性能降低并且有必要增加容量。在這兩種情況下,你有兩種選擇:縱向擴(kuò)展或橫向擴(kuò)展。
縱向擴(kuò)展意味著在單個服務(wù)器上添加更多的資源。所以,對于一個非常大的數(shù)據(jù)集來說,這可能意味著添加更多(或更大)的硬件設(shè)備,來使一臺服務(wù)器能容下整個數(shù)據(jù)集。在計(jì)算操作下,這可能意味著移動計(jì)算到一個更大的服務(wù)器上,擁有更快的CPU或更大的內(nèi)存。在各種情況下,縱向擴(kuò)展可以通過提升單個資源的處理能力來完成。
橫向擴(kuò)展在另一方面是添加更多的節(jié)點(diǎn),在大數(shù)據(jù)集下,這可能會使用第二服務(wù)器來存儲部分?jǐn)?shù)據(jù)集,對于計(jì)算資源來說,這意味著分割操作或跨節(jié)點(diǎn)加載。為了充分利用橫向擴(kuò)展,它應(yīng)作為一種內(nèi)在的系統(tǒng)架構(gòu)設(shè)計(jì)原則,否則修改或拆分操作將會非常麻煩。
當(dāng)談到橫向擴(kuò)展時,常見的做法是把服務(wù)進(jìn)行分區(qū)或碎片。分區(qū)可以被派發(fā),這樣每個邏輯組的功能就是獨(dú)立的??梢酝ㄟ^地理界限或其他標(biāo)準(zhǔn),如非付費(fèi)與付費(fèi)用戶來完成分區(qū)。這些方案的優(yōu)點(diǎn)是他們會隨著容量的增加提供一個服務(wù)或數(shù)據(jù)存儲。
在我們的圖片服務(wù)器案例中,用來存儲圖片的單個文件服務(wù)器可能被多個文件服務(wù)器取代,每個里面都會包含一套自己獨(dú)特的圖像。這種架構(gòu)將允許系統(tǒng)來填充每一個文件/圖片服務(wù)器,當(dāng)磁盤填滿時會添加額外的服務(wù)器。這樣的設(shè)計(jì)需要一個命名方案,用來捆綁圖片文件名到其相應(yīng)的服務(wù)器上。圖像名字可以形成一個一致的哈希方案并映射到整個服務(wù)器上;或者給每張圖片分配一個增量ID,當(dāng)客戶端對圖片發(fā)出請求時,圖片檢索服務(wù)只需要檢索映射到每個服務(wù)器上(例如索引)的ID。
當(dāng)然,跨越多個服務(wù)器對數(shù)據(jù)或功能進(jìn)行分區(qū)還是有許多挑戰(zhàn)的。其中的關(guān)鍵問題是數(shù)據(jù)本地化。在分布式系統(tǒng)中,數(shù)據(jù)操作或計(jì)算點(diǎn)越接近,系統(tǒng)性能就會越好。因此,它也可能是個潛在問題,當(dāng)數(shù)據(jù)分散在多個服務(wù)器上時。有時數(shù)據(jù)不是在本地,那么就要迫使服務(wù)器通過網(wǎng)絡(luò)來獲取所需的信息,這個獲取的過程就會設(shè)計(jì)到成本。
另一潛在問題是不一致。當(dāng)這里有多個服務(wù)對一個共享資源執(zhí)行讀寫操作時,潛在可能會有另一個服務(wù)器或數(shù)據(jù)存儲參與進(jìn)來,作為競選條件——一些數(shù)據(jù)需要更新,但是讀的優(yōu)先級高于更新——在這種情況下,數(shù)據(jù)就是不一致的。例如在圖片托管方案中,有可能出現(xiàn)的不一致是:如果一個客戶端發(fā)送更新“狗”圖片請求,進(jìn)行重新命名,把“Dog”改成“Gizmo”,但同時,另一個客戶端正在讀這張圖片。在這種情況下,標(biāo)題就是不清楚的。“Dog”或“Gizmo”應(yīng)該被第二個客戶端接收。
當(dāng)然,在進(jìn)行數(shù)據(jù)分區(qū)時會產(chǎn)生一些障礙,但是分區(qū)允許把每個問題拆分到管理群里——通過數(shù)據(jù)、負(fù)載、使用模式等。這樣對可擴(kuò)展和易管理都是有幫助的,但也不是沒有風(fēng)險(xiǎn)的。這里有很多方式來降低風(fēng)險(xiǎn)和故障處理;然而,為了簡便起見,并未在本文中詳細(xì)說明,如果你有興趣,可以訪問我的博客。
總結(jié)
以上介紹的都是設(shè)計(jì)分布式系統(tǒng)需要考慮的核心要素??捎眯?、性能、可靠性、可擴(kuò)展、易管理、成本這幾個原則非常重要,但在實(shí)際應(yīng)用中可能會以犧牲某個原則來實(shí)現(xiàn)另外一個原則,在這個過程中就要做好權(quán)衡工作,做到因時制宜。

網(wǎng)頁名稱:網(wǎng)站建設(shè):Web設(shè)計(jì)分布式系統(tǒng)的四個核心原則
標(biāo)題網(wǎng)址:http://www.bm7419.com/news45/260395.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)移動網(wǎng)站建設(shè)、做網(wǎng)站App設(shè)計(jì)、標(biāo)簽優(yōu)化、響應(yīng)式網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)