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

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

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

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

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

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

廣告

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

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