首頁>技術>

一、前言

Web開發是一直以來程式設計師的熱門發展方向,尤其是全棧工程師的薪資待遇很豐厚,最近有很多小夥伴問到我關於Web開發的問題,最常見的就是"web開發難嗎"、"學什麼語言做web開發好找工作"。

作為一個多年線上下教學web開發的老師,今天我用比較容易理解的方式來給大家講講web開發最重要的東西——伺服器架構的原理,大家可以透過這個入門的講解來自己給自己答案,一切事物看本質。

老規矩,前面先跟大家講技術知識點,後面把自己收藏的乾貨送給大家,但願能幫到需要的人。

二、伺服器框架的原理和技術

首先我們先來看一張Web開發的伺服器框架原理圖,我們從這裡開始瞭解:

暫時先不對裡面的板塊做詳細分析,文章後面會具體講解,我們先來梳理一下web開發的伺服器框架原理。

從圖中的白箭頭我們可以看出來,伺服器的響應過程可以大致分為兩個流程:

請求資料過程:客戶端→web伺服器→業務伺服器→快取伺服器→資料庫

返回資料過程:資料庫→快取伺服器→業務伺服器→web伺服器→客戶端

舉個例子,一個叫王二麻子的同學想從電腦上查一下自己的英語四級考試分數,這時候他在電腦上登入查詢頁面的時候,就是在客戶端。當他在客戶端輸入完個人資訊後點擊查詢按鈕時,客戶端就開始向web伺服器傳送王二麻子的資料請求,web伺服器命令業務伺服器去快取伺服器核實和處理一下,快取伺服器帶著王二麻子的資料再去資料庫調取資料。

當資料庫調取完王二麻子的資料之後,就立馬告訴快取伺服器,快取伺服器又跑去告訴業務伺服器,業務伺服器屁顛屁顛地把王二麻子的資料交給web伺服器,web伺服器大手一揮,終端悄無聲息地就把王二麻子的資料呈現出來了,王二麻子一看資料可能就大罵一句:"XX,又要重考!"

過程就是這麼個過程,雖然看起來跑來跑去很麻煩,但其實不麻煩的,計算機分分鐘能處理千萬個王二麻子。

三、伺服器各個板塊講解

(一)客戶端

web開發目前主要的客戶端型別有IOS、Android、PC(電腦)和移動(手機等)四種客戶端,這個就不多講了,通常意義上,每一個使用者的介面就是客戶端了,用來呈現圖片、文字、影片等資料給使用者檢視。

(二)web伺服器

web伺服器的主要功能有2個:負載均衡和靜態資源伺服器。

(1)負載均衡

什麼叫負載均衡?我們先來看一張圖哈:

這是最簡單的一個伺服器架構了,它沒有web伺服器,就只有客戶端、業務伺服器、資料庫組成,在資料量較小的情況下,它是可以正常執行的。

假如一個業務伺服器能支援5000個客戶端訪問,只要不超過5000臺裝置訪問都是OK的,但如果超出了5000個客戶端訪問呢?那就只剩下2個方法,一是透過換開發語言來重構業務伺服器以達到提升它的效能,涉及開發語言的效能,後面我們再講;二是增加業務伺服器的數量來保證大量使用者端的正常訪問,,增加負載能力,這也是較為常用的方法。

那麼問題來了,增加業務伺服器的數量,但它們"長得"都差不多,客戶端就很鬱悶,我該訪問哪個伺服器?

所以需要一個web伺服器來統籌分配,分配客戶端應該訪問哪個業務伺服器,合理分配資源,避免導致客戶端統一訪問某個業務伺服器而造成負載超核,這就是web伺服器的負載均衡作用。

(2)靜態資源伺服器

不是所有的資料請求都要訪問資料庫。前面我們所說的從客戶端一步一步跑到資料庫來進行資料的請求和返回資料動態請求,而有些資料儲存在web伺服器上的,不需要訪問資料庫就能獲取資料到使用者端,稱為靜態請求。

比如某些網頁不常變化的一些文字、圖片、影片等,基本就固定在某個地方做展示,開發員不調整就不會更新的那種,靜靜地待在那裡,誰進入頁面就顯示出來,這些資料放在web伺服器上而沒有存在資料庫,便於更快地展現給客戶端。

(三)業務伺服器

業務伺服器的主要功能是:接受資料、處理(查詢、寫入)資料、返回資料三方面。

(1)協議

目前伺服器對資料的傳輸和處理主要遵循兩種協議:http/https和socket請求。http協議屬於應用層,socket就比較原生了,就是所謂的TCP/IP層,屬於網路層。這兩個就不細講了,往這方面發展都會學的。

(2)開發語言

伺服器的開發語言算是百家爭鳴了,你可以用C、C++、Java、PHP、Python、Ruby等語言來開發,但是從效能、價效比方面還是有區別的。

目前在做伺服器比較多的語言還是Java和PHP,為什麼呢?第一,php相對比較簡單,比較容易入門這功能;第二,java可以大規模的團隊協作開發,封裝成模組,程式碼可複用。

但現在還存在這麼一種趨勢:用C/C++和Python來做伺服器開發的公司越來越多了,為什麼呢?

因為很多伺服器開發的開發時期是很久以前了,十年或十幾年前了,那時候企業為了快速地攻城略池,先把業務跑起來,選用了開發週期短的語言來做伺服器,雖然負載有限,但可以用硬體來補足,但隨著手機和電腦的數量越來越多,客戶端數量上升,如果還是用硬體來補足伺服器的負載效能,將會面臨很多問題。

比如說其中的電費問題,阿里就遇到過,機器得一直開著,隨著阿里的業務量越來越大,硬體每天消耗的電費開銷是個頭疼的問題,日以繼夜地燒下去只會是燒錢,光是電費開銷就佔到了公司年開銷的10~30%,那怎麼辦?那就只能從伺服器的開發入手,選用效能更高的語言來重構伺服器,效能提高,有的伺服器重構之後效能,單臺效能可以提升10倍。

所以C/C++這種機器語言就成為了有實力的企業開發伺服器首選,所以說C/C++永不過時。

對於中小型企業來講,開發伺服器不建議用C/C++,雖然它們的效能高,但開發起來難度大,而且市面上真正懂C/C++的程式設計師比較少,所以支付的工資自然也就高了。可以選用指令碼語言來開發,讓業務先跑起來,等到了瓶頸時,相信公司也有了穩定的資金支援了,這個時候再重構伺服器更合適。

我個人比較推崇用Python來做中小企業的伺服器開發,為什麼不是其他的語言呢?

首先Python是一門面向物件的指令碼語言,程式碼量少,語法簡潔,邏輯清晰,從的程式碼優美程度和團隊協作開發上來講,PHP不如Python;Java雖然好,但是比較重,比如干一件事情C語言需要100行程式碼,那麼Java差不多就是50行左右,而Python只需要10行。

我個人不推薦用Ruby來做伺服器。一是因為Ruby是日本人做的東西,愛國情懷;二是Ruby是一種魔幻語言,什麼意思呢?也就是你寫了一個符號或者寫了一個指令,他背後給你幹了很多事兒,你看不到這個東西的底層,邏輯上不清晰,隨便寫,也就是說你按照它的一些特殊的符號,它會給你帶來很多事兒。這種魔幻性語言他們不適合團隊開發,團隊開發的話呢,大家水平參差不齊,有的人掌握了更多的魔幻語法,有的人不掌握,不適合團隊開發。

(四)資料庫和快取伺服器

認真看文章的朋友可能會發現,在之前我們有講過伺服器架構的最簡版,裡面沒有快取伺服器也能正常執行,那麼問題來了,業務伺服器需要資料直接去資料庫找不就完了?為什麼要增加一個快取伺服器?

這其實是為了減少資料庫的負載和提升客戶端的體驗感。快取伺服器相當於一個快取區,可以快取資料。

舉個例子,資料庫的讀取速度如果是4000次/s,如果此時有1萬個資料線上請求訪問資料庫,可是資料庫這1s很忙啊,忙不過來,那客戶端那邊就只有等待了,資料庫需要2s多的時間才能給到客戶端想要的資料,那如果是10萬、100萬、1000萬呢?等20s、200s、2000秒?這樣的使用者體驗感是不是很不好?

於是增加了快取伺服器,它可以將常用資訊快取在那裡,讀取速度快(具體多快可以去網上查一下快取和記憶體的速度差別),當再次客戶端再次請求時,就不需要訪問資料庫,直接拿快取伺服器裡面的資料就可以了。

在資料的儲存方面還有更高深的分散式檔案儲存系統,也是解決傳統資料庫的不足之處,比如阿里採用的的TDFS和亞馬遜的GDFS等等,這方面屬於比較高階的技術了,如果有機會也可以去了解一下。

關於web開發的伺服器架構原理就給大家講完了,從原理上來理解的話也並沒有很困難,如果你選用合適的語言去做web開發也會事半功倍,尤其是Python來做開發,很多人前後端都能搞定,作為這樣的全棧工程師在市面上是很吃香的。

會員中心

收藏

動態

訊息1

創作中心

做個web全棧工程師很難嗎?最難的伺服器架構也就這樣而已

書聲琅琅Python訓練營 2021-02-26 14:24:46

收藏

文章標籤: mysql python javascript web開發 程式設計師

一、前言

Web開發是一直以來程式設計師的熱門發展方向,尤其是全棧工程師的薪資待遇很豐厚,最近有很多小夥伴問到我關於Web開發的問題,最常見的就是"web開發難嗎"、"學什麼語言做web開發好找工作"。

作為一個多年線上下教學web開發的老師,今天我用比較容易理解的方式來給大家講講web開發最重要的東西——伺服器架構的原理,大家可以透過這個入門的講解來自己給自己答案,一切事物看本質。

老規矩,前面先跟大家講技術知識點,後面把自己收藏的乾貨送給大家,但願能幫到需要的人。

二、伺服器框架的原理和技術

首先我們先來看一張Web開發的伺服器框架原理圖,我們從這裡開始瞭解:

暫時先不對裡面的板塊做詳細分析,文章後面會具體講解,我們先來梳理一下web開發的伺服器框架原理。

從圖中的白箭頭我們可以看出來,伺服器的響應過程可以大致分為兩個流程:

請求資料過程:客戶端→web伺服器→業務伺服器→快取伺服器→資料庫

返回資料過程:資料庫→快取伺服器→業務伺服器→web伺服器→客戶端

舉個例子,一個叫王二麻子的同學想從電腦上查一下自己的英語四級考試分數,這時候他在電腦上登入查詢頁面的時候,就是在客戶端。當他在客戶端輸入完個人資訊後點擊查詢按鈕時,客戶端就開始向web伺服器傳送王二麻子的資料請求,web伺服器命令業務伺服器去快取伺服器核實和處理一下,快取伺服器帶著王二麻子的資料再去資料庫調取資料。

當資料庫調取完王二麻子的資料之後,就立馬告訴快取伺服器,快取伺服器又跑去告訴業務伺服器,業務伺服器屁顛屁顛地把王二麻子的資料交給web伺服器,web伺服器大手一揮,終端悄無聲息地就把王二麻子的資料呈現出來了,王二麻子一看資料可能就大罵一句:"XX,又要重考!"

過程就是這麼個過程,雖然看起來跑來跑去很麻煩,但其實不麻煩的,計算機分分鐘能處理千萬個王二麻子。

三、伺服器各個板塊講解(一)客戶端

web開發目前主要的客戶端型別有IOS、Android、PC(電腦)和移動(手機等)四種客戶端,這個就不多講了,通常意義上,每一個使用者的介面就是客戶端了,用來呈現圖片、文字、影片等資料給使用者檢視。

(二)web伺服器

web伺服器的主要功能有2個:負載均衡和靜態資源伺服器。

(1)負載均衡

什麼叫負載均衡?我們先來看一張圖哈:

這是最簡單的一個伺服器架構了,它沒有web伺服器,就只有客戶端、業務伺服器、資料庫組成,在資料量較小的情況下,它是可以正常執行的。

假如一個業務伺服器能支援5000個客戶端訪問,只要不超過5000臺裝置訪問都是OK的,但如果超出了5000個客戶端訪問呢?那就只剩下2個方法,一是透過換開發語言來重構業務伺服器以達到提升它的效能,涉及開發語言的效能,後面我們再講;二是增加業務伺服器的數量來保證大量使用者端的正常訪問,,增加負載能力,這也是較為常用的方法。

那麼問題來了,增加業務伺服器的數量,但它們"長得"都差不多,客戶端就很鬱悶,我該訪問哪個伺服器?

所以需要一個web伺服器來統籌分配,分配客戶端應該訪問哪個業務伺服器,合理分配資源,避免導致客戶端統一訪問某個業務伺服器而造成負載超核,這就是web伺服器的負載均衡作用。

(2)靜態資源伺服器

不是所有的資料請求都要訪問資料庫。前面我們所說的從客戶端一步一步跑到資料庫來進行資料的請求和返回資料動態請求,而有些資料儲存在web伺服器上的,不需要訪問資料庫就能獲取資料到使用者端,稱為靜態請求。

比如某些網頁不常變化的一些文字、圖片、影片等,基本就固定在某個地方做展示,開發員不調整就不會更新的那種,靜靜地待在那裡,誰進入頁面就顯示出來,這些資料放在web伺服器上而沒有存在資料庫,便於更快地展現給客戶端。

(三)業務伺服器

業務伺服器的主要功能是:接受資料、處理(查詢、寫入)資料、返回資料三方面。

(1)協議

目前伺服器對資料的傳輸和處理主要遵循兩種協議:http/https和socket請求。http協議屬於應用層,socket就比較原生了,就是所謂的TCP/IP層,屬於網路層。這兩個就不細講了,往這方面發展都會學的。

(2)開發語言

伺服器的開發語言算是百家爭鳴了,你可以用C、C++、Java、PHP、Python、Ruby等語言來開發,但是從效能、價效比方面還是有區別的。

目前在做伺服器比較多的語言還是Java和PHP,為什麼呢?第一,php相對比較簡單,比較容易入門這功能;第二,java可以大規模的團隊協作開發,封裝成模組,程式碼可複用。

但現在還存在這麼一種趨勢:用C/C++和Python來做伺服器開發的公司越來越多了,為什麼呢?

因為很多伺服器開發的開發時期是很久以前了,十年或十幾年前了,那時候企業為了快速地攻城略池,先把業務跑起來,選用了開發週期短的語言來做伺服器,雖然負載有限,但可以用硬體來補足,但隨著手機和電腦的數量越來越多,客戶端數量上升,如果還是用硬體來補足伺服器的負載效能,將會面臨很多問題。

比如說其中的電費問題,阿里就遇到過,機器得一直開著,隨著阿里的業務量越來越大,硬體每天消耗的電費開銷是個頭疼的問題,日以繼夜地燒下去只會是燒錢,光是電費開銷就佔到了公司年開銷的10~30%,那怎麼辦?那就只能從伺服器的開發入手,選用效能更高的語言來重構伺服器,效能提高,有的伺服器重構之後效能,單臺效能可以提升10倍。

所以C/C++這種機器語言就成為了有實力的企業開發伺服器首選,所以說C/C++永不過時。

對於中小型企業來講,開發伺服器不建議用C/C++,雖然它們的效能高,但開發起來難度大,而且市面上真正懂C/C++的程式設計師比較少,所以支付的工資自然也就高了。可以選用指令碼語言來開發,讓業務先跑起來,等到了瓶頸時,相信公司也有了穩定的資金支援了,這個時候再重構伺服器更合適。

我個人比較推崇用Python來做中小企業的伺服器開發,為什麼不是其他的語言呢?

首先Python是一門面向物件的指令碼語言,程式碼量少,語法簡潔,邏輯清晰,從的程式碼優美程度和團隊協作開發上來講,PHP不如Python;Java雖然好,但是比較重,比如干一件事情C語言需要100行程式碼,那麼Java差不多就是50行左右,而Python只需要10行。

我個人不推薦用Ruby來做伺服器。一是因為Ruby是日本人做的東西,愛國情懷;二是Ruby是一種魔幻語言,什麼意思呢?也就是你寫了一個符號或者寫了一個指令,他背後給你幹了很多事兒,你看不到這個東西的底層,邏輯上不清晰,隨便寫,也就是說你按照它的一些特殊的符號,它會給你帶來很多事兒。這種魔幻性語言他們不適合團隊開發,團隊開發的話呢,大家水平參差不齊,有的人掌握了更多的魔幻語法,有的人不掌握,不適合團隊開發。

(四)資料庫和快取伺服器

認真看文章的朋友可能會發現,在之前我們有講過伺服器架構的最簡版,裡面沒有快取伺服器也能正常執行,那麼問題來了,業務伺服器需要資料直接去資料庫找不就完了?為什麼要增加一個快取伺服器?

這其實是為了減少資料庫的負載和提升客戶端的體驗感。快取伺服器相當於一個快取區,可以快取資料。

舉個例子,資料庫的讀取速度如果是4000次/s,如果此時有1萬個資料線上請求訪問資料庫,可是資料庫這1s很忙啊,忙不過來,那客戶端那邊就只有等待了,資料庫需要2s多的時間才能給到客戶端想要的資料,那如果是10萬、100萬、1000萬呢?等20s、200s、2000秒?這樣的使用者體驗感是不是很不好?

於是增加了快取伺服器,它可以將常用資訊快取在那裡,讀取速度快(具體多快可以去網上查一下快取和記憶體的速度差別),當再次客戶端再次請求時,就不需要訪問資料庫,直接拿快取伺服器裡面的資料就可以了。

在資料的儲存方面還有更高深的分散式檔案儲存系統,也是解決傳統資料庫的不足之處,比如阿里採用的的TDFS和亞馬遜的GDFS等等,這方面屬於比較高階的技術了,如果有機會也可以去了解一下。

關於web開發的伺服器架構原理就給大家講完了,從原理上來理解的話也並沒有很困難,如果你選用合適的語言去做web開發也會事半功倍,尤其是Python來做開發,很多人前後端都能搞定,作為這樣的全棧工程師在市面上是很吃香的。

各位友友,我的網盤資料是越堆越多了,尤其是小白入門Python的資料,我已經用不到了,現準備拿出來分享給大家,有需要的直接拿走。

需要的話可以找我助教,她時間比較多,備註一下"領資料",方便她知道你的來意和最快速度給你東西,細品下圖:

6
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 如何在jmeter中快速開發效能指令碼?這個功能你需要知道