1. 程式人生 > >B/S 網路架構概述

B/S 網路架構概述

1.目前B/S網路架構大都採用類似下圖所示的架構
a68106fc-7cba-3429-889e-9deb880ad4ac.jpg


2.如何發起一個HTTP請求 就是建立一個Socket通訊的通過

瀏覽器在建立Socket連線連線之前,必須根據地址欄輸入的URL的域名DNS解析出IP地址,再根據這個IP地址和預設的80 埠與遠端伺服器簡歷Socket連線,然後再根據這個URL組裝成一個get型別的Http請求頭,通過outputStream.write 傳送到目標伺服器,伺服器等待inputStream.rea放回資料,最後斷開這個連線. 不同的瀏覽簡歷連線的方式不同,管理連線的方式也不同.既然傳送一個Http請求就是簡歷一個Socket通訊,那麼我們就可以不利用瀏覽器手動就可以傳送一個Http請求了.

1.使用 HttpClient
2.linux 中 使用 curl +URL 就能夠發起一個Http請求 可以加上 -I 來檢視http協議頭的資訊,或者 -H來新增 HTTP


3.Http協議的解析

8f50f8ee-893e-3c92-b8b2-7958b71cbfff.jpg

4.在瀏覽器中 檢視http頭的資訊
1.Firefox中可以使用 firebug ,Httpfox這些外掛來看看請求和返回的資訊
2.IE 中可使用 httpWatch,httpfox ,
3.Google中自帶了F12 就可以打開了.


5.瀏覽器的快取

1.為了獲取最新的資料,我們可以使用Ctrl+F5 來直接向目標URL傳送請求.這樣就不會使用瀏覽器快取資料.
2.如果伺服器前端部署了一個快取伺服器,比如 Varnish代理,也可能直接使用快取資料.
3.所以為了儲存能夠看到最新的資料,必須通過Http協議來控制了. 在傳送http請求的請求頭中加入 Cache-Control(控制瀏覽器) 和 Pragma (控制伺服器)  兩個引數來控制,瀏覽器和快取代理伺服器 必須服從命令請求最新的資料.


HTTP的請求頭中會增加一些請求頭

1 .Cache-Control / Pragma
 
    這個HTTP   Head 欄位用於指定所有快取機制在整個請求/ 響應鏈中必須服從的指令, 
如果知道該頁面是否為快取,不僅可以控制瀏覽器,還可以控制和HTTP 協議相關的快取 
或代理伺服器。HTTP Head 欄位有一些可選值


55c8494e-f041-3cbc-9da1-d6e74f31c2cd.jpg

2.Expires

    Expires 通常的使用格式是Expires : Sat, 25 Feb 2012 12:22:17 GMT ,後面跟著一個日期和時間,超過這個時間值後,快取的內容將失效,也就是瀏覽器在發出請求之前檢查這 
個頁面的這個欄位,看該頁面是否已經過期了,過期了就重新向伺服器發起請求。


3.Last-Modified  /  Etag
   
Last-Modified 欄位一般用於表示一個伺服器上的資源的最後修改時間,資源可以是靜態(靜態內容自動加上 Last-Modified欄位)或者動態的內容(如 Servlet 提供了一個 getLastModified 方法用於檢查某個動態內容是否已經更新),通過這個最後修改時間可以判斷當前請求的資源是否是最新的。一般服務端在響應頭中返回一個 Last-Modified欄位,告訴瀏覽器這個頁面的最後修改時間.
Etag: 與 Last-Modified 欄位有類似功能的還有一個 Etag 欄位,這個欄位的作用是讓服務端 給每個頁面分配一個唯一的編號,然後通過這個編號來區分當前這個頁面是否是最新的。 
這種方式比使用Last-Modified 更加靈活,但是在後端的Web 伺服器有多臺時比較難處理, 
因為每個Web 伺服器都要記住網站的所有資源,否則瀏覽器返回這個編號就沒有意義


6.DNS域名解析

1.將域名解析成IP就屬於DN解析的工作範疇.目前世界上整個網際網路有幾個DNS根域名伺服器.
步驟
1.使用者輸入域名--->瀏覽器檢測快取(檢視有無此域名解析過的IP地址)--->有(解析結束)
  瀏覽器的快取域名是有限制的,大小限制,時間限制.時間的限制可以通過TTL(Time To Live) 屬性來設定.(TTL的初值通常是系統預設值,是包頭中的8位的域)

2.如果使用者瀏覽器快取中沒有,瀏覽器會查詢作業系統快取中是否有這個域名對應的DNS解析結果一般在 C:\Window\System32\drivers\etc\hosts 檔案裡面.如果有 瀏覽器就會使用這個ip地址. 在linux 中這個配置檔案是/etc/named.conf 修改這個檔案可以達到同樣的目的.

前兩個步驟都是在本地完成的. 如果上面的步驟沒有得到域名解析的IP,此時就會請求域名伺服器來解析這個域名了

3.根據網路配置中的 "DNS伺服器地址(本地)"--->作業系統將(域名)--->LDNS伺服器--如果有-->解析結束.(window:使用ipconfig linux: cat /etc/resolv.conf)

4.LDNS沒有命中--->Root Server根域名伺服器請求解析

5.Root Server根域名返回一個 查詢域名的 主伺服器地址 gTLD Server 地址----->LDNS 伺服器

6.LDNS---請求-->gTLD伺服器傳送請求(gTLD:國際頂級域名伺服器,如.com ,.cn,.org全球只有13臺左右)----NameServer域名伺服器地址--->NameServer(當初申請域名的提供商儲存了當初域名對應的IP)----TTL+IP----->LDNS Server(儲存 URL:IP,時間TTL控制)--->使用者(瀏覽器將TTL,URL:IP 值快取在本地中)--->解析結束


2d11f95f-90cb-3aee-bcfc-ac223e0f5397.jpg

7.清除快取的域名

1.LDNS的快取很難清理
2.所以只能清理本地
  Window:ipconfig/flushdns 命令來重新整理快取
  Linux:sudo /etc/init.d/nscd restart 

3.在java應用中JVM也會快取DNS的解析結果,這個快取實在InetAddress類中完成,而且這個快取時間還比較特殊,有兩種快取策略:
(在配置項在 %JAVA_HOME%\lib\security\java.security)
1.正確的結果快取:  networkaddress.cache.ttl   預設值 -1 永不失效
2.失敗的結果快取:  networkaddress.cache.negative.ttl 預設值10 10秒

3.修改的方式,分別是 
 A:直接修改 java.security 
 B:在java啟動引數中增加-Dsun.net.inetaddr.ttl=xx 來修改預設值
 C:通過InetAddress類來動態修改.(如果我們需要InetAddress來解析域名一定要是單例模式.否則每次都解析,很耗時間)


8.域名記錄的分類  A記錄, MX記錄,  CNAME記錄 NS記錄 TXT記錄
  A:記錄
 A表示的Address用來指定對應的Ip地址.
    例如  item.taobao.com 指定到115.238.23.241
         將switch.taobao.com記錄到 121/14/23/231 
    A記錄可以將多個域名解析到一個Ip地址.不能將一個域名解析到多個IP地址.


MX:記錄表示
,Mail Exchange, 就是將某個域名下的郵件伺服器窒息nag自己的Mail Server
    例如: taobao.com域名的A記錄的IP地址為 115.238.25.245. 
          如果 MX 記錄設定為 112.238.25.246,是 [email protected]的郵件路由,DNS會講郵件傳送到115.238.25.246所在的伺服器.而正常通過web請求的話仍然解析到A記錄IP地址


CNAME記錄
全程是 Canonical Name(別名解析).所謂的別名解析就是可以為一個域名設定一個或者多個別名. 如將 taobao.com 解析到 xulingbo.net 講srcfan.com 接續到xulingbo.net
其中xulingbo.net 分別是taobao.com srcfan,com,前面的跟蹤域名解析為 www.taobao.com 1542 IN CNAME www.bslb.taobao.com 就是CNAME 解析


NS記錄 

 為某個域名指定的DNS伺服器, 也就是域名有指定的IP地址的DNS伺服器解析.
  (可能類似  Name Server 域名提供商 會指定某個域名有某個 DNS伺服器去解析 然後返回IP地址)


TXT記錄

為某個主機名或域名設定說明,,如可以為xulinbo.net設定TXT記錄 為 "君山的部落格|徐令波" 這樣的說明


9 CDN工作機制

CDN:內容分佈網路 ( Content Delivery Network) 它是構築在現有Internet上一種先進的流量分配網路.目的在現有的Interner中增加一層新的網路架構,講網站的內容釋出到最接近使用者網路"邊緣",是使用者 就近獲取所需的內容.提高使用者訪問網站的相應速度. 有別於映象.比映象跟智慧.
CDN=映象(Mirror)+快取(Cache)+整體負載均衡(GSLB).因而.CDN可以明顯提高Internet中資訊流動的效率.
目前 CDN都是快取網站中靜態資料為主,CSS JS 圖片 靜態頁面等資料.
使用者從主站中請求到內容後在從CDN上下載靜態的資料.從而加速網頁的顯示速度.如淘寶有90%以上的資料都是有CDN來提供的.
通常CDN要達到一下幾個目標
1.可擴充套件Scalability.效能可擴充套件性.因對新增的大量資料.使用者,和事物的擴充套件能力,成本可擴充套件性.用低廉的運營成本來提供動態的服務能力和高質量的內容分發.

2.安全性:強調提供物理裝置,網路,軟體,資料和服務過程的安全性.減少 DDos攻擊性和其他惡意行為造成商業網站業務中斷

3.可靠性,響應,執行 (Reliability,Responsiveness Performance).服務可用性.能夠處理可能的故障,和使用者體驗的下降.通過負載均衡即使提供網路的容錯機制.


10.CDN 架構

eee7f12d-af42-3a8f-ad08-79f68844c7f1.jpg

11負載均衡

 負載均衡: Load Balance 就是對工作任務進行平衡,均攤,到多個操作單元上執行,如 圖片伺服器,應用伺服器,共同完成工作任務. 它可以提高伺服器響應的速度和利用效率.解決網路擁堵問題.

分類:
A:鏈路負載均衡:
 就是前面提到的通過DNS解析成不同的IP.然後使用者根據Ip來訪問不同的目標伺服器: 
缺點:如果一種一條webService 掛掉了,由於LDNS有快取,那麼使用者就無法訪問 這個域名.
優點:GDNS (全域性DNS 伺服器)給出的webServer IP後 使用者可以直接訪問目標伺服器.速度快

9d1f09e2-f026-374d-9c6c-c45f98eb49ce.jpg


B:叢集負載均衡:
  分為:
硬體負載均衡 :

使用一臺專門的硬體裝置來轉發請求.
缺點: 價格貴,在超出服務極限時候不能動態擴容.如F5 
優點:效能非常好,穩定.


782d9f62-fb1d-3fa4-9128-2644161f8423.jpg

軟體負載均衡:

使用最普遍的一種方式.直接使用廉價的PC就可以搭建
缺點:一般一次訪問請求要經過多次代理伺服器(使用Ip進行轉發),增加的網路延時
有點:成本非常低


6885a6d3-777a-372c-8f0c-a97dd3b87af5.jpg


C:作業系統負載均衡:

利用作業系統基本的軟中斷和硬體中斷來達到負載均衡,如可以設定多佇列網絡卡來等來實現.
  • a68106fc-7cba-3429-889e-9deb880ad4ac-thumb.jpg
  • 大小: 53.6 KB
  • 8f50f8ee-893e-3c92-b8b2-7958b71cbfff-thumb.jpg
  • 大小: 128.1 KB
  • 55c8494e-f041-3cbc-9da1-d6e74f31c2cd-thumb.jpg
  • 大小: 95.5 KB
  • 2d11f95f-90cb-3aee-bcfc-ac223e0f5397-thumb.jpg
  • 大小: 32.9 KB
  • eee7f12d-af42-3a8f-ad08-79f68844c7f1-thumb.jpg
  • 大小: 75.6 KB
  • 9d1f09e2-f026-374d-9c6c-c45f98eb49ce-thumb.jpg
  • 大小: 21 KB
  • 782d9f62-fb1d-3fa4-9128-2644161f8423-thumb.jpg
  • 大小: 16.6 KB
  • 6885a6d3-777a-372c-8f0c-a97dd3b87af5-thumb.jpg
  • 大小: 34.2 KB