負載均衡淺析

負載均衡淺析
  • 主要淺析負載均衡解決了併發問題,但是導致的session問題
爲什麼會有session問題?

(1)負載均衡解決的問題和引入的問題

  • 負載均衡可以解決併發問題
  • 負載均衡帶來的問題:session問題
  • 爲什麼會存在session問題:
    a.http協議的特性(①無狀態 ②有連接 ③短連接)
    b.由於http協議本身的設計問題加上現在WEB網頁的發展(網頁後端程序動態生成) ==> 需要保持一個會話狀態。

帶來session問題的原因?
(2)session問題的原因詳解:

   一個連接將佔據WEB server一個socket和一個文件描述符fd,在高併發的場景下,服務器端承受不了與客戶端一直保持連接,因此在http短連接的基礎上實現連接複用(keepalived)。

   目前的動態網頁技術時,需要知道上一次請求和這一次請求之間是否屬於同一用戶?是否有關聯性?因此需要知道是否有關聯性?就必須保持狀態。eg:登錄

   session與cookie 見下面(3)


session與cookie?
(3)session與cookie

   cookie:客戶端數據的持久化技術保存在瀏覽器。server端將cookie發給瀏覽器,瀏覽器收到cookie一般會按域保存cookie,然後再發起對某域請求時,將在request請求的header中攜帶沒有過期的cookie發送至WEB server。(注:無論是不是動態WEB server均可以設置cookie,cookie是http數據報文header的一部分)。

   session依賴於cookie,在cookie中設置一個特殊的cookie的值(key-value),eg:sessionID=“hash string(哈希字串)”,但是將sessionID="hash string(哈希字串)"這變成會話級存儲,讓WEB server將sessionID=xxx保存,當瀏覽器關閉,sessionID=xxx才立即銷燬(用於保存當前會話狀態)

  • 瀏覽器支持cookie,瀏覽器中的代碼會對過期的代碼進行清理(sessionID過期)或者會話級的sessionID,關閉瀏覽器,瀏覽器就清理會話級sessionID。因爲sessionID不會存至磁盤,在內存中保存着。當然這是’ 正經的瀏覽器 ',如果假設自己編寫一個瀏覽器,將sessionID保存於磁盤,也是可以的,這說明WEB框架中或者作爲server端,client的一切東西都是不可信的。

   對於動態服務器,一般都會對初次訪問的client發送sessionID,用於保存當前client的會話狀態,目前是動態服務器的標準配置,動態服務器會在內存中開闢出一段空間生成session並保存session。注意:動態服務器端開闢的空間可不僅僅保存sessionID,但是發送給client的僅僅是sessionID。

   瀏覽器訪問web server圖示過程:


session的解決方案?
(4)session問題的解決方案:
  • ①源地址hash或者基於cookie hash,然後將其請求一直綁定至後端某一動態服務器。<存在問題:指標不治本,萬一後端動態服務器故障><不推薦使用這種解決方案>

  • ②session複製:讓後端所有的動態服務器實現session同步。<存在問題:對內網絡和後端服務器內存消耗均是極大> <使用場景:後端服務器較少,數據較少>

  • session共享:②也要經過網絡,反正都要經過網絡傳輸數據,那麼直接使用緩存服務保存session信息,實現後端動態服務器的session同步。<目前一般使用的解決方案>


session共享?
(5)session共享 - 用於解決動態服務器保存session的問題,主要是爲解決一段時間內保持用戶與當前服務器通信的會話狀態。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章