在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

要設(shè)計(jì)出一套能支撐幾十億人的系統(tǒng)是很困難的?

jf_ro2CN3Fa ? 來源:芋道源碼 ? 作者:芋道源碼 ? 2022-10-27 11:07 ? 次閱讀

要設(shè)計(jì)出一套能支撐幾十億人的系統(tǒng)是很困難的。對于軟件架構(gòu)師來說,這一直是一項(xiàng)很大的挑戰(zhàn),但是,從現(xiàn)在開始,看完我的文章,你就會覺得容易很多了。

下面是我在本文中提到的幾個(gè)話題

從最簡單的開始:萬事合一。

可擴(kuò)展性的藝術(shù):縱向擴(kuò)展,橫向擴(kuò)展。

擴(kuò)展關(guān)系型數(shù)據(jù)庫:主 - 從復(fù)制、主 - 主復(fù)制、聯(lián)合、分片、非規(guī)范化和 SQL 調(diào)優(yōu)。

使用哪種數(shù)據(jù)庫:NoSQL 還是 SQL?

先進(jìn)概念:緩存、CDN、geoDNS 等。

在這篇文章里,我不打算談?wù)撝T如容錯(cuò)、可靠性、高可用性等高性能計(jì)算的通用術(shù)語。

廢話不多說,言歸正傳。

1 從頭開始

在下圖中,我要先設(shè)計(jì)一個(gè)有一些用戶的基本應(yīng)用。最容易的方式是在一臺服務(wù)器上部署整個(gè)應(yīng)用。我們中的大部分人可能都是這樣開始的。

一個(gè)網(wǎng)站(包括 API)在 Apache(或 Tomcat)等網(wǎng)絡(luò)服務(wù)器上運(yùn)行。

一個(gè) Oracle(或 MySQL)之類的數(shù)據(jù)庫。

a32b4608-559e-11ed-a3b6-dac502259ad0.jpg

我們在同一臺物理機(jī)上同時(shí)擁有 Web 服務(wù)器和數(shù)據(jù)庫服務(wù)器。

但是,當(dāng)前的架構(gòu)存在下列缺陷:

如果數(shù)據(jù)庫出現(xiàn)故障,則系統(tǒng)將失效。

一旦網(wǎng)絡(luò)服務(wù)器出現(xiàn)故障,則會導(dǎo)致整個(gè)系統(tǒng)的癱瘓。

在這種情況下,我們沒有故障轉(zhuǎn)移和冗余。如果一個(gè)服務(wù)器出現(xiàn)故障,所有的都將會失效。

使用 DNS 服務(wù)器來解析主機(jī)名和 IP 地址

在上圖中,用戶(或客戶端)連接到 DNS 系統(tǒng),以獲得我們系統(tǒng)所在的服務(wù)器的互聯(lián)網(wǎng)協(xié)議(IP)地址。一旦獲得 IP 地址,請求就會直接發(fā)送到我們的系統(tǒng)。

每次訪問網(wǎng)站時(shí),計(jì)算機(jī)都會執(zhí)行 DNS 查詢。

通常情況下,域名系統(tǒng)(DNS)服務(wù)器是作為托管公司提供的付費(fèi)服務(wù)使用的,并不在你自己的服務(wù)器上運(yùn)行。

基于 Spring Boot + MyBatis Plus + Vue & Element 實(shí)現(xiàn)的后臺管理系統(tǒng) + 用戶小程序,支持 RBAC 動態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能

項(xiàng)目地址:https://gitee.com/zhijiantianya/ruoyi-vue-pro

視頻教程:https://doc.iocoder.cn/video/

2 可擴(kuò)展性的藝術(shù)

由于很多原因,我們的系統(tǒng)可能需要進(jìn)行擴(kuò)展,例如數(shù)據(jù)量的增加、工作量的增加(如事務(wù)的數(shù)目),以及用戶的增加。

可擴(kuò)展性一般是指添加更多的資源,在不影響用戶體驗(yàn)的情況下處理更多的用戶、客戶機(jī)、數(shù)據(jù)、事務(wù)或請求。

我們必須決定怎樣才能擴(kuò)大這個(gè)系統(tǒng)的規(guī)模。在這種情況下,有以下兩種類型的擴(kuò)展:縱向擴(kuò)展(scale up) 和橫向擴(kuò)展(scale out)。

a34a3e5a-559e-11ed-a3b6-dac502259ad0.jpg

縱向擴(kuò)展 vs 橫向擴(kuò)展

縱向擴(kuò)展:在現(xiàn)有服務(wù)器上增加更多的內(nèi)存和 CPU

這也被稱為“垂直擴(kuò)展”,是指為了提高系統(tǒng)處理日益增長的負(fù)載的能力而使系統(tǒng)能夠最大限度地利用資源——例如,通過增加內(nèi)存和 CPU 來增加服務(wù)器的能力。

如果我們運(yùn)行的服務(wù)器有 8G 的內(nèi)存,那么只要更換或者增加硬件,就可以輕松地提升到 32G,甚至 128G。

有很多方法可以進(jìn)行縱向擴(kuò)展,具體如下:

通過在 RAID 陣列中增加更多的硬盤來增加 I/O 容量。

通過切換到固態(tài)硬盤(SSD)來改善 I/O 訪問時(shí)間。

切換到具有更多處理器的服務(wù)器。

通過升級網(wǎng)絡(luò)接口或安裝額外的網(wǎng)絡(luò)接口來提高網(wǎng)絡(luò)吞吐量。

通過增加內(nèi)存來減少 I/O 操作。

對于小型系統(tǒng)來說,縱向擴(kuò)展是一個(gè)很好的選擇,可以負(fù)擔(dān)得起硬件升級,但也存在一些嚴(yán)重的限制,具體如下:

“不可能在一臺服務(wù)器上增加無限的能力”。這主要取決于操作系統(tǒng)和服務(wù)器的內(nèi)存總線寬度。

給系統(tǒng)升級內(nèi)存時(shí),必須關(guān)掉服務(wù)器,因此,如果系統(tǒng)只有一臺服務(wù)器,停機(jī)是不可避免的。

強(qiáng)大的機(jī)器往往要比流行的硬件昂貴很多。

縱向擴(kuò)展不僅適用于硬件方面,也適用于軟件方面,例如,它包括優(yōu)化查詢和應(yīng)用程序代碼

相比之下,縱向減縮(scale down)是指從現(xiàn)有的服務(wù)器中移除現(xiàn)有的資源,如 CPU、內(nèi)存和磁盤。

您需要多臺服務(wù)器嗎?

當(dāng)用戶數(shù)量不斷增加時(shí),一臺服務(wù)器將無法滿足需求。我們需要考慮將一臺單獨(dú)的服務(wù)器分離到多臺服務(wù)器上。

a378b294-559e-11ed-a3b6-dac502259ad0.jpg

當(dāng)用戶數(shù)量不斷增加時(shí),一臺服務(wù)器將無法滿足需求。

采用該架構(gòu)有如下優(yōu)勢:

可對 Web 服務(wù)器進(jìn)行不同于數(shù)據(jù)庫服務(wù)器的調(diào)優(yōu)。

網(wǎng)絡(luò)服務(wù)器需要更好的 CPU,而數(shù)據(jù)庫服務(wù)器需要更多的內(nèi)存。

為 Web 層和數(shù)據(jù)層提供單獨(dú)的服務(wù)器,允許它們彼此獨(dú)立地進(jìn)行擴(kuò)展。

橫向擴(kuò)展:添加任意數(shù)量的硬件和軟件實(shí)體

這也被稱為“水平擴(kuò)展”,是指向資源池中添加更多的實(shí)體(如機(jī)器、服務(wù)等)。橫向擴(kuò)展要比縱向擴(kuò)展更難實(shí)現(xiàn),因?yàn)槲覀儽仨氃诮⒁粋€(gè)系統(tǒng)之前就把這個(gè)問題考慮進(jìn)去。

開始時(shí),為了滿足最基本的需求,我們需要更多的服務(wù)器,因此橫向擴(kuò)展最初往往花費(fèi)更多,但是到了最后,我們將獲得更多的收益。我們需要權(quán)衡利弊。

服務(wù)器數(shù)量的增長意味著更多的資源需要維護(hù)。同時(shí),還必須對系統(tǒng)代碼進(jìn)行修改,以便實(shí)現(xiàn)在多臺服務(wù)器間進(jìn)行并行和分配工作。

與此相反,橫向減縮(Scale in)指的是刪除現(xiàn)有服務(wù)器的過程。

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實(shí)現(xiàn)的后臺管理系統(tǒng) + 用戶小程序,支持 RBAC 動態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能

項(xiàng)目地址:https://gitee.com/zhijiantianya/yudao-cloud

視頻教程:https://doc.iocoder.cn/video/

3 使用負(fù)載均衡器來均衡所有節(jié)點(diǎn)上的流量

負(fù)載均衡器是一種專門的硬件或軟件組件,它可以幫助分散流量到服務(wù)器集群,從而改善系統(tǒng)的響應(yīng)能力和可用性,包括但不限于應(yīng)用程序、網(wǎng)站或數(shù)據(jù)庫。

a39f40a8-559e-11ed-a3b6-dac502259ad0.jpg

使用負(fù)載均衡器來均衡所有節(jié)點(diǎn)之間的流量。

負(fù)載均衡器一般都是在客戶端與服務(wù)器之間,接受傳入的網(wǎng)絡(luò)及應(yīng)用程序的流量,并利用各種算法,將流量分配到多個(gè)后端服務(wù)器。所以,它也可以用于各種場合,比如 Web 服務(wù)器與數(shù)據(jù)庫服務(wù)器之間,以及客戶端和 Web 服務(wù)器之間。

HAProxy 和 Nginx 是目前比較受歡迎的開源負(fù)載均衡軟件。

負(fù)載均衡器技術(shù)是一種能夠改善系統(tǒng)可用性的容錯(cuò)保護(hù)方法,具體如下:

如果服務(wù)器 1 脫機(jī),則所有的流量將被路由到服務(wù)器 2 和服務(wù)器 3。網(wǎng)站就不會脫機(jī)。你還需要在服務(wù)器池中添加一個(gè)新的健康服務(wù)器來均衡負(fù)載。

當(dāng)流量快速增長時(shí),你只需要向網(wǎng)站服務(wù)器池添加更多的服務(wù)器,負(fù)載均衡器將為你路由流量。

負(fù)載均衡器通過不同的策略和任務(wù)分配算法對負(fù)載進(jìn)行了最優(yōu)分配,具體如下:

循環(huán):在這種情況下,每個(gè)服務(wù)器按順序接收請求,類似于先進(jìn)先出(FIFO)。

最少的連接數(shù):連接數(shù)最少的服務(wù)器將被引導(dǎo)到請求。

最快的響應(yīng)時(shí)間:具有最快響應(yīng)時(shí)間的服務(wù)器(最近或經(jīng)常)將被引導(dǎo)到請求。

加權(quán):較強(qiáng)大的服務(wù)器將比較弱的服務(wù)器收到更多的請求加權(quán)策略。

IP 哈希:在這種情況下,計(jì)算客戶的 IP 地址的哈希值,將請求重定向到服務(wù)器。

在多個(gè)服務(wù)器之間均衡請求的最直接方法是使用一個(gè)硬件設(shè)備。

從共享 IP 中添加和刪除真正的服務(wù)器,將會立即發(fā)生。

負(fù)載均衡可以根據(jù)需要進(jìn)行。

軟件負(fù)載均衡是硬件負(fù)載均衡器的一個(gè)廉價(jià)替代品。其操作于第 4 層(網(wǎng)絡(luò)層)和第 7 層(應(yīng)用層)。

第 4 層:負(fù)載均衡器使用網(wǎng)絡(luò)層的 TCP 提供的信息。在這一層,它一般不會查看所請求的內(nèi)容,而是選擇一臺服務(wù)器。

第 7 層:請求可以根據(jù)查詢字符串、cookies 或我們選擇的任何頭的信息,以及包括源和目標(biāo)地址在內(nèi)的常規(guī)層信息進(jìn)行均衡。

4 擴(kuò)展關(guān)系數(shù)據(jù)庫

對于一個(gè)簡單的系統(tǒng),我們可以通過 RDBMS,如 Oracle 或者 MySQL 來存儲數(shù)據(jù)項(xiàng)。然而,關(guān)系數(shù)據(jù)庫系統(tǒng)也存在著一些問題,尤其是在我們需要擴(kuò)展的時(shí)候。

有很多技術(shù)可以擴(kuò)展關(guān)系型數(shù)據(jù)庫:主 - 從復(fù)制、主 - 主復(fù)制、聯(lián)合、分片、非規(guī)范化和 SQL 調(diào)優(yōu)。

復(fù)制通常指的是一種技術(shù),可以讓我們在不同的機(jī)器上存儲同一數(shù)據(jù)的多個(gè)副本。

聯(lián)合(或功能分區(qū))將數(shù)據(jù)庫按功能進(jìn)行劃分。

分片是一種與分區(qū)相關(guān)的數(shù)據(jù)庫架構(gòu)模式,它將數(shù)據(jù)的不同部分放到不同的服務(wù)器上,不同的用戶將訪問數(shù)據(jù)集的不同部分。

非規(guī)范化試圖以犧牲一些寫入性能為代價(jià)來提高讀取性能,將數(shù)據(jù)寫入多個(gè)表中以避免昂貴的連接。

SQL 調(diào)優(yōu)。

主 - 從復(fù)制

主 - 從復(fù)制技術(shù)使一個(gè)數(shù)據(jù)庫服務(wù)器(主服務(wù)器)的數(shù)據(jù)被復(fù)制到一個(gè)或多個(gè)其他數(shù)據(jù)庫服務(wù)器(從服務(wù)器),如下圖所示:

a3b00848-559e-11ed-a3b6-dac502259ad0.jpg

對主服務(wù)器進(jìn)行的所有更新。

客戶端將連接到主服務(wù)器,并更新數(shù)據(jù)。

數(shù)據(jù)隨后會在從服務(wù)器上進(jìn)行傳輸,直到所有的數(shù)據(jù)在服務(wù)器上都是一致的。

在實(shí)踐中,還是存在一些瓶頸。

如果主服務(wù)器由于某種原因宕機(jī)了,數(shù)據(jù)仍然可以通過從服務(wù)器獲得,但是將無法再進(jìn)行新的寫入。

我們還需要一種新的算法,把一臺從服務(wù)器提升到主服務(wù)器。

下面是實(shí)現(xiàn)僅一臺服務(wù)器能處理更新請求的一些解決方案。

同步解決方案:只有當(dāng)所有的服務(wù)器都接受了修改數(shù)據(jù)的事務(wù)(分布式事務(wù))之后,才會被提交,因此,當(dāng)發(fā)生故障切換時(shí),數(shù)據(jù)不會丟失。

異步解決方案:提交 → 延遲 → 傳播到集群中的其他服務(wù)器,因此,當(dāng)發(fā)生故障切換時(shí),某些數(shù)據(jù)更新會丟失。

請記住,如果同步解決方案過慢,那就改成異步解決方案。

主 - 主復(fù)制

每個(gè)數(shù)據(jù)庫服務(wù)器都可以在其他服務(wù)器被當(dāng)作主服務(wù)器的同時(shí)充當(dāng)主服務(wù)器。在某個(gè)時(shí)間點(diǎn)上,所有的這服務(wù)器都會同步,以確保它們的數(shù)據(jù)是正確的、最新的。

a3cf02a2-559e-11ed-a3b6-dac502259ad0.jpg

所有節(jié)點(diǎn)讀寫所有數(shù)據(jù)。

以下是主 - 主復(fù)制的一些優(yōu)勢:

當(dāng)一臺主服務(wù)器發(fā)生故障時(shí),其他數(shù)據(jù)庫服務(wù)器可以正常運(yùn)行,并接替其工作。當(dāng)數(shù)據(jù)庫服務(wù)器重新上線時(shí),它將利用復(fù)制的方式趕上來。

主服務(wù)器可以位于幾個(gè)物理站點(diǎn),也可以分布在網(wǎng)絡(luò)上。

受限于主服務(wù)器處理更新的能力。

聯(lián)合

聯(lián)合(或功能分區(qū))將數(shù)據(jù)庫按功能劃分。例如,你可以有三個(gè)數(shù)據(jù)庫:Forum、users 和 products,而不是一個(gè)單一的單體數(shù)據(jù)庫,這樣就能降低對各個(gè)數(shù)據(jù)庫的讀寫流量,因此減少了復(fù)制滯后。

a3ede0dc-559e-11ed-a3b6-dac502259ad0.jpg

聯(lián)合按功能劃分?jǐn)?shù)據(jù)庫。

數(shù)據(jù)庫越小,可以容納在內(nèi)存中的數(shù)據(jù)就越多,這反過來會導(dǎo)致緩存點(diǎn)擊率的增加,這是由于緩存命中的改進(jìn)。因?yàn)椴恍枰獑我坏闹醒胫骺仄餍蛄谢瘜懖僮鳎阅憧梢赃M(jìn)行并行寫入,這樣就可以提高吞吐量。

分片

分片(也被稱為數(shù)據(jù)分區(qū)),是一種將大數(shù)據(jù)庫分成許多小部分的技術(shù),這樣每個(gè)數(shù)據(jù)庫只能管理數(shù)據(jù)的一個(gè)子集。

在理想情況下,我們有不同的用戶都與不同的數(shù)據(jù)庫節(jié)點(diǎn)對話。它有助于提高系統(tǒng)的可管理性、性能、可用性和負(fù)載均衡。

每個(gè)用戶只需要和一個(gè)服務(wù)器對話,所以可以從該服務(wù)器得到快速的響應(yīng)。

負(fù)載在服務(wù)器之間得到了很好的均衡——例如,如果我們有五個(gè)服務(wù)器,每個(gè)服務(wù)器只需要處理 20% 的負(fù)載。

在實(shí)踐中,有許多不同的技術(shù)可以將一個(gè)數(shù)據(jù)庫分解成多個(gè)小部分。

水平分區(qū)

這種技術(shù)是將不同的行放到不同的表中。比如,如果我們在一個(gè)表中存儲用戶資料,我們可以決定將 ID 小于 1000 的用戶存儲在一個(gè)表中,而將 ID 大于 1001 小于 2000 的用戶存儲在另一個(gè)表中。

a4268f54-559e-11ed-a3b6-dac502259ad0.jpg

我們將不同的行放入不同的表中。

垂直分區(qū)

在這種情況下,我們對數(shù)據(jù)進(jìn)行劃分,將與特定特性相關(guān)的表存儲在它們自己的服務(wù)器上。例如,如果我們正在建立一個(gè)類似于 Instagram 的系統(tǒng)——需要存儲與用戶、他們上傳的照片以及他們所關(guān)注的人有關(guān)的數(shù)據(jù)——我們可以決定將用戶的資料信息放在一臺數(shù)據(jù)庫服務(wù)器上,好友列表放在另一臺服務(wù)器上,而照片放在第三臺服務(wù)器上。

a4531132-559e-11ed-a3b6-dac502259ad0.jpg

我們將數(shù)據(jù)劃分,存儲與特定特性相關(guān)的表,并將其存儲在各自的服務(wù)器上。

基于目錄的分區(qū)

解決這個(gè)問題的一個(gè)松散耦合的方法,就是創(chuàng)建一個(gè)查詢服務(wù),它了解你當(dāng)前的分區(qū)模式,并保持每個(gè)實(shí)體以及存儲在哪個(gè)數(shù)據(jù)庫分片的映射關(guān)系。

當(dāng)數(shù)據(jù)存儲可能需要擴(kuò)展到超出單個(gè)存儲節(jié)點(diǎn)的可用資源時(shí),或者通過減少數(shù)據(jù)存儲中的爭用來提高性能時(shí),我們可以使用這種方法。但請記住,分片技術(shù)存在以下一些常見問題:

數(shù)據(jù)庫連接變得更加昂貴,在某些情況下是不可行的。

分片會破壞數(shù)據(jù)庫的引用完整性。

數(shù)據(jù)庫模式的改變會變得非常昂貴。

數(shù)據(jù)分布不均勻,而且在分片上有大量負(fù)載。

非規(guī)范化

非規(guī)范化的目的是提高讀取性能,但卻要犧牲一定的寫入性能。為了避免昂貴的連接,可以將數(shù)據(jù)的冗余副本寫入到多個(gè)表中。

一旦數(shù)據(jù)通過聯(lián)合和分片等技術(shù)變得分散,管理跨數(shù)據(jù)中心的連接將會進(jìn)一步增加復(fù)雜性。非規(guī)范化可以避免需要如此復(fù)雜的連接。

在大多數(shù)系統(tǒng)中,讀取操作的次數(shù)遠(yuǎn)遠(yuǎn)多于寫入操作,大約是 100:1,甚至是 1000:1。導(dǎo)致讀取復(fù)雜數(shù)據(jù)庫連接可能會非常昂貴,而且會耗費(fèi)很多時(shí)間在磁盤上。

有些 RDBMS,像 PostgreSQL 和 Oracle 都支持物化視圖,它們可以處理存儲冗余數(shù)據(jù),并使冗余副本保持一致。

Facebook 的 Ryan Mack 在其出色的文章《建立時(shí)間表:利用非規(guī)范化的力量擴(kuò)大規(guī)模來保存你的生活故事》(Building Timeline: Scaling up to hold your life story)中分享了很多時(shí)間表自身的實(shí)現(xiàn)故事。

5 使用哪個(gè)數(shù)據(jù)庫?

在數(shù)據(jù)庫領(lǐng)域,主要有兩種類型的解決方案。SQL 與 NoSQL。它們的構(gòu)建方式、存儲信息的類型以及存儲方式都有所不同。

SQL

關(guān)系型數(shù)據(jù)庫以行和列的形式存儲數(shù)據(jù)。每一行包含一個(gè)實(shí)體的所有信息,每一列包含所有獨(dú)立的數(shù)據(jù)點(diǎn)。

目前最受歡迎的關(guān)系型數(shù)據(jù)庫是 MySQL、Oracle、MS SQL Server、SQLite、Postgres 和 MariaDB。

NoSQL

它也被稱為非關(guān)系型數(shù)據(jù)庫。這些數(shù)據(jù)庫一般分為五大類別:Key-Value、Graph、Column、Document 和 Blob 存儲。

鍵值存儲

數(shù)據(jù)被存儲在一個(gè)鍵值對的數(shù)組中。key(鍵)是一個(gè)與 value(值)相連的屬性名稱。

知名的鍵值存儲有 Redis、Voldemort 和 Dynamo。

文檔數(shù)據(jù)庫

在這些數(shù)據(jù)庫中,數(shù)據(jù)被存儲在文檔中(而不是表格中的行和列),這些文檔被分組在集合中。每個(gè)文檔都可能是截然不同的結(jié)構(gòu)。

文檔數(shù)據(jù)庫包括 CouchDB 和 MongoDB。

寬列式數(shù)據(jù)庫

在列式數(shù)據(jù)庫中,我們沒有“表”,而是有列族,它們是行的容器。與關(guān)系型數(shù)據(jù)庫不同,我們不必事先了解所有的列,也不必要求每一行的列數(shù)目都相同。

列式數(shù)據(jù)庫最適合分析大型數(shù)據(jù)集,著名的有 Cassandra 和 HBase。

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

這些數(shù)據(jù)庫用于存儲數(shù)據(jù),其關(guān)系最好用圖來表示。數(shù)據(jù)被保存在帶有節(jié)點(diǎn)(實(shí)體)、屬性(關(guān)于實(shí)體的信息)和線(實(shí)體之間的連接)的圖結(jié)構(gòu)中。

圖數(shù)據(jù)庫的例子包括 Neo4J 和 InfiniteGraph。

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

Blob 更像是文件的鍵 / 值存儲,可以通過 Amazon S3、Windows Azure Blob Storage、Google Cloud Storage、Rackspace Cloud Files 或 OpenStack Swift 等 API 訪問。

如何選擇要使用的數(shù)據(jù)庫?

當(dāng)涉及數(shù)據(jù)庫技術(shù)時(shí),沒有放之四海而皆準(zhǔn)的解決方案。這就是為什么許多企業(yè)同時(shí)依賴 SQL 和 NoSQL 數(shù)據(jù)庫來滿足不同的需求。

請看下面我畫的思維導(dǎo)圖!

a4671966-559e-11ed-a3b6-dac502259ad0.jpg

使用哪個(gè)數(shù)據(jù)庫?

6 橫向擴(kuò)展 Web 層

我們已經(jīng)擴(kuò)展了數(shù)據(jù)層,現(xiàn)在我們也需要擴(kuò)展 Web 層。為了做到這一點(diǎn),我們需要將用戶會話的數(shù)據(jù)(狀態(tài))移出 Web 層,將其存儲在數(shù)據(jù)庫中,如關(guān)系型數(shù)據(jù)庫或 NoSQL。這也被稱為無狀態(tài)架構(gòu)。

a4843492-559e-11ed-a3b6-dac502259ad0.jpg

無狀態(tài)系統(tǒng)很簡單。

不要使用有狀態(tài)架構(gòu)。

由于狀態(tài)的實(shí)現(xiàn)會限制可擴(kuò)展性。降低可用性和提高成本,所以我們需要盡可能地選擇無狀態(tài)架構(gòu)。

在上面的場景中,由于可以為最優(yōu)的請求處理選擇任意服務(wù)器,因此負(fù)載均衡器能夠可以達(dá)到最高的效率。

7 先進(jìn)概念

緩存

負(fù)載均衡能夠幫助你橫向擴(kuò)展越來越多的服務(wù)器,但緩存可以讓你更好地利用現(xiàn)有的資源,從而更快速地向下一個(gè)請求提供數(shù)據(jù)。

a4a3951c-559e-11ed-a3b6-dac502259ad0.jpg

如果數(shù)據(jù)不在緩存中,就從數(shù)據(jù)庫中獲取,然后保存到緩存中,再從緩存中讀取。

我們可以在服務(wù)器中添加緩存,避免從服務(wù)器中直接讀取網(wǎng)頁或數(shù)據(jù),從而降低了服務(wù)器的響應(yīng)時(shí)間及負(fù)載。這使得我們的應(yīng)用程序更加易于擴(kuò)展。

緩存可以被用于許多層,例如數(shù)據(jù)庫層、Web 服務(wù)器層和網(wǎng)絡(luò)層。

內(nèi)容分發(fā)網(wǎng)絡(luò) (CDN )

CDN 服務(wù)器保存內(nèi)容(如圖像、網(wǎng)頁等)的緩存副本,并從最近的位置提供服務(wù)。

CDN 的使用可以提高用戶的頁面加載時(shí)間,因?yàn)閿?shù)據(jù)是在離它最近的地方檢索的。這也有助于提高內(nèi)容的可用性,因?yàn)樗淮鎯υ诙鄠€(gè)地點(diǎn)。

使用 CDN 改善了用戶的頁面加載時(shí)間,因?yàn)閿?shù)據(jù)是在最接近它的地方被檢索到的。

CDN 服務(wù)器向我們的網(wǎng)絡(luò)服務(wù)器發(fā)出請求,以驗(yàn)證被緩存的內(nèi)容,并在需要時(shí)更新它們。被緩存的內(nèi)容通常是靜態(tài)的,如 HTML 頁面、圖像、JavaScript 文件、CSS 文件等。

走向全球

隨著你的應(yīng)用程序在全球范圍內(nèi)推廣,你將會在全球范圍內(nèi)建立和運(yùn)營數(shù)據(jù)中心,使你的產(chǎn)品每天 24 小時(shí)、每周 7 天保持運(yùn)行。收到的請求將被路由到基于 GeoDNS 的“最佳”數(shù)據(jù)中心。

a4c95da6-559e-11ed-a3b6-dac502259ad0.jpg

當(dāng)你的應(yīng)用程序走向全球時(shí)……

GeoDNS 是一項(xiàng) DNS 服務(wù),它可以將一個(gè)域名按照用戶所在的位置解析為 IP 地址。來自亞洲的客戶端可以得到與來自歐洲客戶端的不同 IP 地址。

把它整合在一起

通過迭代應(yīng)用所有這些技術(shù),我們可以輕松地將系統(tǒng)擴(kuò)展到 1 億多用戶,如無狀態(tài)架構(gòu)、應(yīng)用負(fù)載均衡器、盡可能多地使用緩存數(shù)據(jù)、支持多個(gè)數(shù)據(jù)中心、在 CDN 上托管靜態(tài)資產(chǎn)、通過分片擴(kuò)展你的數(shù)據(jù)層,諸如此類。

a54483aa-559e-11ed-a3b6-dac502259ad0.jpg

擴(kuò)展是一個(gè)迭代的過程。

8 后面會討論哪些話題?

有很多方法可以提高可擴(kuò)展性和高性能,如下所示:

分片和復(fù)制技術(shù)相結(jié)合。

長輪詢 vs Websockets vs 服務(wù)器發(fā)送事件。

索引和代理。

SQL 調(diào)優(yōu)。

彈性計(jì)算。

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • SQL
    SQL
    +關(guān)注

    關(guān)注

    1

    文章

    775

    瀏覽量

    44300
  • 可靠性
    +關(guān)注

    關(guān)注

    4

    文章

    266

    瀏覽量

    26818

原文標(biāo)題:設(shè)計(jì)了一個(gè)支撐 數(shù)億 用戶的系統(tǒng)

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    電力物資倉庫管理系統(tǒng) DW-S200是一套成熟系統(tǒng)

    電力物資倉庫管理系統(tǒng)DW-S200系統(tǒng)一套成熟系統(tǒng),電力的正常運(yùn)營至關(guān)重要,而為了確保工作人員的正常工作和電網(wǎng)安全且正常的運(yùn)作,供電部門對于電力設(shè)備和工具的采購、使用、檢查和維護(hù)均有
    的頭像 發(fā)表于 02-11 13:40 ?48次閱讀
    電力物資倉庫管理<b class='flag-5'>系統(tǒng)</b> DW-S200是<b class='flag-5'>一套</b>成熟<b class='flag-5'>系統(tǒng)</b>

    VirtualLab Fusion應(yīng)用:具有二維瞳擴(kuò)展和眼模型復(fù)雜光波導(dǎo)系統(tǒng)

    摘要 為了突破增強(qiáng)和混合現(xiàn)實(shí)(AR/MR)領(lǐng)域的限制,對更復(fù)雜的光波導(dǎo)系統(tǒng)的需求不斷增加。VirtualLab Fusion提供了一套工具,可用于此類復(fù)雜系統(tǒng)的設(shè)計(jì)和建模。為了演示
    發(fā)表于 02-08 09:00

    如何使用Java語言快速開發(fā)一套智慧工地系統(tǒng)(源碼)

    使用Java語言快速開發(fā)一套智慧工地系統(tǒng),可以遵循以下步驟和策略: 1、確定系統(tǒng)架構(gòu) 微服務(wù)架構(gòu):采用Spring Cloud構(gòu)建微服務(wù),每個(gè)服務(wù)負(fù)責(zé)個(gè)特定的功能模塊,如安全監(jiān)控、人
    的頭像 發(fā)表于 01-09 17:39 ?220次閱讀

    Vector推出一套基于Visual Studio Code的免費(fèi)插件

    編寫工具(如Vector的CAPL Browser)雖然功能強(qiáng)大,但是結(jié)合Visual Studio Code更能夠滿足多語言編程和集成現(xiàn)代開發(fā)工具的需求。 因此,Vector推出一套基于Visual
    的頭像 發(fā)表于 11-24 14:15 ?692次閱讀
    Vector推出<b class='flag-5'>一套</b>基于Visual Studio Code的免費(fèi)插件

    一套電源ATE自動測試系統(tǒng)如何完成多型號電源模塊測試?

    在使用NSAT-8000電源ATE測試系統(tǒng)后,鑒于不同型號的VPX電源生產(chǎn)工藝、參數(shù)有所不同,工程師可根據(jù)電源型號搭建相應(yīng)的測試項(xiàng)目和方案,一套系統(tǒng)便完成了該公司多型號的電源模塊測試,減少了測試成本。
    的頭像 發(fā)表于 09-18 18:20 ?318次閱讀
    <b class='flag-5'>一套</b>電源ATE自動測試<b class='flag-5'>系統(tǒng)</b>如何完成多型號電源模塊測試?

    如何設(shè)計(jì)一套用于移動式綜合監(jiān)測站管理的軟件系統(tǒng)

    如何設(shè)計(jì)一套用于移動式綜合監(jiān)測站管理的軟件系統(tǒng) 設(shè)計(jì)并實(shí)現(xiàn)一套系統(tǒng),用于管理移動式綜合監(jiān)測站
    的頭像 發(fā)表于 09-10 18:15 ?265次閱讀

    空氣熱泵智能監(jiān)控系統(tǒng)

    利用,一套完善的空氣熱泵智能監(jiān)控系統(tǒng)顯得尤為重要。 空氣熱泵智能監(jiān)控系統(tǒng),對空氣熱泵以及應(yīng)
    的頭像 發(fā)表于 08-21 16:07 ?338次閱讀

    庫室聯(lián)管聯(lián)控系統(tǒng)DW-S306|是一套智能化系統(tǒng)

    裝備庫室聯(lián)管聯(lián)控系統(tǒng),形成一套上下統(tǒng)、功能完善的管理體系,建設(shè)個(gè)功能完善、運(yùn)轉(zhuǎn)有效、規(guī)范有序?yàn)槟繕?biāo),實(shí)現(xiàn)可視化監(jiān)管、數(shù)字化軍械管理、安全監(jiān)管于
    的頭像 發(fā)表于 08-17 16:20 ?232次閱讀
    庫室聯(lián)管聯(lián)控<b class='flag-5'>系統(tǒng)</b>DW-S306|是<b class='flag-5'>一套</b>智能化<b class='flag-5'>系統(tǒng)</b>

    NVIDIA提供一套服務(wù)、模型以及計(jì)算平臺 加速人形機(jī)器發(fā)展

    的發(fā)展,NVIDIA 于今日宣布,為全球領(lǐng)先的機(jī)器制造商、AI 模型開發(fā)者和軟件制造商提供一套服務(wù)、模型以及計(jì)算平臺,以開發(fā)、訓(xùn)練和構(gòu)建下代人形機(jī)器。 整套產(chǎn)品包括用于機(jī)器
    的頭像 發(fā)表于 07-31 10:41 ?817次閱讀

    如何用java語言開發(fā)一套數(shù)字化產(chǎn)科系統(tǒng)? 數(shù)字化產(chǎn)科管理平臺源碼

    如何用java語言開發(fā)一套數(shù)字化產(chǎn)科系統(tǒng) 數(shù)字化產(chǎn)科管理平臺源碼
    的頭像 發(fā)表于 07-06 09:38 ?1082次閱讀
    如何用java語言開發(fā)<b class='flag-5'>一套</b>數(shù)字化產(chǎn)科<b class='flag-5'>系統(tǒng)</b>? 數(shù)字化產(chǎn)科管理平臺源碼

    一套java+ spring boot與 vue+ mysql技術(shù)開發(fā)的UWB高精度工廠人員定位全套系統(tǒng)源碼有應(yīng)用案例

    UWB (ULTRA WIDE BAND, UWB) 技術(shù)是種無線載波通訊技術(shù),它不采用正弦載波,而是利用納秒級的非正弦波窄脈沖傳輸數(shù)據(jù),因此其所占的頻譜范圍很寬。一套UWB精確定位系統(tǒng),最高定位精度可達(dá)10cm,具有高精度,
    的頭像 發(fā)表于 07-03 14:18 ?635次閱讀
    <b class='flag-5'>一套</b>java+ spring boot與 vue+ mysql技術(shù)開發(fā)的UWB高精度工廠人員定位全套<b class='flag-5'>系統(tǒng)</b>源碼有應(yīng)用案例

    在不同的電腦上啟動同一套代碼時(shí),出現(xiàn)編譯路徑錯(cuò)誤的提示怎么解決?

    不同的電腦上安裝esp-idf的路徑不同時(shí),啟動同一套代碼時(shí)會出現(xiàn): 無法找到“D:\\Espressif\\tools\\xtensa-esp32-elf\\esp-2022r1-11.2.0
    發(fā)表于 06-11 06:54

    一套java+ spring boot+與vue+ mysql技術(shù)開發(fā)的UWB高精度工廠人員定位全套系統(tǒng)源碼

    UWB (ULTRA WIDE BAND, UWB) 技術(shù)是種無線載波通訊技術(shù),它不采用正弦載波,而是利用納秒級的非正弦波窄脈沖傳輸數(shù)據(jù),因此其所占的頻譜范圍很寬。一套UWB精確定位系統(tǒng),最高定位精度可達(dá)10cm,具有高精度,
    的頭像 發(fā)表于 06-10 18:11 ?805次閱讀
    <b class='flag-5'>一套</b>java+ spring boot+與vue+ mysql技術(shù)開發(fā)的UWB高精度工廠人員定位全套<b class='flag-5'>系統(tǒng)</b>源碼

    億緯氫國內(nèi)首AEM制氫系統(tǒng)發(fā)貨儀式在廣東惠州舉行

    5月11日,億緯氫國內(nèi)首AEM制氫系統(tǒng)發(fā)貨儀式在廣東惠州舉行。億緯氫AEM水電解制氫系統(tǒng)
    的頭像 發(fā)表于 05-14 09:57 ?550次閱讀
    億緯氫<b class='flag-5'>能</b>國內(nèi)首<b class='flag-5'>套</b>AEM制氫<b class='flag-5'>系統(tǒng)</b>發(fā)貨儀式在廣東惠州舉行

    ICON發(fā)布一套新型建筑3D打印硬件、軟件和材料

    2024年3月,先進(jìn)建筑公司ICON 發(fā)布了一套可實(shí)現(xiàn)建筑自動化的新產(chǎn)品和技術(shù),包括能夠?qū)崿F(xiàn)多層建筑的全新機(jī)器打印機(jī)、新型低碳建筑材料、包含 60 多種現(xiàn)成住宅設(shè)計(jì)的住宅建筑數(shù)字目錄,以及用于住宅設(shè)計(jì)和施工的 AI 建筑師。
    的頭像 發(fā)表于 04-07 18:27 ?1226次閱讀
    主站蜘蛛池模板: 4438x成人网最大色成网站 | 综合五月| 又黄又湿又爽 | 手机在线看片福利盒子 | 色噜噜噜噜噜 | 天天摸天天看天天做天天爽 | 男人午夜影院 | 国外一级毛片 | 夜夜爽天天狠狠九月婷婷 | 婷婷丁香五 | 人人爽人人澡 | 丁香五月缴情综合网 | 成人淫片| 亚洲一区二区免费视频 | 成人性生活免费视频 | 欧美三级视频网 | 男人日女人的网站 | 国产精品国产三级国产在线观看 | 天天爽夜夜爽人人爽 | 一级毛片看真人在线视频 | 嘿嘿嘿视频在线观看网站 | 日本xxxxx69hd日本 | 天堂资源站 | 欧美黄色片免费观看 | 国产精品自在线天天看片 | 国产亚洲高清在线精品不卡 | 免费被黄网站在观看 | 综合99| 99婷婷| 免费观看交性大片 | 日韩免费观看一级毛片看看 | 女bbbbxxxx毛片视频0 | 中文字幕一二三四区2021 | 午夜视频免费在线观看 | 免费网站日本永久免费观看 | 国产成人精品日本亚洲语音1 | 国产精品高清一区二区三区不卡 | 色多多在线观看高清免费 | 久久亚洲aⅴ精品网站婷婷 久久亚洲成人 | 福利社91 | 黄色的视频网站在线观看 |