自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

你需要了解的5種數(shù)據(jù)庫(kù)擴(kuò)展解決方案

數(shù)據(jù)庫(kù) 其他數(shù)據(jù)庫(kù)
在本文中,我們將深入研究數(shù)據(jù)庫(kù)擴(kuò)展解決方案,這通常是失敗的第一點(diǎn)。 如果您還不熟悉系統(tǒng)設(shè)計(jì),請(qǐng)閱讀簡(jiǎn)短的文章,向您介紹該主題。

如果您的應(yīng)用程序遇到負(fù)載問題,請(qǐng)抽出香檳! 您的網(wǎng)絡(luò)應(yīng)用必須相當(dāng)成功才能進(jìn)入這一階段。 您已經(jīng)達(dá)到了應(yīng)用程序可以處理的用戶數(shù)量,事情開始變慢并且出錯(cuò)。 網(wǎng)絡(luò)請(qǐng)求開始超時(shí),數(shù)據(jù)庫(kù)查詢執(zhí)行需要一段時(shí)間,頁(yè)面加載緩慢。 恭喜!您的應(yīng)用已準(zhǔn)備好進(jìn)行擴(kuò)展! 但是,該放下香檳了……您需要處理這些不斷增長(zhǎng)的痛苦,直到用戶離開您的應(yīng)用程序?yàn)橹?,否則競(jìng)爭(zhēng)對(duì)手就會(huì)復(fù)制您的想法。

擴(kuò)展成本

在垂直,水平和由內(nèi)而外*分割數(shù)據(jù)庫(kù)之前,應(yīng)牢記一個(gè)重要原則。 您不應(yīng)該實(shí)施過早的優(yōu)化或嘗試在實(shí)際需要時(shí)擴(kuò)展應(yīng)用程序。 實(shí)施伸縮解決方案帶來以下復(fù)雜性:

  • 添加新功能需要更長(zhǎng)的時(shí)間
  • 系統(tǒng)變得越來越復(fù)雜,涉及更多的零件和變量
  • 代碼可能更難測(cè)試
  • 查找和解決錯(cuò)誤變得更加困難

僅當(dāng)您的應(yīng)用程序處于滿負(fù)荷狀態(tài)時(shí),才應(yīng)接受這些折衷。 保持系統(tǒng)簡(jiǎn)單,除非有保證,否則不要引入擴(kuò)展復(fù)雜性。

由內(nèi)而外的數(shù)據(jù)庫(kù)分片不是真正的解決方案。 關(guān)鍵是有各種各樣的擴(kuò)展解決方案,除非需要,否則不要實(shí)施它們!

使用指標(biāo)查找瓶頸

每個(gè)應(yīng)用程序/系統(tǒng)都不同,要確定實(shí)施哪種擴(kuò)展解決方案,您必須首先確定瓶頸在哪里。 是時(shí)候檢查您的資源監(jiān)視系統(tǒng),或者如果尚未創(chuàng)建一個(gè)。 無(wú)論您使用的堆棧如何,都有可用的工具來監(jiān)視您的資源。 如果您在任何領(lǐng)先的IaaS(基礎(chǔ)設(shè)施即服務(wù))提供商(例如AWS,Microsoft Azure和GCP)上運(yùn)行,都有出色的應(yīng)用程序性能管理工具可供選擇。

這些工具通過圖形和其他數(shù)據(jù)可視化方法說明了資源的性能。 使用這些圖形來查找峰值或平坦的頂部。 這些通常意味著資源不堪重負(fù)或已滿負(fù)荷,并且無(wú)法處理新的操作。 如果顯然沒有任何容量,但是您的應(yīng)用程序運(yùn)行緩慢,請(qǐng)嘗試在頻繁使用的操作中分散日志。 檢查日志中是否需要花費(fèi)很長(zhǎng)時(shí)間才能通過網(wǎng)絡(luò)加載資源,可能是其他服務(wù)器(例如第三方API)或您的數(shù)據(jù)庫(kù)服務(wù)器引入了延遲。 您應(yīng)該將數(shù)據(jù)庫(kù)托管在另一臺(tái)服務(wù)器上,如果是這種情況,那么還應(yīng)該檢查該計(jì)算機(jī)的資源監(jiān)控。

通過考慮用戶如何使用您的應(yīng)用程序,以及從邏輯上考慮開始顯示的錯(cuò)誤或裂縫,確定瓶頸在哪里很簡(jiǎn)單。 以Twitter為例,這個(gè)特定的平臺(tái)主要用于讀取和編寫推文。 如果Twitter的監(jiān)視服務(wù)表明與這些操作有關(guān)的數(shù)據(jù)庫(kù)負(fù)擔(dān)沉重,則對(duì)他們的團(tuán)隊(duì)來說,開始優(yōu)化平臺(tái)的這一領(lǐng)域是有意義的。 在本文中,我們將深入研究數(shù)據(jù)庫(kù)擴(kuò)展解決方案,這通常是失敗的第一點(diǎn)。 如果您還不熟悉系統(tǒng)設(shè)計(jì),請(qǐng)閱讀簡(jiǎn)短的文章,向您介紹該主題。 我建議在實(shí)施擴(kuò)展解決方案之前對(duì)系統(tǒng)設(shè)計(jì)有所了解。

你需要了解的5種數(shù)據(jù)庫(kù)擴(kuò)展解決方案
> APM Tools

從鳥瞰視角擴(kuò)展應(yīng)用程序

現(xiàn)在我們對(duì)問題/瓶頸所在/位置有一個(gè)很好的認(rèn)識(shí),我們可以開始實(shí)施解決方案以解決這些問題。 記住,簡(jiǎn)單是關(guān)鍵,我們要始終避免引入不必要的復(fù)雜性。

擴(kuò)展解決方案的高層目標(biāo)是使堆棧減少應(yīng)用程序最常見請(qǐng)求的工作,或有效地將無(wú)法消除的工作負(fù)載分配到多個(gè)資源中。 縮放技術(shù)執(zhí)行此操作的方式通常會(huì)轉(zhuǎn)換為以下一項(xiàng)或多項(xiàng):

  • 重用應(yīng)用程序已查找的數(shù)據(jù)
  • 消除了客戶端對(duì)應(yīng)用程序已經(jīng)擁有的數(shù)據(jù)的請(qǐng)求
  • 存儲(chǔ)常見操作的結(jié)果,以減少重復(fù)計(jì)算
  • 在請(qǐng)求-響應(yīng)周期中避免復(fù)雜的操作

許多擴(kuò)展技術(shù)可以歸結(jié)為某種形式的緩存。 過去,記憶是昂貴而稀缺的。 如今,將其添加到服務(wù)器已經(jīng)很便宜。 與磁盤或網(wǎng)絡(luò)相比,內(nèi)存訪問數(shù)據(jù)的速度要快許多個(gè)數(shù)量級(jí)。 在這個(gè)用戶有太多選擇的時(shí)代,再加上我們的關(guān)注度極低,速度和性能對(duì)于您的應(yīng)用程序的生存至關(guān)重要。

數(shù)據(jù)庫(kù)擴(kuò)展解決方案

1. 緩存數(shù)據(jù)庫(kù)查詢

緩存數(shù)據(jù)庫(kù)查詢是可以處理數(shù)據(jù)庫(kù)負(fù)載的最簡(jiǎn)單的改進(jìn)之一。通常,應(yīng)用程序?qū)贁?shù)查詢,這些查詢構(gòu)成了大多數(shù)請(qǐng)求。不必每次都在網(wǎng)絡(luò)上對(duì)該數(shù)據(jù)進(jìn)行往返,而是可以將其簡(jiǎn)單地緩存在Web服務(wù)器的內(nèi)存中。第一個(gè)請(qǐng)求將從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù),并將結(jié)果緩存在服務(wù)器上,以后的請(qǐng)求將從緩存中讀取。由于數(shù)據(jù)花費(fèi)在網(wǎng)絡(luò)上的時(shí)間更少,并且距離客戶端更近,因此可以提高性能。

由于大量的工作負(fù)載分配給了緩存系統(tǒng),因此還導(dǎo)致更多的數(shù)據(jù)庫(kù)服務(wù)器資源可用。除了提高可用性之外,如果數(shù)據(jù)庫(kù)不可用,則高速緩存仍可以為應(yīng)用程序提供連續(xù)服務(wù),從而使系統(tǒng)對(duì)故障的恢復(fù)能力更強(qiáng)。您可以使用許多工具對(duì)數(shù)據(jù)庫(kù)查詢?nèi)罩具M(jìn)行分析,因此您可以查看哪些查詢花費(fèi)的時(shí)間最長(zhǎng),哪些查詢運(yùn)行的頻率最高。

顯然,緩存的數(shù)據(jù)會(huì)很快變得"陳舊"或過時(shí)。 您將必須選擇要緩存的數(shù)據(jù)以及要保留多長(zhǎng)時(shí)間。 例如,在線報(bào)紙每24小時(shí)就會(huì)有一份新的日?qǐng)?bào),而不是每次用戶訪問該網(wǎng)站時(shí)都從數(shù)據(jù)庫(kù)中請(qǐng)求該數(shù)據(jù),而是可以將這些數(shù)據(jù)在Web服務(wù)器上緩存24小時(shí)并直接從服務(wù)器提供該數(shù)據(jù)。 。 產(chǎn)品或業(yè)務(wù)要求將決定哪些內(nèi)容可以緩存,哪些內(nèi)容不能緩存。

2. 數(shù)據(jù)庫(kù)索引

數(shù)據(jù)庫(kù)索引是一種提高數(shù)據(jù)庫(kù)表上數(shù)據(jù)檢索操作速度的技術(shù)。 索引用于快速定位數(shù)據(jù),而不必每次訪問表時(shí)都在表中搜索每一行。 通常,數(shù)據(jù)庫(kù)索引的數(shù)據(jù)結(jié)構(gòu)將是二進(jìn)制搜索樹。 這允許將訪問數(shù)據(jù)的時(shí)間復(fù)雜度從線性時(shí)間O(n)降低到對(duì)數(shù)時(shí)間Olog(n)。

根據(jù)表中的行數(shù),這可以節(jié)省大量使用索引列的查詢的時(shí)間。 例如,如果您有10,000個(gè)用戶,并且您的應(yīng)用程序的配置文件頁(yè)面按用戶名查找用戶,則未編制索引的查詢將檢查users表中的每一行,直到找到與傳遞給查詢的用戶名匹配的配置文件 。 這可能需要多達(dá)10,000個(gè)行檢查O(n)。 通過為"用戶名"列創(chuàng)建索引,數(shù)據(jù)庫(kù)可以在對(duì)數(shù)時(shí)間復(fù)雜度(Olog(n))下提取該行。 在這種情況下,行檢查的最大數(shù)量將是14,而不是10,000!

有效的索引編制通過提高效率來減輕數(shù)據(jù)庫(kù)的負(fù)載,這還可以顯著提高性能,從而帶來更好的用戶體驗(yàn)。 創(chuàng)建索引確實(shí)會(huì)添加另一組要存儲(chǔ)在數(shù)據(jù)庫(kù)中的數(shù)據(jù),因此在確定要索引的字段時(shí)必須謹(jǐn)慎判斷。 即使使用了現(xiàn)有的存儲(chǔ)空間,索引也還是很值得的,尤其是在現(xiàn)代開發(fā)中,內(nèi)存便宜且性能是生存不可或缺的一部分。

在本節(jié)中略微提到了時(shí)間復(fù)雜度和數(shù)據(jù)結(jié)構(gòu),但沒有進(jìn)行詳盡的解釋。 如果您有興趣學(xué)習(xí)或希望對(duì)時(shí)間復(fù)雜性和數(shù)據(jù)結(jié)構(gòu)有所了解,那么上面鏈接的文章非常有用!

3. 會(huì)話存儲(chǔ)

許多應(yīng)用程序通過將會(huì)話ID存儲(chǔ)在cookie中,然后將每個(gè)會(huì)話的鍵/值對(duì)的實(shí)際數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫(kù)表中來處理會(huì)話。 這可能會(huì)成為對(duì)數(shù)據(jù)庫(kù)的大量讀取和寫入。 如果會(huì)話數(shù)據(jù)使數(shù)據(jù)庫(kù)不堪重負(fù),那么最好重新考慮如何以及在何處存儲(chǔ)該數(shù)據(jù)。

將會(huì)話數(shù)據(jù)移動(dòng)到內(nèi)存緩存工具(例如redis或memcached)可能是一個(gè)不錯(cuò)的選擇。 由于內(nèi)存中的內(nèi)存比大多數(shù)數(shù)據(jù)庫(kù)使用的持久性磁盤存儲(chǔ)要快,因此這將減輕數(shù)據(jù)庫(kù)中會(huì)話數(shù)據(jù)的負(fù)擔(dān),并提高訪問速度。 但是,由于內(nèi)存是易失性內(nèi)存,因此如果緩存系統(tǒng)脫機(jī),則存在丟失所有會(huì)話數(shù)據(jù)的風(fēng)險(xiǎn)。

您也可以考慮將會(huì)話實(shí)現(xiàn)更改為將會(huì)話信息存儲(chǔ)在cookie本身中,這將使您保持會(huì)話狀態(tài)的方法從服務(wù)器移到客戶端。 JWT是這種模式最流行的實(shí)現(xiàn)。 這將減輕數(shù)據(jù)庫(kù)中所有會(huì)話數(shù)據(jù)的負(fù)擔(dān),并消除服務(wù)器端會(huì)話的依賴性,盡管這會(huì)帶來一系列挑戰(zhàn)。

4. 從站主復(fù)制

如果即使在緩存通用查詢,創(chuàng)建有效索引以及處理會(huì)話存儲(chǔ)之后,數(shù)據(jù)庫(kù)仍然承受著來自讀取的過多負(fù)載,那么復(fù)制可能是下一個(gè)最佳選擇。

使用從屬主復(fù)制,您只有一個(gè)數(shù)據(jù)庫(kù)可以寫入。 它被克隆到您讀取的幾個(gè)(根據(jù)需要)從數(shù)據(jù)庫(kù)中,每個(gè)從數(shù)據(jù)庫(kù)都位于另一臺(tái)計(jì)算機(jī)上(請(qǐng)參見下圖)。 這樣可以減輕主數(shù)據(jù)庫(kù)的讀取負(fù)擔(dān),并將其分配到多個(gè)服務(wù)器上。 該模型還提高了寫操作的性能,因?yàn)橹髟O(shè)備專門用于寫操作,同時(shí)由于從設(shè)備分布在不同區(qū)域,因此可以顯著提高讀取速度并減少延遲。

你需要了解的5種數(shù)據(jù)庫(kù)擴(kuò)展解決方案

由于每個(gè)從數(shù)據(jù)庫(kù)都在另一臺(tái)計(jì)算機(jī)上,因此對(duì)主數(shù)據(jù)庫(kù)的寫入需要傳播到從數(shù)據(jù)庫(kù),這可能導(dǎo)致數(shù)據(jù)不一致。 如果您需要立即讀取寫入數(shù)據(jù)庫(kù)的數(shù)據(jù),例如您正在更新配置文件并希望立即呈現(xiàn)它,則可以選擇從master數(shù)據(jù)庫(kù)讀取。 從屬主復(fù)制是一個(gè)功能非常強(qiáng)大的擴(kuò)展解決方案,但是它具有相當(dāng)多的復(fù)雜性。 在用盡了更簡(jiǎn)單的解決方案并確保在應(yīng)用程序內(nèi)進(jìn)行有效優(yōu)化之后,實(shí)施此解決方案是明智的。

5. 數(shù)據(jù)庫(kù)分片

到目前為止,這些擴(kuò)展解決方案中的大多數(shù)都專注于通過管理對(duì)數(shù)據(jù)庫(kù)的讀取來減少負(fù)載。 數(shù)據(jù)庫(kù)分片是一種水平擴(kuò)展解決方案,可通過管理對(duì)數(shù)據(jù)庫(kù)的讀寫來管理負(fù)載。 這是一種架構(gòu)模式,涉及將主數(shù)據(jù)庫(kù)拆分(分區(qū))為多個(gè)數(shù)據(jù)庫(kù)(分片)的過程,這些數(shù)據(jù)庫(kù)可以更快,更易于管理。

數(shù)據(jù)庫(kù)分片技術(shù)有兩種類型:垂直分片和水平分片(請(qǐng)參見下圖)。 使用水平分區(qū)時(shí),將表取出并放在不同的機(jī)器上,每個(gè)表具有相同的列,但行不同。 垂直分區(qū)更為復(fù)雜,其中涉及在多臺(tái)計(jì)算機(jī)之間拆分一個(gè)表。 一個(gè)表被分離出來并放入新的不同表中。 一個(gè)垂直分區(qū)中保存的數(shù)據(jù)獨(dú)立于所有其他分區(qū)中的數(shù)據(jù),每個(gè)表都包含不同的行和列。

 

你需要了解的5種數(shù)據(jù)庫(kù)擴(kuò)展解決方案

 

 

> Horizontal Sharding

 

 

你需要了解的5種數(shù)據(jù)庫(kù)擴(kuò)展解決方案

 

 

> Vertical Sharding

 

兩種分片技術(shù)都有助于水平擴(kuò)展,也稱為"向外擴(kuò)展",這使您可以在系統(tǒng)中添加更多機(jī)器以分配/分散負(fù)載。 水平擴(kuò)展通常與垂直擴(kuò)展(也稱為"向上擴(kuò)展")形成對(duì)比,后者涉及升級(jí)現(xiàn)有服務(wù)器的硬件。 擴(kuò)展數(shù)據(jù)庫(kù)相對(duì)簡(jiǎn)單,盡管任何非分布式數(shù)據(jù)庫(kù)在計(jì)算能力和存儲(chǔ)方面都有其局限性,因此擁有自由擴(kuò)展的自由度可使您的系統(tǒng)更加靈活。

分片的數(shù)據(jù)庫(kù)體系結(jié)構(gòu)還可以顯著提高應(yīng)用程序查詢的速度,并提供增強(qiáng)的故障恢復(fù)能力。 在未分片的數(shù)據(jù)庫(kù)上提交查詢時(shí),它可能不得不搜索表中的每一行,這可能會(huì)非常慢。 或者,通過將一個(gè)表拆分為多個(gè)表,查詢必須遍歷更少的記錄才能返回結(jié)果。 由于每個(gè)表都在單獨(dú)的服務(wù)器上,因此減輕了服務(wù)器不可用帶來的影響。 對(duì)于分片的數(shù)據(jù)庫(kù),與未分片的數(shù)據(jù)庫(kù)相比,中斷的影響可能僅影響單個(gè)分片,在未分片的數(shù)據(jù)庫(kù)中,中斷可能使整個(gè)應(yīng)用程序不可用。

具有分片的數(shù)據(jù)庫(kù)體系結(jié)構(gòu)可帶來一些巨大的好處,但是,它很復(fù)雜且實(shí)現(xiàn)和維護(hù)成本很高。 在用完其他擴(kuò)展解決方案之后,絕對(duì)可以考慮使用此選項(xiàng),因?yàn)闊o(wú)效實(shí)施的后果可能非常嚴(yán)重。

結(jié)論

恭喜,您的應(yīng)用程序現(xiàn)在已經(jīng)有了適當(dāng)?shù)慕鉀Q方案,可以成功處理數(shù)據(jù)庫(kù)負(fù)載并隨著應(yīng)用程序的成功進(jìn)行擴(kuò)展! 盡管還沒有足夠的時(shí)間來慶祝……有效擴(kuò)展的服務(wù)器是高性能和可靠應(yīng)用程序不可或缺的一部分。

 

責(zé)任編輯:趙寧寧 來源: 今日頭條
相關(guān)推薦

2020-12-09 09:30:57

前端開發(fā)技術(shù)

2021-01-26 01:03:36

云原生工具云原生

2019-07-30 12:05:20

數(shù)據(jù)科學(xué)采樣算法

2021-02-24 11:13:28

網(wǎng)絡(luò)網(wǎng)絡(luò)通信互聯(lián)網(wǎng)

2021-03-11 10:49:27

數(shù)據(jù)管理

2021-05-06 08:00:00

人工智能神經(jīng)網(wǎng)絡(luò)深度學(xué)習(xí)

2012-06-27 09:11:47

2012-06-26 10:13:55

2011-04-01 11:16:06

hessian

2020-07-10 09:47:20

自動(dòng)化物聯(lián)網(wǎng)IOT

2021-09-15 09:51:36

數(shù)據(jù)庫(kù)架構(gòu)技術(shù)

2019-07-18 12:57:21

大數(shù)據(jù)互聯(lián)網(wǎng)算法

2018-12-24 18:35:11

NoSQLRedisMongoDB

2023-09-06 13:16:00

數(shù)據(jù)庫(kù)數(shù)據(jù)

2010-05-26 17:05:48

MySQL數(shù)據(jù)類型

2011-05-13 13:38:49

數(shù)據(jù)庫(kù)對(duì)象

2009-11-18 16:10:00

2011-03-07 16:42:05

MySQL數(shù)據(jù)庫(kù)安全

2017-10-12 18:42:08

前端HTML5基礎(chǔ)知識(shí)

2015-09-17 09:36:46

Chrome改變
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)