小白看大型網站架構設計方案

大型網站的架構設計一般與小型的網站差別很大,考慮的技術點也是不一樣的

在這裏插入圖片描述

01 前言


最近對大型網站的架構比較感興趣,就看了一本關於架構的書籍,順便記錄一下自己的所思所想。

我們知道想淘寶、微博、12306等的軟件設計,必然與我們平時使用的軟件設計不同,原因是前者涉及到大量的數據存儲,大量的用戶訪問,還有就是高併發量(瞬間訪問量)。假如有其中的一個環節沒有做好的話肯定是影響整體的性能,因此就會出現短板效應。

我們看到的例如準點搶票、雙十一搶購、微博熱搜等都可能會導致服務器宕機,網絡癱瘓等結果,一方面可能是網絡擁擠,但是更重要的是網站的架構設計,是否能夠滿足高併發、高可用(7*24小時)的狀態。下面就看一下大型網站的架構設計是怎麼一步步實現的。

02 網站特點


我們從表面上看到的特點就是這兩個,網站訪問量大,網站併發量高。除此之外,我們就不會關心其他的事情了,這是用戶能想到的,也是用戶最想解決的兩個迫切的問題。但是在開發的技術人員看來,卻要考慮很多的因素,總的來說有以下幾點:

  • 高併發

網站要承受一瞬間訪問的量是多少,比如雙十一的搶購併髮量可以達到億的級別,這麼高的併發是普通網站根本承受不了的壓力,不僅僅是服務器多少的問題,還要考慮服務器之間的設計方案等因素。

  • 高可用

一開始我也不懂什麼是高可用,簡單來說就是7*24小時保持服務正常。因爲你不能保證用戶在大半夜會不會瀏覽你的網站,所以我們要保證服務是一直正常的。通常來說,一些小型的網站或者系統會在晚上0點就進行更新操作,限制人員的訪問。

  • 海量數據存儲

涉及到大型網站,一般用戶都是海量的,需要考慮如何存儲用戶數據、用戶瀏覽信息等。比如我們每天用的微信,每天發佈的朋友圈以及聊天的信息都是海量的,存儲在騰訊專門的服務器集羣(很多服務器)。

  • 安全係數高

不可否認我們每天都會涉及一些銀行交易,微信轉賬或者支付寶轉賬等操作,其實你想一下你的現金變化只是一個數字的改變而已,想想都覺得令人擔憂。比如你的支付寶餘額僅僅是一個數字躺在那裏,錢已經被支付寶用於其他途徑了,但是你提現等操作又會調度回來。這其中的種種過程都要保證安全才可以。

  • 需求頻繁更新

因爲後臺會收集用戶的一些信息用來改善產品功能和產品的體驗,或是用戶希望增加某一種功能。這時候就會有用戶需求,需要更新產品功能。每一款軟件的發展都是滿足一種功能,然後不斷更新迭代發展的。

  • 漸進式發展

無論多大的網站都是從很小的開始,無論多大的高樓都是一磚一瓦構成。漸進式發展與傳統的軟件開發與設計不一樣,沒有軟件完整的期望與功能整體的預見性,都是在不斷髮展中完善自我。通過對產品的不斷運行,適應用戶需求,適應時代的潮流。

03 設計演化


不知道大家是否聽過“LAMP”這個詞語,這就是早期的網站設計方案,只適用於小型的網站,如今是肯定不行的。由於開始的數據量不大,一臺服務器足以支撐真個網站的運行,操作系統使用Linux,服務器用Apache,數據庫使用mysql還有語言使用PHP開發。

網站經過業務的發展,不斷改進、不斷演化,形成了一個有章可循的技術方案。經歷的每一個階段都是由業務的驅動,假如你的網站沒有這種需求,程序員是不是搞這些大的設計方案的。正如書中所說的,是業務成就了技術,是事業成就了人。

初始發展階段

業務需求量不高,使用簡單的配置,免費開源的軟件就可以搭起一套系統。

在這裏插入圖片描述

應用數據與服務數據分離

隨着業務的發展,網站的性能必然下降,所以這時候就可以把服務進行分離。

在這裏插入圖片描述

使用緩存

參考二八法則,我們知道80%的用戶訪問網站20%的功能,所以我們只需要把用戶最需要的功能做好,那麼我們就可以用到緩存的技術,能夠及時快速地把用戶需要的資源返回給用戶。

在這裏插入圖片描述

應用服務器集羣

隨着你的業務量的增加,以及功能的不斷增加,一臺服務器的處理可能會頂不住,那這樣的話我們就放多臺服務器同時處理這個業務。就比如把用戶的請求交給多個人去做一樣,性能肯定會提升。

在這裏插入圖片描述

數據庫讀寫分離

不僅是應用層面,數據的操作也是同樣重要的,我們知道數據不是讀就是寫,一般來說用戶讀操作比較多。所以我們就把數據庫讀寫分離,一臺數據庫提供數據,另一臺寫入用戶的數據,然後中間進行數據同步(主從備份)。

在這裏插入圖片描述

負載均衡與CDN

對於業務量比較大的網站,如遍佈全國乃至全球的,就需要使用CDN了。因爲南方的用戶訪問北方的服務器,中間也會有延遲;或者美國的用戶訪問中國,那麼延遲就更大了。CDN的就是內容分發網絡,離用戶最近的服務器就會直接返回數據,這樣就快很多了。

在這裏插入圖片描述

還有就是負載均衡,加入CDN的數據過期,用戶需要訪問數據中心的時候就會先到負載均衡服務器,這裏也有緩存,如果沒有命中就統一把你的請求分發給壓力比較小的應用服務器。總的來說,CDN與負載均衡服務器的原理就是利用了緩存技術。

分佈式文件系統與分佈式數據庫系統

分佈式其實就是對原來的數據存儲再進行拆分,把不同業務的數據存儲到不同的服務器當中,減少其餘服務器的壓力。舉個例子,可以把用戶的訂單數據存儲到A數據庫服務器,用戶的信息放到B數據庫服務器。

在這裏插入圖片描述

NoSQL和搜索引擎

搜索引擎是爲了應對網站的搜索功能。

在這裏插入圖片描述

業務拆分

把一個網站拆分成多個不同的應用,每個應用獨立部署和維護。比如可以把某個功能獨立出去,提供接口嵌入網站裏面,本身的邏輯處理是在別的服務器。

在這裏插入圖片描述

分佈式服務

把公共的業務提取出來,然後獨立部署,通過分佈式服務調用共用服務完成具體業務操作。

在這裏插入圖片描述

04 小結

我們可以看一下當前的互聯網公司,能稱得上BAT級別的也就是這麼幾個,畢竟大部分都是小公司,正在逐步發展屬於自己的業務。他不可能每一個領域都有時間和精力去研究、去開發。但是一般的公司都會有自己的專業點,你只要把自己的業務發展好,服務好我們的用戶足矣,有時候搞很多花裏胡哨的東西反而沒有益處。

小型網站最需要做的就是爲用戶提供好的服務來創造價值,得到用戶的認可,活下去,野蠻生長。——李智慧《大型網站技術架構》

有的公司因爲看到最近新出了很多技術,所以也想把自己的架構改造一下,這就是爲了技術而技術。有時候自己的出發點是好的,但是也有可能帶來壞的結果,沒有順應自己的業務發展趨勢。還有也不要盲目模仿大公司的技術方案,要發展自己的獨立業務,發展自己的獨立技術。

總的來說,現在每個公司都有自己的一套技術方案,是否重構你的技術方案或者是否改變你的服務器分佈等都取決於你是否有這個需要。不過現在互聯網技術發展越發成熟,有一些資源你都可以付費購買,像阿里雲、騰訊雲等都可以使用,而且技術穩定,質量過關。畢竟是大公司。你要多優質的資源,取決於的錢給多少,非常簡單,沒有後顧之憂(已經幫你決解好了)。

最後也向大家推薦一下這本書《大型網站技術架構:核心原理與案例分析》,本書作者的技術非常好,分析獨到,值得深入閱讀。

參考文章

  • 李智慧 《大型網站技術架構:核心原理與案例分析》

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章