大型網(wǎng)站的可伸縮性架構(gòu)如何設(shè)計(jì)饲常?

1. 網(wǎng)站架構(gòu)的伸縮性設(shè)計(jì)

1.1. 不同功能進(jìn)行物理分離實(shí)現(xiàn)伸縮

縱向分離(分層后分離):將業(yè)務(wù)處理流程上的不同部分分離部署墩邀,實(shí)現(xiàn)系統(tǒng)伸縮性。

橫向分離(業(yè)務(wù)分割后分離):將不同的業(yè)務(wù)模塊分離部署熔脂,實(shí)現(xiàn)系統(tǒng)伸縮性。

1.2. 單一功能通過(guò)集群規(guī)模實(shí)現(xiàn)伸縮

將不同功能分離部署可以實(shí)現(xiàn)一定程度的伸縮性柑肴,但是隨著網(wǎng)站的訪問(wèn)量逐步增加霞揉,即使分離到最小粒度的獨(dú)立部署,單一的服務(wù)器也不能滿足業(yè)務(wù)規(guī)模的要求晰骑。因此必須使用服務(wù)器集群适秩,即將相同服務(wù)部署在多態(tài)服務(wù)器上構(gòu)成一個(gè)集群整體對(duì)外提供服務(wù)。

2. 應(yīng)用服務(wù)器集群的伸縮性設(shè)計(jì)

2.1. HTTP 重定向負(fù)載均衡

利用 HTTP 重定向協(xié)議實(shí)現(xiàn)負(fù)載均衡些侍。

這種負(fù)載均衡方案的優(yōu)點(diǎn)是比較簡(jiǎn)單隶症。缺點(diǎn)是瀏覽器需要兩次請(qǐng)求服務(wù)器才能完成一次訪問(wèn)哩陕,性能較差:重定向服務(wù)器自身的處理能力有可能成為瓶頸辑莫,整個(gè)集群的伸縮性規(guī)模有限;使用 HTTP 302 響應(yīng)碼重定向作岖,可能使搜索引擎判斷為 SEO 作弊耗式,降低搜索排名胁住。

2.2. DNS 域名解析負(fù)載均衡

利用 DNS 處理域名解析請(qǐng)求的同時(shí)進(jìn)行負(fù)載均衡處理的一種方案。

在 DNS 服務(wù)器中配置多個(gè) A 記錄刊咳,如:

114.100.40.1 www.mysite.com

114.100.40.2 www.mysite.com

114.100.40.3 www.mysite.com

每次域名解析請(qǐng)求都會(huì)根據(jù)負(fù)載均衡算法計(jì)算一個(gè)不同的 IP 地址返回彪见,這樣 A 記錄中配置的多個(gè)服務(wù)器就構(gòu)成一個(gè)集群,并可以實(shí)現(xiàn)負(fù)載均衡娱挨。

DNS 域名解析負(fù)載均衡的優(yōu)點(diǎn):

將負(fù)載均衡的工作轉(zhuǎn)交給了 DNS余指,省掉了網(wǎng)站管理維護(hù)的麻煩。

同時(shí)跷坝,許多 DNS 服務(wù)器還支持基于地理位置的域名解析酵镜,即將域名解析成距離用戶地理最近的一個(gè)服務(wù)器地址,這樣可以加快用戶訪問(wèn)速度柴钻,改善性能淮韭。

DNS 域名解析負(fù)載均衡的缺點(diǎn):

DNS 是多級(jí)解析,每一級(jí) DNS 都可能緩存 A 記錄贴届,當(dāng)某臺(tái)服務(wù)器下線后靠粪,即使修改了 DNS 的 A 記錄蜡吧,要使其生效也需要較長(zhǎng)時(shí)間。這段時(shí)間占键,依然會(huì)域名解析到已經(jīng)下線的服務(wù)器昔善,導(dǎo)致用戶訪問(wèn)失敗。

DNS 的負(fù)載均衡的控制權(quán)在域名服務(wù)商那里捞慌,網(wǎng)站無(wú)法對(duì)其做更多改善和更強(qiáng)大的管理耀鸦。

2.3. 反向代理負(fù)載均衡

大多數(shù)反向代理服務(wù)器同時(shí)提供反向代理和負(fù)載均衡的功能柬批。

反向代理服務(wù)器的優(yōu)點(diǎn)是部署簡(jiǎn)單啸澡。缺點(diǎn)是反向代理服務(wù)器時(shí)所有請(qǐng)求和響應(yīng)的中轉(zhuǎn)站,其性能可能會(huì)成為瓶頸氮帐。

2.4. IP 負(fù)載均衡

在網(wǎng)絡(luò)層通過(guò)修改請(qǐng)求目標(biāo)地址進(jìn)行負(fù)載均衡嗅虏。負(fù)載均衡服務(wù)器(網(wǎng)關(guān)服務(wù)器)在操作系統(tǒng)內(nèi)核獲取網(wǎng)絡(luò)數(shù)據(jù)包,根據(jù)負(fù)載均衡算法計(jì)算得到一臺(tái)真實(shí) Web 服務(wù)器 10.0.0.1上沐,然后將目的 IP 地址修改為 10.0.0.1皮服,不需要通過(guò)用戶進(jìn)程。真實(shí) Web 服務(wù)器處理完成后参咙,響應(yīng)數(shù)據(jù)包回到負(fù)載均衡服務(wù)器龄广,負(fù)載均衡服務(wù)器再將數(shù)據(jù)包原地址修改為自身的 IP 地址(114.100.80.10)發(fā)送給瀏覽器。

IP 負(fù)載均衡在內(nèi)核完成數(shù)據(jù)分發(fā)蕴侧,所以處理性能優(yōu)于反向代理負(fù)載均衡择同。但是因?yàn)樗姓?qǐng)求響應(yīng)都要經(jīng)過(guò)負(fù)載均衡服務(wù)器,集群的最大響應(yīng)數(shù)據(jù)吞吐量受制于負(fù)載均衡服務(wù)器網(wǎng)卡帶寬净宵。

2.5. 數(shù)據(jù)鏈路層負(fù)載均衡

數(shù)據(jù)鏈路層負(fù)載均衡是指在通信協(xié)議的數(shù)據(jù)鏈路層修改 mac 地址進(jìn)行負(fù)載均衡敲才。

這種方式又稱作三角傳輸方式,負(fù)載均衡數(shù)據(jù)分發(fā)過(guò)程中不修改 IP 地址择葡,只修改目的 mac 地址紧武,通過(guò)配置真實(shí)物理服務(wù)器集群所有機(jī)器虛擬 IP 和負(fù)載均衡服務(wù)器 IP 地址一致,從而達(dá)到不修改數(shù)據(jù)包的源地址和目的地址就可以進(jìn)行數(shù)據(jù)分發(fā)的目的敏储,由于實(shí)際處理請(qǐng)求的真實(shí)物理服務(wù)器 IP 和數(shù)據(jù)請(qǐng)求目的 IP 一致阻星,不需要通過(guò)負(fù)載均衡服務(wù)器進(jìn)行地址轉(zhuǎn)換,可將響應(yīng)數(shù)據(jù)包直接返回給用戶瀏覽器已添,避免負(fù)載均衡服務(wù)器網(wǎng)卡帶寬成為瓶頸妥箕。這種負(fù)載方式又稱作直接路由方式。

在 Linux 平臺(tái)上最好的鏈路層負(fù)載均衡開源產(chǎn)品是 LVS(Linux Virtual Server)酝碳。

2.6. 負(fù)載均衡算法

負(fù)載均衡服務(wù)器的實(shí)現(xiàn)可以分為兩個(gè)部分:

根據(jù)負(fù)載均衡算法和 Web 服務(wù)器列表計(jì)算得到集群中一臺(tái) Web 服務(wù)器的地址矾踱。

將請(qǐng)求數(shù)據(jù)發(fā)送到該地址對(duì)應(yīng)的 Web 服務(wù)器上。

負(fù)載均衡算法通常有以下幾種:

輪詢(Round Robin)?- 所有請(qǐng)求被依次分發(fā)到每臺(tái)應(yīng)用服務(wù)器上疏哗,即每臺(tái)服務(wù)器需要處理的請(qǐng)求數(shù)據(jù)都相同呛讲,適合于所有服務(wù)器硬件都相同的場(chǎng)景。

加權(quán)輪詢(Weighted Round Robin)?- 根據(jù)服務(wù)器硬件性能情況,在輪詢的基礎(chǔ)上贝搁,按照配置權(quán)重將請(qǐng)求分發(fā)到每個(gè)服務(wù)器吗氏,高性能服務(wù)器能分配更多請(qǐng)求。

隨機(jī)(Random)?- 請(qǐng)求被隨機(jī)分配到各個(gè)應(yīng)用服務(wù)器雷逆,在許多場(chǎng)合下弦讽,這種方案都很簡(jiǎn)單實(shí)用,因?yàn)楹玫碾S機(jī)數(shù)本身就很平均膀哲,即使應(yīng)用服務(wù)器硬件配置不同往产,也可以使用加權(quán)隨機(jī)算法。

最少連接(Least Connection)?- 記錄每個(gè)應(yīng)用服務(wù)器正在處理的連接數(shù)某宪,將新到的請(qǐng)求分發(fā)到最少連接的服務(wù)器上仿村,應(yīng)該說(shuō),這是最符合負(fù)載均衡定義的算法兴喂。

源地址 Hash(Source Hash)?- 根據(jù)請(qǐng)求來(lái)源的 IP 地址進(jìn)行 Hash 計(jì)算蔼囊,得到應(yīng)用服務(wù)器,這樣來(lái)自同一個(gè) IP 地址的請(qǐng)求總在同一個(gè)服務(wù)器上處理衣迷,該請(qǐng)求的上下文信息可以存儲(chǔ)在這臺(tái)服務(wù)器上畏鼓,在一個(gè)會(huì)話周期內(nèi)重復(fù)使用,從而實(shí)現(xiàn)會(huì)話粘滯壶谒。

3. 分布式緩存集群的伸縮性設(shè)計(jì)

一致性 HASH 算法

4. 數(shù)據(jù)存儲(chǔ)服務(wù)器集群的伸縮性設(shè)計(jì)

4.1. 關(guān)系型數(shù)據(jù)庫(kù)的伸縮性設(shè)計(jì)

主從復(fù)制?- 主流關(guān)系型數(shù)據(jù)庫(kù)一般都支持主從復(fù)制云矫。

分庫(kù)?- 根據(jù)業(yè)務(wù)對(duì)數(shù)據(jù)庫(kù)進(jìn)行分割。制約條件是跨庫(kù)的表不能進(jìn)行 Join 操作佃迄。

分表?- 使用數(shù)據(jù)庫(kù)分片中間件泼差,如 Cobar 等。

4.2. NoSql 數(shù)據(jù)庫(kù)的伸縮性設(shè)計(jì)

一般而言呵俏,Nosql 不支持 SQL 和 ACID堆缘,但是強(qiáng)化了對(duì)于高可用和伸縮性的支持。

歡迎工作一到五年的Java工程師朋友們加入Java程序員開發(fā): 721575865

群內(nèi)提供免費(fèi)的Java架構(gòu)學(xué)習(xí)資料(里面有高可用普碎、高并發(fā)吼肥、高性能及分布式、Jvm性能調(diào)優(yōu)麻车、Spring源碼缀皱,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個(gè)知識(shí)點(diǎn)的架構(gòu)資料)合理利用自己每一分每一秒的時(shí)間來(lái)學(xué)習(xí)提升自己动猬,不要再用"沒(méi)有時(shí)間“來(lái)掩飾自己思想上的懶惰啤斗!趁年輕,使勁拼赁咙,給未來(lái)的自己一個(gè)交代钮莲!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末免钻,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子崔拥,更是在濱河造成了極大的恐慌极舔,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件链瓦,死亡現(xiàn)場(chǎng)離奇詭異拆魏,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)慈俯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門渤刃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人肥卡,你說(shuō)我怎么就攤上這事溪掀。” “怎么了步鉴?”我有些...
    開封第一講書人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)璃哟。 經(jīng)常有香客問(wèn)我氛琢,道長(zhǎng),這世上最難降的妖魔是什么随闪? 我笑而不...
    開封第一講書人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任阳似,我火速辦了婚禮,結(jié)果婚禮上铐伴,老公的妹妹穿的比我還像新娘撮奏。我一直安慰自己,他們只是感情好当宴,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開白布畜吊。 她就那樣靜靜地躺著,像睡著了一般户矢。 火紅的嫁衣襯著肌膚如雪玲献。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,096評(píng)論 1 291
  • 那天梯浪,我揣著相機(jī)與錄音捌年,去河邊找鬼。 笑死挂洛,一個(gè)胖子當(dāng)著我的面吹牛礼预,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播虏劲,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼托酸,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼荠藤!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起获高,我...
    開封第一講書人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤哈肖,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后念秧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體淤井,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年摊趾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了币狠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡砾层,死狀恐怖漩绵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情肛炮,我是刑警寧澤止吐,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布,位于F島的核電站侨糟,受9級(jí)特大地震影響碍扔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜秕重,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一不同、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧溶耘,春花似錦二拐、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至留荔,卻和暖如春吟孙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背聚蝶。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工杰妓, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人碘勉。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓巷挥,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親验靡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子倍宾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容