1. 程式人生 > >Linux系統——http協議原理

Linux系統——http協議原理

Web服務基礎

使用者訪問網頁基本流程

(1)在瀏覽器中輸入域名,系統會查詢系統本地的DNS快取及hosts檔案資訊,查詢是否存在域名對應的IP解析記錄

(2)DNS解析域名為IP地址,系統會把瀏覽器的解析請求傳送給客戶端本地設定的DNS伺服器地址解析,如果LDNSlocal DNS)伺服器的本地快取有對應的解析記錄就會直接返回IP地址給客戶端(如果沒有,則LDNS會負責繼續請求其他的DNS伺服器)

(3)對目標進行TCP三次握手

(4)Web伺服器發起了一個請求URL

(5)伺服器響應請求,回覆一個響應包

(6)瀏覽器解析響應包出現我們看到的網頁

 

DNS域名解析過程

(1)去系統本地的DNS快取中查詢域名對應的IP解析記錄

(2)若沒有,會向hosts檔案資訊中查詢域名對應的IP解析記錄

(3)若沒有,會去LDNS發起請求查詢域名對應的IP解析記錄,LDNS會向LDNS伺服器的本地快取中查詢,若沒有,會向LDNS的映像檔案/etc/hosts中查詢

===============以上為DNS的遞迴查詢=========================================

===============以下為DNS的迭代查詢=========================================

(4)LDNS 會從DNS系統的(

.)根開始請求該域名(www.baidu.com)的解析,根伺服器下面是沒有域名的解析記錄的,但是跟下面有域名對應的頂級域.org的解析記錄,則根會把.org對應的DNS伺服器地址返回給LDNS

(5)若沒有,LDNS獲取到baidu.com對應的DNS伺服器地址後,會去頂級域伺服器請求該域名(www.baidu.com)的解析,baidu.com對應的DNS伺服器是該域名(www.baidu.com)授權DNS伺服器,會有對應的IP解析記錄

(6)對應的域名DNS伺服器會把域名對應的IP解析記錄發給LDNS

(7)LDNS會受到對應的IP解析記錄,並LDNS會把本地域名和IP的對應解析記錄快取起來,以便下次查詢。

 

 

 

 

 

HTTP協議(超文字傳輸協議)

HTTP協議的WWW服務應用預設埠80HTTPS預設443

WWW 全球資訊網

 

統一資源定位符

URL=域名+URIURI:具體的資源位置,頁面的路徑)

組成:協議型別(protocol)、主機名(hostname)、埠(port)、路徑及檔名(path

一個完整的URL為一個請求

 

HTTP請求方法

GET  客戶端請求指定資源資訊,伺服器返回指定資源(讀請求)特點:速度非常快,明文資訊,公開不加密(只有訊息頭,沒有訊息體)

HEAD 只請求響應報文(訊息頭和訊息體)中的HTTP首部(只看訊息體)

POST 將客戶端的資料提交到伺服器(寫請求,向網頁伺服器寫入內容)特點:加密請求,一般用在使用者註冊

PUT 從客戶端向伺服器傳送的資料取代指定的文件內容

DELETE請求伺服器刪除Request-URI所標識的資源

MOVE 請求伺服器將制定的頁面移至另一個網路地址

 

訊息頭與訊息體

訊息頭:記錄使用者的屬性及請求資訊與響應資訊與訪問狀態

訊息體:網頁

 

 

 

模擬訪問瀏覽器

# curl

# curl -v www.baidu.com

 

 

 

 

 

 

返回碼

100-199 指定客戶端相應的某些動作

200-299 表示請求成功

300-399 用於已經移動的檔案並且常被包含在定位頭訊息中指定新的地址資訊

400-499 指出客戶端出現問題

500-599指出服務端

 

200 OK 操作成功

301 Moved Permanently永久重定向(永久跳轉)

302 Found臨時重定向(臨時跳轉)

304 Not Modified觸發快取(文件內容沒有發生改變)

403 Forbidden許可權拒絕

404 Not Found找不到網頁

500 Internal Server Error內部伺服器錯誤(查詢防火牆安全機制被阻擋問題)

502 Bad Gateway網關出現問題(查詢路由器問題,追蹤閘道器)

503 Service Unavailable服務當前不可用(伺服器宕機,伺服器超載)

504 Gateway Timeout 閘道器超時

 

 

 

 

 

HTTP資源

媒體型別

Web伺服器會把通過過Web傳輸的每個物件都打上名為MIME型別(MIME Type)的資料格式標籤。

 

 

URL統一資源定位符

也稱網址

三部分:

(1)協議

(2)主機資源伺服器IP地址或域名(埠號)

(3)主機資源的具體地址,如目錄和檔名

其中,第一部分與第二部分之間用://”隔開,第二部分和第三部分用“:/”隔開,第三部分可以省略

 

 

 

前端語言:HTMLCSSJavaScript

 

靜態網頁資源

使用者直接接觸的客戶端就是前端,

web開發

HTML語言決定了瀏覽器上顯示的具體內容(靜態)

CSS語言決定了內容顯示格式優化(靜態),有座標能夠規劃內容顯示位置及圖片的顯示方式

JavaScriptJS)語言(動態)網頁上的shell程式碼                                                                                                                                                                                                                                                                                                                                                                                                                             

Web伺服器遵照的協議:xml協議、json協議等(作用:規範資料包的格式)

 

靜態網頁:

在網站設計中,純粹HTML格式的網頁(可以包含圖片,視訊,JS(前端功能實現),CSS(樣式)等)通常被稱為“靜態網頁”,早期的網站大多都是靜態的。靜態網頁是相對於動態網頁而言的,是指沒有後臺數據庫,不含程式(如phpjspasp)和可互動的網頁。

 

靜態網頁:Server端通過xml協議及json協議經過JavaScript的迴圈處理,使用HTML語言及CSS語言將網頁資料傳遞到客戶端

 

 

靜態頁面的特點(圖片、視訊):

1)每個網頁都有一個固定的URL地址,且URL一般以.html,.html,shtml等常見形式為字尾,

而且地址中不含郵問號“?”或“&”等特殊符號。

2)網頁內容一經發布到網站伺服器上,無論是否有使用者訪問,每個網頁的內容都是儲存在網站伺服器檔案系統上的,也就是說,靜態網頁是實實在在儲存在伺服器上的檔案實體,每個網頁都是一個獨立的檔案。

3)網頁內容是固定不變的,因此,容易被搜尋引擎收錄(容易被使用者找到)(優點)

4)網頁沒有資料庫支援,在網站製作和維護方面工作量較大,因此當網站資訊量很大時完全依靠靜態網頁製作的方式比較困難(缺點)

5)網頁的互動性較差,在程式功能實現方面有較大的限制(缺點)

6)網頁程式在使用者瀏覽器端解析,如IE瀏覽器,程式解析效率很高,由於服務端不進行解析,並且不需要讀取資料庫,因此伺服器端可以接受更多的併發訪問。當客戶端向伺服器

請求資料時,伺服器直接把資料從磁碟檔案系統上返回(不做任何解析),待客戶端拿到

資料後,在瀏覽器端解析展現出來(優點)

 

靜態網頁特點:

(1)不需要資料庫支援

(2)伺服器端解析速度快

(3)給伺服器端造成壓力小

(4)搜尋引擎喜歡收錄靜態網頁,不喜歡收錄動態網頁

(5)由於靜態網頁是固定不變的,所以維護靜態網頁的資料十分麻煩,需要開啟網頁進行逐個修改

 

 

常見靜態網頁語言:htmljscssxmlshtml

 

靜態網頁的架構思想

在高併發,高訪問量的場景下做架構優化,涉及的關鍵環節就是把動態網頁轉成靜態網頁(偽靜態),把不經常用的做成偽靜態存放在硬碟中,注意存活週期,而不直接請求資料庫和動態伺服器,並且可以把靜態內容推送到前端快取(或CDN)中提供服務,這樣就可以提升使用者體驗,節約伺服器和維護成本。

 

偽靜態網頁的本質是什麼?

把使用者請求的資料解析成靜態檔案,放在磁碟和記憶體中,來降低動態伺服器的壓力,節約企業成本,提升使用者體驗(把不經常變得動態網頁程式設計偽靜態網頁存在記憶體或者硬碟中)

 

動態網頁:

所謂的動態網頁是與靜態網頁相對而言的,也就是說,動態網頁的URL字尾不是.htm,.html,.shtml,.xml,.js,.css等靜態網頁的常見字尾副檔名形式,而是以.asp,.aspx,.php,.js,.do,.cgi等形式作為字尾的,並且一般在動態網頁網址中會有標誌性的符號--“?,&”,此外,在大多數情況下後端都需要有資料庫支援

 

動態網頁資源介紹

所謂的動態網頁是與靜態網頁相對而言的,也就是說,動態網頁的URL字尾不

.htm,.html,.shtml,.xml,.js,.css等靜態網頁的常見字尾副檔名形式,而是

.asp,.aspx,.php,.js,.do,.cgi等形式作為字尾的,並且一般在動態網頁網址中會有標誌性的符

--“?,&”,此外,在大多數情況下後端都需要有資料庫支援等。

動態網頁資源特點

1)網頁副檔名字尾常見為:.asp,.aspx,.php,.jsp,.do,cgi

2)網頁一般以資料庫技術為基礎,大大降低了網站維護的工作量

3)採用動態網頁技術的網站可以實現更多的功能,如使用者註冊,使用者登入,線上調查,投

票,使用者管理,訂單管理,發博文等等

4)動態網頁並不是獨立存在於伺服器上的網頁檔案,當用戶請求伺服器上的動態程式時,服

務器解析這些程式並可能讀取資料庫返回一個完整的網頁內容。

5)動態網頁中的“?”在搜尋引擎的收錄方面存在一定問題,搜尋引擎一般不會從一個網站

的資料庫中訪問全部網頁,或者出於技術等方面的考慮,搜尋蜘蛛一般不會去抓去網址

“?”後面的內容,因此在企業通過搜尋引擎進行推廣時,需要針對採用動態網頁的網站做

一定的技術處理(偽靜態技術),以便適應搜尋因窮的抓取要求。

6)程式在伺服器端解析,這相當於顧客點餐,飯店廚師做飯做菜,耗時長,效率低。由於程

序在服務端解析,因此,會消耗大量的CPU和記憶體,I/O等資源,並且多數還要讀取資料庫等

服務,因此,其訪問效率遠不如靜態網頁,在服務端解析動態程式的服務常見的有PHP

擎,Java容器(tomcat,resin,jboss,weblogic

有關動態網頁的架構思想

一般來說,靜態網頁的效能效率是動態網頁的1030倍。且動態網站效率很差,併發能力

也很低,在高併發場景中,應儘可能轉換成靜態網頁提供服務。動態轉靜態幾乎是所有高

併發網站必備的架構方案思路,也是高階架構師的職責所在。

此外,動態轉靜態也要根據業務需求設計,例如,對於更新頻繁的網站如果設計不好就可

能會產生資料不一致的情況,即使用者看到的資料不是網站最新的內容,而是靜態的內容

 

 

 

 

 

 

 

Tomcat Java程式碼的Web伺服器

前端快取:

資料庫快取:MySQL讀取記憶體中的資料

吞吐量:資料庫讀寫速度

儲存伺服器:分散式

Web節點層的資料由生產者模型寫入訊息佇列(分散式),由MySQL資料庫按需取走(不會超過上限)

Web節點:

Nginx+PHP (前端語言、後端語言)

Nginx+tomcat Java語言)

前端語言對後端語言沒有直接關係,只是資料傳遞的方式

負載均衡層:

nginx反向代理

LVS

前端快取層:解決儲存伺服器問題

Nginx前端快取,圖片和視訊到Nginx前端快取記憶體中讀取資料,降低儲存伺服器的儲存壓力

Squid

Vanish

 

LAMPLinux+Apache+MySQL+PHP

LNMPLinux+Nginx+MySQL+PHP):PC端訪問網頁,通過負載均衡層通過nginx反向代理

傳輸到Web節點,使用Nginx+PHP語言,在傳輸到MySQL資料庫查詢資料。

 

 

併發:同一時間內伺服器進入資料傳輸狀態(establish)的;網站伺服器在單位時間內能夠處理的最大連線數

 

併發IP數:同一時間段內伺服器進入資料傳輸狀態(establish)的平均數

 

吞吐量:I/O讀寫速度(針對儲存)檢視方式:dd;每秒處理使用者的請求數(Web伺服器),檢視方式:status取其中的請求資料

測試磁碟的儲存效能

連續的讀寫向磁碟中寫入大的檔案

dd if=/dev/zero of=/tmp/test01.bin bs=1K count=10000

 

QPSQuery Per Second)每秒查詢率

每秒查詢率QPS是用於衡量一個特定的查詢伺服器在規定時間內所處理流量多少的標準。運維工作中,DNS系統以及資料庫等服務的查詢效能經常用每秒查詢率來衡量。

 

IOPSInput/Output Operations Per Second

IOPS即每秒進行讀寫(I/O)操作的次數,多用於資料庫等場合,衡量隨機訪問的效能。儲存端的IOPS效能和主機端的I/O是不同的,IOPS是指儲存每秒可接受多少次主機發出的訪問,主機的一次I/O需要多次訪問儲存才可以完成。例如,主機寫入一個最小的資料塊,也要經過“傳送寫入請求,寫入資料,收到寫入確認”等三個步驟,也就是3個儲存訪問。

 

Jemter壓力測試軟體

 

檢視企業當天的網站的訪問量

1)獨立IP數:比真實使用者訪問數偏小(nginx切割,去返回碼,對第一列ip去重sortuniquewc -l

國內幾乎所有的公司都是採用區域網共享上網的,即通過路由器NAT地址轉換上網,每個計算機在區域網內的私有IP是不同的,但是在外網上,就必須都要由路由器把每個私網地址轉換成了路由器介面的固定公網IP(多IP對映暫不考慮),所以說,對於網站來說一天內多個相同公司的IP的客戶端訪問計算為一個獨立IP

 

2PV訪問量:一個頁面記作一PV訪問量,大於真實使用者量 (在URL取正確返回碼,去除靜態資源,把所有單獨訪問的圖片視訊去掉,無需去重);點選量

 

3UV獨立訪客:計算cookiecookie存活時間為一天,,同一臺客戶端(PC或移動端)訪問網站被計算為一個訪客。一天(00:00-24:00)內相同的客戶端訪問同一個網站只計算一次UVUV一般是以客戶端Cookie等技術作為統計依據的,實際統計會有誤差

 

 

常見面試題如下:

請問你們的網站併發是多少?

你們公司網站訪問量是多少?怎麼計算?

一定要理解IPPV,併發量這3個點的知識,在回答時才能有的放失,這三個點的多少決

定面試時說多大的架構,對於沒有經驗的新手不能在說有幾萬的PV時,還說數十臺的集

群架構,這樣就烏龍了。

運維部分日誌分析

開發在頁面嵌入JS程式統計收集,分析

運營市場通過第三方公司提供的工具程式統計,例如:GA統計