天天看點

應用伺服器叢集的session管理

1、什麼是session

  a、web應用中将這些多次請求修改使用的上下文對象稱作會話(session)

  b、Session 對象存儲特定使用者會話所需的資訊。這樣,當使用者在應用程式的 Web 頁之間跳轉時,存儲在 Session 對象中的變量将不會丢失,而是在整個使用者會話中一直存在下去。

  c、當使用者請求來自應用程式的 Web 頁時,如果該使用者還沒有會話,則 Web 伺服器将自動建立一個 Session 對象。當會話過期或被放棄後,伺服器将終止該會話

2、session的應用場景

  在高可用的架構中,業務總是有狀态的,比如電商交易類平台中,需要有購物車記錄使用者的購買資訊;在社交類的網站中,需要記錄使用者的目前登陸狀态、最新釋出的消息及好友狀态等,使用者每次重新整理頁面都需要更新這些資訊

3、session管理的幾種手段

a)session複制

  應用伺服器開啟web容器的session複制功能,在叢集中幾台伺服器之間同步session對象,使得每台伺服器上都儲存所有使用者的session資訊

  較大規模的情況下(session複制就會顯得不足了)

<a href="https://s1.51cto.com/wyfs02/M00/97/5E/wKiom1kuG5CzUnpGAABJUcA4Gc8169.jpg" target="_blank"></a>

b)session綁定

  ession綁定可以利用負載均衡的源位址Hash算法實作,負載均衡伺服器總是将來源于同一個IP的請求分發到同一台伺服器上,顯然session綁定不符合我們對系統高可用的要求,因為一旦伺服器當機,那麼該機器上的session就不複存在了

  優點:實作簡單、配置友善、沒有額外網絡開銷

  缺點:網絡中有機器Down掉時、使用者Session會丢失、容易造成單點故障

<a href="https://s4.51cto.com/wyfs02/M01/97/5E/wKiom1kuG9ux6bWAAABMWrCJqbs722.jpg" target="_blank"></a>

c)利用cookie記錄session

  說明:網站沒有用戶端,可以利用浏覽器支援的cookie記錄session(事實上,許多網站或多或少地使用cookie記錄session)

  不足:

  受cookie大小限制,能記錄的資訊有限

  每次響應請求都要傳輸Cookie,影響性能

  如果使用者關閉cookie,通路就會不正常

<a href="https://s4.51cto.com/wyfs02/M01/97/5F/wKiom1kuHDXzTHLmAABLwqUlt7s388.jpg" target="_blank"></a>

d)session伺服器

 利用獨立部署的伺服器(叢集)統一管理session

 應用伺服器的狀态分離,分為無狀态的應用伺服器和有狀态的session伺服器

 對于有狀态的session伺服器:分布式緩存+資料庫等

 業務場景要求高的情況下,利用session服務內建單點登入(SSO)、使用者服務等功能,或者開發專門的session服務管理平台

<a href="https://s3.51cto.com/wyfs02/M02/97/60/wKioL1kuHIeADS4WAABUyzXM01M697.jpg" target="_blank"></a>

本文轉自 冰凍vs西瓜 51CTO部落格,原文連結:http://blog.51cto.com/molewan/1930803,如需轉載請自行聯系原作者