新聞中心
你好,我是Cone。

在香洲等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務理念,為客戶提供成都網(wǎng)站制作、網(wǎng)站設(shè)計 網(wǎng)站設(shè)計制作按需定制,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),成都全網(wǎng)營銷推廣,外貿(mào)網(wǎng)站制作,香洲網(wǎng)站建設(shè)費用合理。
最近在讀大型互聯(lián)網(wǎng)架構(gòu)這本書,今天想你一起嘮嗑嘮嗑架構(gòu),你可能耳熟能詳?shù)母卟l(fā)、大流量、海量數(shù)據(jù)、分布式等等這些詞匯,但是每個詞匯背后其實都是為了解決當前所出現(xiàn)的問題所總結(jié)出的一套架構(gòu)范式,今天一起來扒一扒架構(gòu)。
讀完本文,能夠讓你理解單一應用到大型應用的架構(gòu)演進歷程。
文本大綱
單一應用服務階段
所有的大型網(wǎng)站都是由最小型的網(wǎng)站架構(gòu)演變而來的。回想一下你最開始寫服務端代碼,是不是數(shù)據(jù)庫MySQL在本地,服務器也是本地,那最初階段也是這樣的,網(wǎng)站的流量也不大,通常就將應用服務、數(shù)據(jù)服務、文件資源等所有資源都放在一臺服務器上,比如我們學java web的時候,都是利用Tom等Web容器開始運行應用服務程序,比如JSP,然后需要數(shù)據(jù)庫的時候用JDBC去連接本地Mysql Server。一圖勝千言:
應用與數(shù)據(jù)服務分離階段
經(jīng)過業(yè)務發(fā)展迭代增加,用戶量、日活的上升,簡單的一臺服務器就搞不定了。比如可能由于用戶產(chǎn)生的數(shù)據(jù)量過多導致存儲空間不夠,而一臺服務器同時得處理數(shù)據(jù)服務和用戶的應用web響應,CPU資源有限的情況下,是無法滿足用戶想要快速響應需求的,網(wǎng)站的訪問數(shù)據(jù)變得越來越慢,而數(shù)據(jù)服務和應用服務所對計算機資源的需求是不一樣的,比如應用服務器需要更多的CPU資源,給這臺服務器配上多幾核的CPU,數(shù)據(jù)服務可能需要與磁盤打交道,配備更多的閃存。
這時候就將應用服務和數(shù)據(jù)服務進行分離。將應用服務器單獨出來,專注于響應web請求,提高用戶的訪問速度,將數(shù)據(jù)庫單獨放在一臺服務器,專注于處理與應用服務器打過來的數(shù)據(jù)請求,將文件資源放在一臺服務器上,與應用服務器打交道,為其提供文件服務,一圖勝千言:
利用緩存提高性能階段
隨著用戶的再增加,業(yè)務的再次升級。網(wǎng)站有面臨了一個數(shù)據(jù)庫服務的壓力太大而導致整體的訪問效率下降,再次影響用戶的訪問體驗。
你可以想象,我們?nèi)粘5奈⒉⒍兑裟切狳c數(shù)據(jù),是幾個每個打開這些應用的人會請求到的。所以二八定律永遠存在,80%的請求在20%的數(shù)據(jù)上。所以這個時候?qū)⑦@20%的數(shù)據(jù)進行高校的緩存起來,這樣網(wǎng)站整體的性能又可以提升了。
緩存可以分為兩種:一種的直接緩存在應用服務器上,另外是一種開一臺緩存服務器進行緩存。后者可以進行很好的彈性伸縮,而前者會受到本地容量的限制。我們稱后者服務器為:分布式緩存服務器。
目前筆者寫的后端程序也在這個階段,也在嘗試往后續(xù)集群方向演進。一圖勝千言:
應用服務集群階段
當使用緩存后,數(shù)據(jù)庫的訪問壓力得到有效緩解。再次隨著業(yè)務的增加,單一應用服務器能夠并發(fā)處理的請求連接有限,在流量的高峰期,應用服務器開始成為整個系統(tǒng)的性能瓶頸。
因此這個時候就開始組件應用服務器集群,不僅應用服務器有集群,緩存服務器等也可以組成集群。那么既然有了服務器集群,那對于這些請求,到底應該有哪臺服務器響應呢。所以負載均衡調(diào)度服務器就出現(xiàn)了。
通過負載均衡調(diào)度服務器,可將來自瀏覽器的訪問請求分發(fā)到應用的集群中的任何一臺服務器上。使用服務器集群也有個好處,Web 應用程序更新可以做到用戶無感知,當有一個節(jié)點的服務器宕機之后,也不影響整體的請求。
一圖勝千言:
數(shù)據(jù)庫讀寫分離階段
雖然增加了數(shù)據(jù)緩存這一層。比如利用redis緩存,但是隨著用戶量的不斷增加??傆幸恍┦菬o法通過緩存提高的,比如還可能出現(xiàn)緩存過期、緩存沒有命中等情況。那么這些請求全部會打到數(shù)據(jù)庫服務器上,這個時候數(shù)據(jù)庫服務成為了整個系統(tǒng)的瓶頸。所以數(shù)據(jù)讀寫分離就出現(xiàn)了。
目前大部分的數(shù)據(jù)庫都提供了一個主從熱備的功能。通過配置主從兩臺服務器,當應用服務器往主服務器寫入詩句時,利用主從復制機制將數(shù)據(jù)更新同步到從數(shù)據(jù)庫上。讀寫分離之后,數(shù)據(jù)庫的性能瓶頸就解決了。一圖勝千言:
反向代理與CDN加速階段
當網(wǎng)站業(yè)務再次升級,用戶規(guī)模再次擴大,為了滿足不同地區(qū)的用戶訪問速度,提高響應速度,CDN和反向代理就出現(xiàn)了,兩者基本原因都是緩存。
CDN就是內(nèi)容分發(fā)網(wǎng)絡,你的請求響應服務器會從距離你最近的一個服務器集群上響應回來,比如你在云南,可能就從云南的機房響應。
而反向代理則部署在中心機房,當請求來到中心機房后,首先訪問的時候反向代理服務器,看看是否名字緩存,如果命中則直接返回。一圖勝千言:
分布式數(shù)據(jù)庫階段
分布式數(shù)據(jù)庫是系統(tǒng)數(shù)據(jù)庫拆分的最后手段,這只有在單表數(shù)據(jù)規(guī)模非常大的時候才會用,一般的數(shù)據(jù)庫拆分都是對業(yè)務拆分后將不同的業(yè)務數(shù)據(jù)部署在不同的服務器上。如下圖:
NoSQL與搜索引擎階段
當成為大型系統(tǒng)的時候,搜索成為了日常需求,這時會采用NoSQL和搜索引擎來提高搜索效率,緩存的時候redis也是NoSQL類型的。如下圖:
業(yè)務拆分階段
當業(yè)務日漸的增多,可能團隊人員也不利于管理,這個時候大型的系統(tǒng)都會進行業(yè)務拆分,比如抖音就拆了很多很多業(yè)務線。每條業(yè)務線服務不同的服務,每個服務都單獨進行部署,可以通過消息隊列進行數(shù)據(jù)分發(fā)。如下圖:
分布式服務階段
隨著業(yè)務拆分越來越小,存儲系統(tǒng)越來越龐大,應用系統(tǒng)的整體復雜度呈指數(shù)級增加,部署維護越來越困難。
既然每一個應用系統(tǒng)都需要執(zhí)行許多相同的業(yè)務操作,比如用戶管理、商品管理等,那么可以將這些共用的業(yè)務提取出來,獨立部署。由這些可復用的業(yè)務連接數(shù)據(jù)庫,提供共用業(yè)務服務,而應用系統(tǒng)只需要管理用戶界面,通過分布式服務調(diào)用共用業(yè)務服務完成具體業(yè)務操作。如下圖:
總結(jié)
目前很少有人能經(jīng)歷上面的系統(tǒng)演進,大部分大型的系統(tǒng)已經(jīng)成型,而小系統(tǒng)可能又很可能撐不到成為大系統(tǒng),所以很少有人能經(jīng)歷這些,不過了解這些,我們對于整個系統(tǒng)架構(gòu)的理解非常有幫助。
Hello,我是ConeZhang,本科畢業(yè)于某不老牌雙非末流一本,科班CS專業(yè)。本科做了四年iOS開發(fā),寫過無數(shù)iOS應用,拿過無數(shù)軟件競賽獎,也折騰過安卓開發(fā),整過Spring全家桶,寫過網(wǎng)站,搭過服務器。秋招拿到了微信、抖音等大廠offer,是一段從春招屢戰(zhàn)屢敗到秋招屢戰(zhàn)屢勝的經(jīng)歷。
如今在字節(jié)跳動抖音基礎(chǔ)技術(shù)做全棧研發(fā),啥都會點,啥也不會。歡迎大家點個關(guān)注長期持有我這只潛力股。
文章題目:圖文并茂!談談網(wǎng)站架構(gòu)演進
轉(zhuǎn)載來源:http://m.fisionsoft.com.cn/article/djocjcc.html


咨詢
建站咨詢
