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

高并發(fā)系統(tǒng):它的通用設(shè)計(jì)方法是什么?

開(kāi)發(fā) 架構(gòu)
Web 2.0 被稱為“緩存的時(shí)代”,這一點(diǎn)幾乎是公認(rèn)的。如今,緩存已經(jīng)滲透到系統(tǒng)設(shè)計(jì)的各個(gè)層面,從操作系統(tǒng)到瀏覽器,從數(shù)據(jù)庫(kù)到消息隊(duì)列,任何稍微復(fù)雜的服務(wù)和組件中都能看到緩存的身影。緩存的主要作用是提高系統(tǒng)的訪問(wèn)性能,尤其是在高并發(fā)場(chǎng)景中,緩存能顯著提升系統(tǒng)的響應(yīng)速度,從而支持更多用戶同時(shí)訪問(wèn)。

在高并發(fā)系統(tǒng)的設(shè)計(jì)中,面對(duì)大流量的挑戰(zhàn),我們通常需要運(yùn)用一些巧妙的方案來(lái)有效地分流和處理這些流量,從而保證系統(tǒng)的穩(wěn)定性和用戶體驗(yàn)??梢酝ㄟ^(guò)一個(gè)比喻來(lái)幫助理解:就像古代治水一樣,我們?cè)诟卟l(fā)系統(tǒng)中采用的策略,也旨在將洪水引流、分擔(dān)壓力、提高系統(tǒng)的承載能力。

例如,在古代的治水實(shí)踐中,大禹通過(guò)拓寬河道清除淤沙,讓水流更加順暢;都江堰則利用引流技術(shù)將岷江的水分流到多個(gè)支流,從而減少水流的壓力;而三門峽和葛洲壩通過(guò)建造水庫(kù)來(lái)暫時(shí)存儲(chǔ)水源,再通過(guò)控制水庫(kù)的排水來(lái)緩解下游的水患。這些治水的思想,實(shí)際上在現(xiàn)代高并發(fā)系統(tǒng)的設(shè)計(jì)中也能找到類似的解決方案。

總結(jié)起來(lái),處理高并發(fā)的流量,我們主要會(huì)采取三種策略:

  1. 橫向擴(kuò)展(Scale-out):類似于“分而治之”的治水方法。通過(guò)分布式部署,將流量分散到不同的服務(wù)器或節(jié)點(diǎn)上,從而避免單一節(jié)點(diǎn)的過(guò)載,確保系統(tǒng)的可擴(kuò)展性和負(fù)載均衡。
  2. 緩存:就像是“拓寬河道”,緩存是緩解流量沖擊的一種有效方式。通過(guò)在系統(tǒng)中緩存熱點(diǎn)數(shù)據(jù),可以減少后端系統(tǒng)的壓力,提高響應(yīng)速度,從而提升用戶體驗(yàn)。
  3. 異步處理:這種方式就像是“提前引流”或“暫存水源”。在一些場(chǎng)景下,我們可以允許請(qǐng)求先返回,并在數(shù)據(jù)準(zhǔn)備好之后再通知請(qǐng)求方。這種方式能夠有效提高系統(tǒng)的吞吐量,減少高并發(fā)時(shí)的響應(yīng)延遲。

這三種策略是高并發(fā)系統(tǒng)設(shè)計(jì)中常見(jiàn)的手段,當(dāng)然,每種方法背后還有更為復(fù)雜和細(xì)化的技術(shù)細(xì)節(jié),之后會(huì)根據(jù)具體場(chǎng)景進(jìn)一步講解。這些策略的靈活運(yùn)用,可以幫助我們?cè)O(shè)計(jì)出既高效又可靠的高并發(fā)系統(tǒng),確保系統(tǒng)在面對(duì)大流量時(shí)能夠從容應(yīng)對(duì)。

首先,我們先來(lái)了解第一種方法:Scale-out。

Scale-up vs Scale-out

“摩爾定律”由Intel創(chuàng)始人之一戈登·摩爾在1965年提出,最初是指集成電路上晶體管的數(shù)量大約每?jī)赡陼?huì)翻一倍。這一理論后來(lái)被Intel CEO大衛(wèi)·豪斯用“18個(gè)月翻一倍”的說(shuō)法進(jìn)一步簡(jiǎn)化,并廣泛流傳。摩爾定律主要描述了芯片技術(shù)的發(fā)展速度,但它也可以延伸到整體硬件性能的提升。從20世紀(jì)下半葉開(kāi)始,計(jì)算機(jī)硬件的性能一直呈現(xiàn)指數(shù)級(jí)的增長(zhǎng),這一趨勢(shì)持續(xù)至今。摩爾定律指引下的技術(shù)突破,使得我們從最初只有十幾個(gè)晶體管的集成電路,到今天每顆芯片上擁有數(shù)十億晶體管,芯片廠商在有限的空間內(nèi),通過(guò)減小晶體管的尺寸,不斷提升硬件性能。

然而,隨著芯片工藝的進(jìn)步,已有專家預(yù)測(cè)摩爾定律可能會(huì)在未來(lái)幾年失效。如今的芯片已經(jīng)進(jìn)入了5nm制程,進(jìn)一步減小晶體管尺寸的空間變得非常有限,可能無(wú)法繼續(xù)以每18個(gè)月翻倍的速度提升性能。在這種背景下,雙核和多核技術(shù)的出現(xiàn)為延續(xù)摩爾定律的理念提供了新的方向。通過(guò)將多個(gè)CPU核心集成到同一芯片上,CPU的并行處理能力得到了大幅提升,這一思路在高并發(fā)系統(tǒng)設(shè)計(jì)中也得到了應(yīng)用。

在高并發(fā)系統(tǒng)中,類似于摩爾定律不斷提升單機(jī)性能的做法,被稱為Scale-up(縱向擴(kuò)展)。而將多個(gè)處理單元組合成一個(gè)集群來(lái)提升性能,則被稱為Scale-out(橫向擴(kuò)展)。這兩者在實(shí)現(xiàn)方式上有著明顯不同。

  1. Scale-up(縱向擴(kuò)展):這種方式類似于提升單個(gè)CPU的核心數(shù),通過(guò)購(gòu)買更高性能的硬件來(lái)提高系統(tǒng)的處理能力。例如,如果一個(gè)4核4GB內(nèi)存的機(jī)器每秒能處理200次請(qǐng)求,那么通過(guò)將機(jī)器升級(jí)為8核8GB內(nèi)存,理論上就能處理更多的請(qǐng)求(盡管硬件提升的性能并非線性增長(zhǎng),這里只是舉例說(shuō)明)。Scale-up的優(yōu)勢(shì)在于其簡(jiǎn)單直接,適用于系統(tǒng)初期的擴(kuò)展。
  2. Scale-out(橫向擴(kuò)展):這種方式通過(guò)將多個(gè)低性能的機(jī)器組合成一個(gè)分布式集群,共同承擔(dān)高并發(fā)流量的壓力。例如,使用兩臺(tái)4核4GB內(nèi)存的機(jī)器來(lái)處理400次請(qǐng)求。這種方法能夠突破單機(jī)硬件的性能極限,但也帶來(lái)了一些復(fù)雜性,比如分布式系統(tǒng)的管理、負(fù)載均衡、數(shù)據(jù)一致性等問(wèn)題。

在實(shí)際的系統(tǒng)設(shè)計(jì)中,通常在初期階段選擇Scale-up,因?yàn)樗軌蛲ㄟ^(guò)提升單機(jī)硬件性能解決問(wèn)題,操作簡(jiǎn)單;但隨著系統(tǒng)并發(fā)量的增長(zhǎng),單機(jī)的性能瓶頸逐漸顯現(xiàn),Scale-out成為應(yīng)對(duì)更高并發(fā)流量的解決方案。盡管Scale-out具有更強(qiáng)的擴(kuò)展性,但也需要解決更復(fù)雜的技術(shù)挑戰(zhàn)。

說(shuō)完了 Scale-out,我們?cè)賮?lái)看看高并發(fā)系統(tǒng)設(shè)計(jì)的另一種方法:緩存。

使用緩存提升性能

Web 2.0 被稱為“緩存的時(shí)代”,這一點(diǎn)幾乎是公認(rèn)的。如今,緩存已經(jīng)滲透到系統(tǒng)設(shè)計(jì)的各個(gè)層面,從操作系統(tǒng)到瀏覽器,從數(shù)據(jù)庫(kù)到消息隊(duì)列,任何稍微復(fù)雜的服務(wù)和組件中都能看到緩存的身影。緩存的主要作用是提高系統(tǒng)的訪問(wèn)性能,尤其是在高并發(fā)場(chǎng)景中,緩存能顯著提升系統(tǒng)的響應(yīng)速度,從而支持更多用戶同時(shí)訪問(wèn)。

那么,為什么緩存能大幅度提升系統(tǒng)的性能呢?我們知道,數(shù)據(jù)通常存儲(chǔ)在持久化存儲(chǔ)中,且大多數(shù)持久化存儲(chǔ)使用磁盤作為存儲(chǔ)介質(zhì)。傳統(tǒng)磁盤由機(jī)械手臂、磁頭、轉(zhuǎn)軸和盤片組成,盤片被劃分為多個(gè)同心圓,稱為磁道。這些磁道用來(lái)存儲(chǔ)數(shù)據(jù)。磁盤工作時(shí),盤片高速旋轉(zhuǎn),機(jī)械手臂帶動(dòng)磁頭沿著徑向移動(dòng),定位到需要讀取的磁道。在此過(guò)程中,磁頭找到數(shù)據(jù)的時(shí)間被稱為尋道時(shí)間,這是磁盤存取數(shù)據(jù)的瓶頸之一。

圖片圖片

普通磁盤的尋道時(shí)間大約是10毫秒,而與此相比,CPU執(zhí)行指令和內(nèi)存尋址的速度通常在納秒(ns)級(jí)別,從千兆網(wǎng)卡讀取數(shù)據(jù)的時(shí)間則是在微秒(μs)級(jí)別??梢钥闯?,磁盤在整個(gè)計(jì)算機(jī)系統(tǒng)中是最慢的組件,甚至比其他部件慢上幾個(gè)數(shù)量級(jí)。因此,為了提升性能,我們通常采用內(nèi)存作為存儲(chǔ)介質(zhì)來(lái)實(shí)現(xiàn)緩存。

緩存的作用不僅僅限于簡(jiǎn)單的存儲(chǔ),它的語(yǔ)義已經(jīng)變得更加豐富。在現(xiàn)代系統(tǒng)設(shè)計(jì)中,任何可以顯著降低響應(yīng)時(shí)間的中間存儲(chǔ)都可以被稱為緩存。例如,在操作系統(tǒng)中,CPU就有多級(jí)緩存來(lái)減少訪問(wèn)主內(nèi)存的時(shí)間;文件系統(tǒng)中也有Page Cache緩存,用來(lái)提高文件讀取的效率。緩存的思想已經(jīng)廣泛應(yīng)用于多個(gè)領(lǐng)域,不僅限于傳統(tǒng)的數(shù)據(jù)庫(kù)緩存,而是滲透到計(jì)算機(jī)系統(tǒng)的方方面面。

異步處理

異步是一種常見(jiàn)的高并發(fā)設(shè)計(jì)方法,我們?cè)诤芏嗉夹g(shù)文章和演講中常常會(huì)看到這個(gè)術(shù)語(yǔ),同時(shí)它也經(jīng)常與“同步”相提并論。例如,在分布式服務(wù)框架Dubbo中,我們可以看到同步方法調(diào)用和異步方法調(diào)用;在IO模型中,也有同步IO和異步IO。那么,什么是同步,什么是異步呢?

以方法調(diào)用為例,同步調(diào)用意味著調(diào)用方必須等待被調(diào)用的方法執(zhí)行完成后才能繼續(xù)執(zhí)行下一步操作。在同步調(diào)用的情況下,如果被調(diào)用的方法響應(yīng)時(shí)間較長(zhǎng),調(diào)用方會(huì)一直阻塞,直到方法執(zhí)行完成。這種方式在高并發(fā)場(chǎng)景下會(huì)導(dǎo)致大量阻塞,最終可能引發(fā)整體系統(tǒng)性能下降,甚至發(fā)生“雪崩效應(yīng)”。

異步調(diào)用則正好相反,調(diào)用方不需要等待被調(diào)用方法的邏輯執(zhí)行完成,而是可以立刻返回并繼續(xù)執(zhí)行其他操作。當(dāng)被調(diào)用的方法完成后,結(jié)果會(huì)通過(guò)回調(diào)、事件通知等機(jī)制反饋給調(diào)用方。異步調(diào)用非常適合大規(guī)模高并發(fā)的系統(tǒng)中使用。例如,我們都知道的12306網(wǎng)站,訂票時(shí)頁(yè)面會(huì)顯示“系統(tǒng)正在排隊(duì)”的提示,這其實(shí)就表示系統(tǒng)在異步處理我們的訂票請(qǐng)求。

在12306系統(tǒng)中,查詢余票、下單、以及更新余票狀態(tài)等操作都是比較耗時(shí)的,可能涉及多個(gè)內(nèi)部系統(tǒng)的調(diào)用。如果這些操作是同步的,那么在高并發(fā)的情況下,就像12306剛上線時(shí)那樣,很多用戶在高峰期永遠(yuǎn)無(wú)法成功下單。而采用異步處理后,系統(tǒng)能夠更有效地分擔(dān)負(fù)載,提升整體處理能力和用戶體驗(yàn)。

而采用異步的方式,后端處理時(shí)會(huì)把請(qǐng)求丟到消息隊(duì)列中,同時(shí)快速響應(yīng)用戶,告訴用戶我們正在排隊(duì)處理,然后釋放出資源來(lái)處理更多的請(qǐng)求。訂票請(qǐng)求處理完之后,再通知用戶訂票成功或者失敗。處理邏輯后移到異步處理程序中,Web 服務(wù)的壓力小了,資源占用的少了,自然就能接收更多的用戶訂票請(qǐng)求,系統(tǒng)承受高并發(fā)的能力也就提升了。

圖片圖片

了解了這些方法后,我們可能會(huì)問(wèn),是否在高并發(fā)系統(tǒng)設(shè)計(jì)中就必須把這些方法都應(yīng)用到位?答案是否定的。系統(tǒng)設(shè)計(jì)是一個(gè)不斷演進(jìn)的過(guò)程,"羅馬不是一天建成的",系統(tǒng)的設(shè)計(jì)也是如此。不同規(guī)模的系統(tǒng)會(huì)面臨不同的痛點(diǎn),進(jìn)而會(huì)有不同的架構(gòu)設(shè)計(jì)側(cè)重點(diǎn)。如果在一開(kāi)始就按照百萬(wàn)、千萬(wàn)并發(fā)量來(lái)設(shè)計(jì)系統(tǒng),盲目追求像淘寶、微信那樣的架構(gòu),那么這些系統(tǒng)的命運(yùn)很可能會(huì)是失敗的。

為什么呢?因?yàn)楸M管像淘寶、微信這樣的大型系統(tǒng)能夠處理百萬(wàn)、千萬(wàn)并發(fā)的需求,但它們內(nèi)部的復(fù)雜性是我們難以想象的。盲目地追隨這些大系統(tǒng)的設(shè)計(jì)思路,只會(huì)讓我們的架構(gòu)變得異常復(fù)雜,最終導(dǎo)致難以維護(hù)和擴(kuò)展。比如說(shuō),淘寶在經(jīng)歷多年的發(fā)展后,才發(fā)現(xiàn)自己在整體擴(kuò)展能力上的瓶頸,這時(shí)他們才開(kāi)始進(jìn)行服務(wù)化改造。

我自己也曾經(jīng)歷過(guò)類似的情況。在參與的一個(gè)創(chuàng)業(yè)項(xiàng)目中,我們?cè)诔跗诰瓦x擇了服務(wù)化架構(gòu)。但由于當(dāng)時(shí)人力有限,團(tuán)隊(duì)的技術(shù)積累不足,在實(shí)際開(kāi)發(fā)過(guò)程中我們發(fā)現(xiàn)無(wú)法駕馭如此復(fù)雜的架構(gòu),導(dǎo)致了很多問(wèn)題:比如問(wèn)題定位困難、系統(tǒng)性能下降,甚至系統(tǒng)宕機(jī)時(shí)都很難找到根本原因。最終,我們不得不將服務(wù)進(jìn)行整合,回歸到更簡(jiǎn)單的單體架構(gòu)中。

這也提醒我們,在設(shè)計(jì)高并發(fā)系統(tǒng)時(shí),必須根據(jù)實(shí)際的業(yè)務(wù)需求、技術(shù)儲(chǔ)備和團(tuán)隊(duì)能力來(lái)選擇合適的架構(gòu),并隨系統(tǒng)的發(fā)展不斷調(diào)整和優(yōu)化,而不是一開(kāi)始就過(guò)于復(fù)雜化。

所以我建議一般系統(tǒng)的演進(jìn)過(guò)程應(yīng)該遵循下面的思路:

最初的系統(tǒng)設(shè)計(jì)應(yīng)當(dāng)以滿足當(dāng)前的業(yè)務(wù)需求和流量情況為目標(biāo),并選擇團(tuán)隊(duì)最熟悉的技術(shù)體系。在實(shí)際開(kāi)發(fā)過(guò)程中,隨著流量的增加和業(yè)務(wù)的發(fā)展,我們可能會(huì)發(fā)現(xiàn)架構(gòu)中的一些問(wèn)題,比如單點(diǎn)故障、橫向擴(kuò)展的瓶頸,或是性能無(wú)法滿足需求的組件。此時(shí),我們需要逐步修正這些問(wèn)題。

在解決問(wèn)題時(shí),我們首先會(huì)考慮選擇那些社區(qū)中已經(jīng)成熟并且團(tuán)隊(duì)熟悉的組件,這樣可以更高效地應(yīng)對(duì)問(wèn)題并避免重復(fù)造輪子。如果社區(qū)沒(méi)有合適的解決方案,才會(huì)考慮自行開(kāi)發(fā)或定制解決方案。

然而,當(dāng)對(duì)現(xiàn)有架構(gòu)進(jìn)行的小修小補(bǔ)已無(wú)法解決問(wèn)題時(shí),我們需要考慮更大規(guī)模的調(diào)整,如架構(gòu)重構(gòu)或重寫。通過(guò)這些更為深度的調(diào)整,才能有效解決現(xiàn)有架構(gòu)無(wú)法滿足業(yè)務(wù)需求的難題??傊?,系統(tǒng)架構(gòu)的設(shè)計(jì)和演進(jìn)是一個(gè)不斷調(diào)整和優(yōu)化的過(guò)程,應(yīng)根據(jù)實(shí)際需求逐步推進(jìn)。

以淘寶為例,最初在業(yè)務(wù)從0到1的階段,淘寶通過(guò)購(gòu)買現(xiàn)成的硬件和軟件快速搭建了系統(tǒng)。然而,隨著流量的不斷增長(zhǎng),淘寶開(kāi)始進(jìn)行一系列的技術(shù)改造,以提高系統(tǒng)的高并發(fā)處理能力。這些改造包括將數(shù)據(jù)庫(kù)存儲(chǔ)引擎從MyISAM遷移到InnoDB,實(shí)施數(shù)據(jù)庫(kù)的分庫(kù)分表,增加緩存,并開(kāi)發(fā)中間件等。當(dāng)這些優(yōu)化手段不再滿足需求時(shí),淘寶進(jìn)一步對(duì)整體架構(gòu)進(jìn)行大規(guī)模重構(gòu),例如著名的“五彩石”項(xiàng)目,這使得淘寶的架構(gòu)從單體架構(gòu)逐步演進(jìn)為服務(wù)化架構(gòu)。

正是通過(guò)這些逐步的技術(shù)演進(jìn),淘寶才最終構(gòu)建了能夠支撐過(guò)億QPS的技術(shù)架構(gòu)。歸根結(jié)底,高并發(fā)系統(tǒng)的演進(jìn)應(yīng)當(dāng)是循序漸進(jìn)的,始終圍繞解決系統(tǒng)中存在的問(wèn)題展開(kāi),技術(shù)的不斷演化和優(yōu)化才是推動(dòng)架構(gòu)進(jìn)步的真正驅(qū)動(dòng)力。

責(zé)任編輯:武曉燕 來(lái)源: 二進(jìn)制跳動(dòng)
相關(guān)推薦

2025-02-20 00:01:00

2024-05-27 08:32:45

2021-04-28 08:52:22

高并發(fā)架構(gòu)設(shè)高并發(fā)系統(tǒng)

2021-05-24 09:28:41

軟件開(kāi)發(fā) 技術(shù)

2022-04-14 10:24:27

分布式系統(tǒng)性能

2025-04-08 08:10:00

2012-12-27 10:31:43

開(kāi)發(fā)設(shè)計(jì)架構(gòu)設(shè)計(jì)

2022-10-19 12:23:50

緩存CDN外部緩存

2017-12-12 14:51:15

分布式緩存設(shè)計(jì)

2023-09-08 08:10:48

2023-09-08 08:22:30

2018-08-20 20:46:07

2023-11-13 14:44:14

DDD開(kāi)發(fā)Java

2024-11-25 12:20:00

Hystrix微服務(wù)架構(gòu)

2021-07-29 11:46:27

NAS存儲(chǔ)NAS服務(wù)器

2012-12-27 10:37:21

開(kāi)發(fā)設(shè)計(jì)架構(gòu)設(shè)計(jì)電子商店

2022-02-24 23:37:19

區(qū)塊鏈錢包比特幣

2020-11-24 07:41:52

邊緣計(jì)算

2021-05-09 09:30:13

Docker操作系統(tǒng)容器

2023-04-17 14:21:19

5G無(wú)線技術(shù)
點(diǎn)贊
收藏

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