架構師之路,SessionSvr是怎麼一回事?

不知道你發現了沒有,作為一個程序員,很多人越來越像一顆螺絲釘,每天干著CRUD的工作,對於最簡單的HTTP是無狀態的,從一個頁面到另外一個頁面,如何知道是同一個用戶的請求都一知半解,今天我們就簡單來講一講這個問題吧。

架構師之路,SessionSvr是怎麼一回事?

我們都知道Http是無狀態的,你在今日頭條登陸後,跳轉到新聞的首頁,發現首頁就已經記錄了你的登陸信息,這就是Session的一個重要作用,它可以記錄你的一些重要信息,如登錄狀態等。那麼Session是如何工作的呢?就是在用戶登錄的時候,我們給他派發一個票據的Key,後面用戶每次登錄的時候,我們都會用這個SessionKey去查詢背後對應的用戶信息,這樣子,我們就能夠在各個頁面都知道是哪一個用戶了。可能有同學會問,為什麼不用用戶id傳過來呢?主要有2點考慮,1是為了安全,我們一般不對外暴露用戶的用戶id,另外一點也是為了安全,有一天我們發現某個用戶登錄異常,我們可以刪掉Session就能把他踢下線。那麼這個Session又是如何工作的呢?

架構師之路,SessionSvr是怎麼一回事?

當我們只有一臺WebServer的時候,我們可以把所有用戶的Session都存在當前的機器,這樣子,因為用戶每次只會路由到這臺機器,所以每次都能取到對應的Session,然後再到下面的業務機器。很明顯,這種單機模式實在是太不靠譜了。如果Webserver掛掉了,那麼整個業務就玩完,一個優秀的架構師絕對不能允許單點的存在。


架構師之路,SessionSvr是怎麼一回事?


為了改進上述的單點情況,我們可以使用多臺WebServer,使用多臺WebServer的優點是顯而意見的,就是避免了單點的故障。假設我們每臺機器都只存跟自己相關的Session,會有什麼問題呢?有可能某一個用戶第一次路由到A機,第二次又路由到B機,那麼他一會有登陸態一會又沒登陸態,即便我們可以在上層根據用戶的ip進行路由,不會出現上述問題,但是一旦某臺機器死機或者重啟,該機器上面的用戶仍然會面臨失去登陸態,重新登錄的情況,依舊沒有解決單點問題。為此,我們可以多臺機器同步這個同步這個Session的狀態。


架構師之路,SessionSvr是怎麼一回事?


要知道,在多臺數據同步一個數據保持一致性是很難的。並且,緩存自己不常用的數據本身也是很大的浪費。所以我們為什麼不讓專業人幹專業事,引入一個存儲,引入一個SessionSvr,專門來幹這個事情呢?我們引入一個SessionSvr,用來專門緩存Session的信息,SessionSvr的主要構成就是緩存,至於持久化,那交給DB去做。剩下的事情,就變成了如何保證數據一致性的問題了,這是常見的分佈式數據一致性問題,後面我們會繼續討論,有興趣可以關注哦。


架構師之路,SessionSvr是怎麼一回事?


好了,今天的內容就到這裡了,我們瞭解了現代分佈式的一個Sessionsvr的構成,這也是現在最流行最通用的一個模型,如果你有什麼疑問?可以提出來,大家一起學習,一起進步。


分享到:


相關文章: