【成爲架構師2-5】維護session一致性的四種方案

系列文章是博主對沈劍的《架構師訓練營》分享內容的個人筆記總結,原內容公衆號“成爲架構師”。

文中所指的session是廣義的session,其含義是用戶的會話狀態,web-server如tomcat會產生用於存儲用戶數據的session,以及現在常用的token機制如jwt,都屬於這一範疇

1 session同步

多臺web-server之間同步session
在這裏插入圖片描述
這種機子同步信息的模型在架構實踐中其實非常的多,但是session一致性的維護有更好的方式,而且這種同步信息的模型隨着數量的水平擴展消耗是指數級增加的,基本不會考慮這種方式

2 客戶端存儲

最傳統的方式就是cookie + session的模式,保存在客戶端的cookie充當了標識用戶的作用,通過cookie取得在服務端保存的session,所以這一模型的核心其實是cookie

客戶端存儲的含義就是將保存在服務端的用戶信息轉而由客戶端存儲,服務端不保存任何的信息
在這裏插入圖片描述
JWT
JWT常會宣傳的一個優勢就是可以節省服務端的存儲資源,它可以完全由客戶端單獨保存,這一實現的前提就是它是能夠自描述

JWT在創建時就所有需要信息用一個key加密起來,之後返回給客戶端,之後客戶端每次請求都帶上JWT,服務端用之前加密的key解密,其完全依靠JWT來判斷用戶身份,而不需要再做任何查詢

安全性
就安全性來說如果不做其他處理,其和cookie + session模式是完全一樣的,二者的核心都還是在客戶端

3 反向代理

之前的文章中已經提到過了七層抓手和四層抓手,通過nginx按照規則轉發請求,那麼只有相同的輸入量就可以得到相同的輸出結果

通常使用四層抓手,即ip來作爲轉發規則,因爲七層屬於業務的範疇,從解耦的角度講,nginx不應該關心業務層的內容

session依舊獨立保存在每個web-server中
在這裏插入圖片描述
當某一個web-server重啓的話這部分session將丟失,會造成用戶的重新登錄,不過這不是十分重要,不是主要矛盾

4 後端統一存儲

將session保存在後端統一的機子上,是數據庫或者redis等緩存中,使用redis更多,因爲session是一個經常要訪問的內容
在這裏插入圖片描述
這一模型應該是實踐中使用最多的:

  1. 它解耦了web-server的狀態性,這下web-server是無狀態的了,增加或者拿掉都不影響
  2. session統一管理之後可以爲其它上游提供服務

不過這一方式對獲取session增加了一次網絡調用,web-server可以在本地再對session進行一次緩存

通常 3 與 4 的使用是較爲多的,3和4也可以結合起來使用


下一篇將介紹CDN,以及CDN的就近訪問實現和維護源和鏡像數據一致性的策略

上一篇回顧:【成爲架構師2-4】反向代理與DNS輪詢:接入層的架構演進
下一篇更精彩:【成爲架構師2-6】CDN:就近訪問,緩解網絡擁塞

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章