集群環(huán)境下的Session處理

在單臺服務器情況下session處理比較簡單镐确,一旦到了集群環(huán)境中包吝,我們就必須考慮用戶和會話的問題,如果不加處理的話源葫,一旦后端IP輪詢切換诗越,會話cookies找不到session,會話就中斷了息堂。在此情景下嚷狞,通常有以下5種解決方案。

1. 依然使用集群荣堰,但集群的輪詢策略改成hash ip

將每一個用戶和后端服務器綁定床未,這樣用戶的會話就會一直落在同一臺服務器上,這是成本最小的解決方案振坚,只需要修改Nginx服務器的配置即可薇搁。如果是在比較老的架構(gòu)上,推薦這種改造方案渡八。

upstream backend {
        ip_hash;
        server bk1.abc.com;
        server bk2.abc.com;
        server bk3.abc.com;
}

這種解決解決方案也存在局限性啃洋,比如某臺服務器掛了切換到另一臺服務器传货,對應的會話也就丟了。還有另外一個問題宏娄,如果前端用了CDN的話问裕,客戶端IP變化的頻率可能是很高的,有可能一個小時或更短時間內(nèi)就變一次孵坚,這在校園網(wǎng)的網(wǎng)絡環(huán)境下很容易產(chǎn)生這種情況僻澎。

2. 使用Session復制方案

顧名思義,Session復制就是讓集群里的每臺服務器都存儲整個集群所有服務器上的全部session十饥。這樣一旦某臺服務器掛了,用戶切換到其他服務器上也能訪問到一樣的session數(shù)據(jù)祖乳。這種解決方案不好的地方在于進行session復制需要額外的網(wǎng)絡開銷和系統(tǒng)資源逗堵,當服務器較多或session中存儲的數(shù)據(jù)量大的時候,這個問題尤為明顯眷昆。

Session復制本身的操作是比較復雜蜒秤,但是對于服務器來說,配置比較簡單亚斋,但性能是個很大的問題作媚。當集群中服務器數(shù)量大于兩臺時就比較吃力了,總之這是一種比較早期時候的解決方案帅刊。

3. Nginx的sticky方案

sticky方案和方案1類似纸泡,但是sticky能把會話死死地粘滯在其中一臺服務器上,算是對方案1的補充赖瞒,可以避免在CDN網(wǎng)絡波動下的IP沖突造成的會話丟失女揭。但是依然無法解決服務器掛掉導致會話丟失的問題。

4. NoSQL的幾種存儲方案

基于Redis等NoSQL的session集中存儲方案栏饮,是目前最流行的解決方案吧兔,早期用MySQL來存儲。引入Redis的方案除了會增加系統(tǒng)復雜度外袍嬉,依然還有以下幾個問題:

    1. Redis有單點境蔼,要解決單點問題就得使用redis的集群方案,比如Codies
    1. 用戶量大的情況下伺通,用來連接redis的類庫可能存在瓶頸箍土,比如性能不穩(wěn)定、高并發(fā)容易掛的問題等等罐监。

5. 放棄Session使用Cookie

使用純cookie涮帘,不使用session,天然分布式笑诅。存在問題:

    1. Cookies需要加解密调缨,性能消耗需要考慮疮鲫。而且儲存空間有限,如果存放了復雜的數(shù)據(jù)弦叶,序列化本身也是一個消耗俊犯。
    1. 對于瀏覽器而言,每次請求都會帶上Cookies伤哺,包括js/css等靜態(tài)資源燕侠,浪費帶寬,可以考慮為靜態(tài)資源單獨部署一個子域名立莉。

需要注意的是绢彤,如果應用需要做“禁止同時登錄”的需求時,用Cookie的話解決起來會麻煩很多蜓耻。

另外可以把cookie換成token等方式驗證用戶茫舶,每次請求帶上token作為會話憑據(jù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末刹淌,一起剝皮案震驚了整個濱河市饶氏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌有勾,老刑警劉巖疹启,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蔼卡,居然都是意外死亡喊崖,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門雇逞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來贷祈,“玉大人,你說我怎么就攤上這事喝峦∈铺埽” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵谣蠢,是天一觀的道長粟耻。 經(jīng)常有香客問我,道長眉踱,這世上最難降的妖魔是什么挤忙? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮谈喳,結(jié)果婚禮上册烈,老公的妹妹穿的比我還像新娘。我一直安慰自己婿禽,他們只是感情好赏僧,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布大猛。 她就那樣靜靜地躺著,像睡著了一般淀零。 火紅的嫁衣襯著肌膚如雪挽绩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天驾中,我揣著相機與錄音唉堪,去河邊找鬼。 笑死肩民,一個胖子當著我的面吹牛唠亚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播持痰,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼灶搜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了共啃?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤暂题,失蹤者是張志新(化名)和其女友劉穎移剪,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體薪者,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡纵苛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了言津。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片攻人。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖悬槽,靈堂內(nèi)的尸體忽然破棺而出怀吻,到底是詐尸還是另有隱情,我是刑警寧澤初婆,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布蓬坡,位于F島的核電站,受9級特大地震影響磅叛,放射性物質(zhì)發(fā)生泄漏屑咳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一弊琴、第九天 我趴在偏房一處隱蔽的房頂上張望兆龙。 院中可真熱鬧,春花似錦敲董、人聲如沸紫皇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽坝橡。三九已至泻帮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間计寇,已是汗流浹背锣杂。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留番宁,地道東北人元莫。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像蝶押,于是被迫代替她去往敵國和親踱蠢。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容