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

圖文并茂!談?wù)劸W(wǎng)站架構(gòu)演進(jìn)

開發(fā) 架構(gòu)
目前很少有人能經(jīng)歷上面的系統(tǒng)演進(jìn),大部分大型的系統(tǒng)已經(jīng)成型,而小系統(tǒng)可能又很可能撐不到成為大系統(tǒng),所以很少有人能經(jīng)歷這些,不過了解這些,我們對于整個系統(tǒng)架構(gòu)的理解非常有幫助。

你好,我是Cone。

最近在讀大型互聯(lián)網(wǎng)架構(gòu)這本書,今天想你一起嘮嗑嘮嗑架構(gòu),你可能耳熟能詳?shù)母卟l(fā)、大流量、海量數(shù)據(jù)、分布式等等這些詞匯,但是每個詞匯背后其實(shí)都是為了解決當(dāng)前所出現(xiàn)的問題所總結(jié)出的一套架構(gòu)范式,今天一起來扒一扒架構(gòu)。

讀完本文,能夠讓你理解單一應(yīng)用到大型應(yīng)用的架構(gòu)演進(jìn)歷程。

文本大綱

圖片

單一應(yīng)用服務(wù)階段

所有的大型網(wǎng)站都是由最小型的網(wǎng)站架構(gòu)演變而來的?;叵胍幌履阕铋_始寫服務(wù)端代碼,是不是數(shù)據(jù)庫MySQL在本地,服務(wù)器也是本地,那最初階段也是這樣的,網(wǎng)站的流量也不大,通常就將應(yīng)用服務(wù)、數(shù)據(jù)服務(wù)、文件資源等所有資源都放在一臺服務(wù)器上,比如我們學(xué)java web的時候,都是利用Tom??等Web容器開始運(yùn)行應(yīng)用服務(wù)程序,比如JSP,然后需要數(shù)據(jù)庫的時候用JDBC去連接本地Mysql Server。一圖勝千言:

圖片

應(yīng)用與數(shù)據(jù)服務(wù)分離階段

經(jīng)過業(yè)務(wù)發(fā)展迭代增加,用戶量、日活的上升,簡單的一臺服務(wù)器就搞不定了。比如可能由于用戶產(chǎn)生的數(shù)據(jù)量過多導(dǎo)致存儲空間不夠,而一臺服務(wù)器同時得處理數(shù)據(jù)服務(wù)和用戶的應(yīng)用web響應(yīng),CPU資源有限的情況下,是無法滿足用戶想要快速響應(yīng)需求的,網(wǎng)站的訪問數(shù)據(jù)變得越來越慢,而數(shù)據(jù)服務(wù)和應(yīng)用服務(wù)所對計算機(jī)資源的需求是不一樣的,比如應(yīng)用服務(wù)器需要更多的CPU資源,給這臺服務(wù)器配上多幾核的CPU,數(shù)據(jù)服務(wù)可能需要與磁盤打交道,配備更多的閃存。

這時候就將應(yīng)用服務(wù)和數(shù)據(jù)服務(wù)進(jìn)行分離。將應(yīng)用服務(wù)器單獨(dú)出來,專注于響應(yīng)web請求,提高用戶的訪問速度,將數(shù)據(jù)庫單獨(dú)放在一臺服務(wù)器,專注于處理與應(yīng)用服務(wù)器打過來的數(shù)據(jù)請求,將文件資源放在一臺服務(wù)器上,與應(yīng)用服務(wù)器打交道,為其提供文件服務(wù),一圖勝千言:

圖片

利用緩存提高性能階段

隨著用戶的再增加,業(yè)務(wù)的再次升級。網(wǎng)站有面臨了一個數(shù)據(jù)庫服務(wù)的壓力太大而導(dǎo)致整體的訪問效率下降,再次影響用戶的訪問體驗。

你可以想象,我們?nèi)粘5奈⒉?、抖音那些熱點(diǎn)數(shù)據(jù),是幾個每個打開這些應(yīng)用的人會請求到的。所以二八定律永遠(yuǎn)存在,80%的請求在20%的數(shù)據(jù)上。所以這個時候?qū)⑦@20%的數(shù)據(jù)進(jìn)行高校的緩存起來,這樣網(wǎng)站整體的性能又可以提升了。

緩存可以分為兩種:一種的直接緩存在應(yīng)用服務(wù)器上,另外是一種開一臺緩存服務(wù)器進(jìn)行緩存。后者可以進(jìn)行很好的彈性伸縮,而前者會受到本地容量的限制。我們稱后者服務(wù)器為:分布式緩存服務(wù)器。

目前筆者寫的后端程序也在這個階段,也在嘗試往后續(xù)集群方向演進(jìn)。一圖勝千言:

圖片

應(yīng)用服務(wù)集群階段

當(dāng)使用緩存后,數(shù)據(jù)庫的訪問壓力得到有效緩解。再次隨著業(yè)務(wù)的增加,單一應(yīng)用服務(wù)器能夠并發(fā)處理的請求連接有限,在流量的高峰期,應(yīng)用服務(wù)器開始成為整個系統(tǒng)的性能瓶頸。

因此這個時候就開始組件應(yīng)用服務(wù)器集群,不僅應(yīng)用服務(wù)器有集群,緩存服務(wù)器等也可以組成集群。那么既然有了服務(wù)器集群,那對于這些請求,到底應(yīng)該有哪臺服務(wù)器響應(yīng)呢。所以負(fù)載均衡調(diào)度服務(wù)器就出現(xiàn)了。

通過負(fù)載均衡調(diào)度服務(wù)器,可將來自瀏覽器的訪問請求分發(fā)到應(yīng)用的集群中的任何一臺服務(wù)器上。使用服務(wù)器集群也有個好處,Web 應(yīng)用程序更新可以做到用戶無感知,當(dāng)有一個節(jié)點(diǎn)的服務(wù)器宕機(jī)之后,也不影響整體的請求。

一圖勝千言:

圖片

數(shù)據(jù)庫讀寫分離階段

雖然增加了數(shù)據(jù)緩存這一層。比如利用redis緩存,但是隨著用戶量的不斷增加??傆幸恍┦菬o法通過緩存提高的,比如還可能出現(xiàn)緩存過期、緩存沒有命中等情況。那么這些請求全部會打到數(shù)據(jù)庫服務(wù)器上,這個時候數(shù)據(jù)庫服務(wù)成為了整個系統(tǒng)的瓶頸。所以數(shù)據(jù)讀寫分離就出現(xiàn)了。

目前大部分的數(shù)據(jù)庫都提供了一個主從熱備的功能。通過配置主從兩臺服務(wù)器,當(dāng)應(yīng)用服務(wù)器往主服務(wù)器寫入詩句時,利用主從復(fù)制機(jī)制將數(shù)據(jù)更新同步到從數(shù)據(jù)庫上。讀寫分離之后,數(shù)據(jù)庫的性能瓶頸就解決了。一圖勝千言:

圖片

反向代理與CDN加速階段

當(dāng)網(wǎng)站業(yè)務(wù)再次升級,用戶規(guī)模再次擴(kuò)大,為了滿足不同地區(qū)的用戶訪問速度,提高響應(yīng)速度,CDN和反向代理就出現(xiàn)了,兩者基本原因都是緩存。

CDN就是內(nèi)容分發(fā)網(wǎng)絡(luò),你的請求響應(yīng)服務(wù)器會從距離你最近的一個服務(wù)器集群上響應(yīng)回來,比如你在云南,可能就從云南的機(jī)房響應(yīng)。

而反向代理則部署在中心機(jī)房,當(dāng)請求來到中心機(jī)房后,首先訪問的時候反向代理服務(wù)器,看看是否名字緩存,如果命中則直接返回。一圖勝千言:

圖片

分布式數(shù)據(jù)庫階段

分布式數(shù)據(jù)庫是系統(tǒng)數(shù)據(jù)庫拆分的最后手段,這只有在單表數(shù)據(jù)規(guī)模非常大的時候才會用,一般的數(shù)據(jù)庫拆分都是對業(yè)務(wù)拆分后將不同的業(yè)務(wù)數(shù)據(jù)部署在不同的服務(wù)器上。如下圖:

圖片

NoSQL與搜索引擎階段

當(dāng)成為大型系統(tǒng)的時候,搜索成為了日常需求,這時會采用NoSQL和搜索引擎來提高搜索效率,緩存的時候redis也是NoSQL類型的。如下圖:

圖片

業(yè)務(wù)拆分階段

當(dāng)業(yè)務(wù)日漸的增多,可能團(tuán)隊人員也不利于管理,這個時候大型的系統(tǒng)都會進(jìn)行業(yè)務(wù)拆分,比如抖音就拆了很多很多業(yè)務(wù)線。每條業(yè)務(wù)線服務(wù)不同的服務(wù),每個服務(wù)都單獨(dú)進(jìn)行部署,可以通過消息隊列進(jìn)行數(shù)據(jù)分發(fā)。如下圖:

圖片

分布式服務(wù)階段

隨著業(yè)務(wù)拆分越來越小,存儲系統(tǒng)越來越龐大,應(yīng)用系統(tǒng)的整體復(fù)雜度呈指數(shù)級增加,部署維護(hù)越來越困難。

既然每一個應(yīng)用系統(tǒng)都需要執(zhí)行許多相同的業(yè)務(wù)操作,比如用戶管理、商品管理等,那么可以將這些共用的業(yè)務(wù)提取出來,獨(dú)立部署。由這些可復(fù)用的業(yè)務(wù)連接數(shù)據(jù)庫,提供共用業(yè)務(wù)服務(wù),而應(yīng)用系統(tǒng)只需要管理用戶界面,通過分布式服務(wù)調(diào)用共用業(yè)務(wù)服務(wù)完成具體業(yè)務(wù)操作。如下圖:

圖片

總結(jié)

目前很少有人能經(jīng)歷上面的系統(tǒng)演進(jìn),大部分大型的系統(tǒng)已經(jīng)成型,而小系統(tǒng)可能又很可能撐不到成為大系統(tǒng),所以很少有人能經(jīng)歷這些,不過了解這些,我們對于整個系統(tǒng)架構(gòu)的理解非常有幫助。

Hello,我是ConeZhang,本科畢業(yè)于某不知名雙非末流一本,科班CS專業(yè)。本科做了四年iOS開發(fā),寫過無數(shù)iOS應(yīng)用,拿過無數(shù)軟件競賽獎,也折騰過安卓開發(fā),整過Spring全家桶,寫過網(wǎng)站,搭過服務(wù)器。秋招拿到了微信、抖音等大廠offer,是一段從春招屢戰(zhàn)屢敗到秋招屢戰(zhàn)屢勝的經(jīng)歷。

如今在字節(jié)跳動抖音基礎(chǔ)技術(shù)做全棧研發(fā),啥都會點(diǎn),啥也不會。歡迎大家點(diǎn)個關(guān)注長期持有我這只潛力股。

責(zé)任編輯:武曉燕 來源: Cone的編程屋
相關(guān)推薦

2021-12-27 08:04:49

架構(gòu)網(wǎng)站高并發(fā)

2022-04-20 18:30:00

算法架構(gòu)粗排

2011-01-18 18:08:28

Thunderbird

2011-11-21 15:12:54

Java斷點(diǎn)Eclipse

2011-01-18 18:29:28

Thunderbird

2011-01-19 17:30:21

Postfix郵件投遞

2012-07-23 14:39:27

移動

2011-01-19 17:34:39

Postfix如何接收郵件

2011-01-20 09:13:18

Postfix

2011-01-21 10:28:06

2022-07-18 14:33:05

PythonPDF報告

2011-01-19 10:30:20

UbuntuThunderbird

2011-08-03 15:21:23

ORM XCode 數(shù)據(jù)庫

2012-05-29 14:27:34

PHP

2012-07-27 10:27:19

OfficeWord

2011-07-04 16:57:36

QT 布局 界面

2009-07-15 14:49:16

2023-09-27 08:46:44

Java 技術(shù)編程語言

2011-07-20 12:49:49

XCode SnapShots SCM

2010-07-14 10:17:14

MyEclipse漢化
點(diǎn)贊
收藏

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