分布式系統(tǒng)的緩存與session

具體的問題

當(dāng)一個帶有會話表示的Http請求到Web服務(wù)器后,需求在請求中的處理過程中找到session數(shù)據(jù)弛针。而問題就在于叠骑,session是保存在單機(jī)上的。 假設(shè)我們有應(yīng)用A和應(yīng)用B削茁,現(xiàn)在一位用戶第一次訪問網(wǎng)站宙枷,session數(shù)據(jù)保存在應(yīng)用A中。如果我們不做處理茧跋,怎么保障接下來的請求每次都請求到應(yīng)用A呢? 如請求到了應(yīng)用B中慰丛,就會發(fā)現(xiàn)沒有這位用戶的session數(shù)據(jù),這絕對是不能容忍的瘾杭。

常見解決方案

Session Sticky

保證同一個會話的請求都在同一個web服務(wù)器上處理诅病,負(fù)載均衡器根據(jù)每次請求的會話表示進(jìn)行轉(zhuǎn)發(fā)。


1.png

問題:如果某一臺服務(wù)器宕機(jī)或重啟粥烁,那么這臺服務(wù)器上的session數(shù)據(jù)就丟失了贤笆。如果session數(shù)據(jù)中還有登錄狀態(tài)信息,那么用戶需要重新登錄页徐。負(fù)載均衡要處理具體的session到服務(wù)器的映射苏潜。

Session Replication

web服務(wù)器之間增加會話數(shù)據(jù)的同步,通過同步保證不同web服務(wù)器之間的Session數(shù)據(jù)是一致的变勇。

2.png

好處:解決了Session Sticky對負(fù)載均衡的映射要求恤左。
問題:同步Session數(shù)據(jù)造成了網(wǎng)絡(luò)帶寬的開銷,增加每臺機(jī)器的內(nèi)存占用搀绣,不適合集群機(jī)器很多的場景飞袋。

Session數(shù)據(jù)集中存儲

3.png

好處:解決了Session Replication方案中內(nèi)存的問題,對于網(wǎng)絡(luò)帶寬也比它要好
問題:讀寫Session數(shù)據(jù)引入網(wǎng)絡(luò)操作链患,存在延時和不穩(wěn)定性巧鸭,發(fā)生在內(nèi)網(wǎng)的話影響不大;如果集中存儲的Session機(jī)器或集群出問題則影響我們的應(yīng)用

Cookie Based

把Session數(shù)據(jù)放在Cookie中麻捻,然后在Web服務(wù)器上從Cookie中生成對應(yīng)的Session數(shù)據(jù)

4.png

好處:不會依賴外部的存儲系統(tǒng)纲仍,不存在從外部系統(tǒng)讀寫Session數(shù)據(jù)的網(wǎng)絡(luò)時延呀袱、不穩(wěn)定問題。
問題:Cookie長度限制了Session數(shù)據(jù)長度郑叠;存在安全性問題夜赵;增加數(shù)據(jù)中心的整體外部帶寬消耗;性能影響乡革。

這4種方案都是可用的方案寇僧,不過這4種方案都各有優(yōu)劣,需要根據(jù)具體的實(shí)際場景做出合適的選擇

我們的方案

域名

統(tǒng)一級域名沸版,*.aa.com嘁傀,確保cookie數(shù)據(jù)從瀏覽器傳遞給集群服務(wù)器

會話

  • 格式:鍵值對
    Key:cookie值
    Value:User對象序列化(包括用戶信息、權(quán)限视粮、店鋪细办、企業(yè)信息等)
  • 全局會話
    應(yīng)用服務(wù)器遠(yuǎn)程訪問,創(chuàng)建時設(shè)置過期時間t1(分鐘)馒铃,每次訪問修改過期時間
  • 本地會話
    應(yīng)用服務(wù)器本地訪問蟹腾,創(chuàng)建時設(shè)置過期時間t2,每次訪問不修改這個過期時間区宇,且t2<t1娃殖,盡量使t2隔一段時間就過期,過期后去訪問遠(yuǎn)程緩存议谷,重新修改時間t1.

運(yùn)行原理

  1. 用戶登錄炉爆,保存會話數(shù)據(jù)至遠(yuǎn)程緩存服務(wù)器,并設(shè)置會話過期時間卧晓,當(dāng)前系統(tǒng)時間+T1芬首;
  2. 用戶第一次訪問應(yīng)用服務(wù)器,應(yīng)用服務(wù)器上無會話數(shù)據(jù)逼裆,須從遠(yuǎn)程緩存服務(wù)器獲取會話數(shù)據(jù)郁稍,同時保持會話至本地,并設(shè)置本地會話過期時間胜宇,當(dāng)前時間+T2耀怜,并重新設(shè)置遠(yuǎn)程緩存會話過期時間,當(dāng)前系統(tǒng)時間+T1桐愉;
  3. 用戶第二次訪問應(yīng)用服務(wù)器财破,應(yīng)用服務(wù)器本地存在會話數(shù)據(jù),直接從本地獲取會話數(shù)據(jù)从诲;
  4. 應(yīng)用服務(wù)器上本地緩存的會話數(shù)據(jù)過期自動后失效
  5. 遠(yuǎn)程緩存服務(wù)上的會話數(shù)據(jù)過期后自動失效

會話更新

  • 如果在應(yīng)用服務(wù)A中進(jìn)行會話(key=”xxx”)更新左痢,如權(quán)限范圍變大。
  • 更新遠(yuǎn)程緩存中會話數(shù)據(jù),服務(wù)器可以生成新的cookie值作為key俊性。
  • 從遠(yuǎn)程緩存獲取此會話的原值略步,從值中獲取保存過此會話緩存的其他應(yīng)用服務(wù)器列表,服務(wù)器A以遠(yuǎn)程調(diào)用方式通知其他服務(wù)器刪除本地會話(key=”xxx”)的緩存定页,以便下次從遠(yuǎn)程緩存重新加載一次最新會話數(shù)據(jù)纳像。

問題

  • 本地會話與遠(yuǎn)程會話可能不能完全同步,比如遠(yuǎn)程緩存故障丟失拯勉,本地還有此緩存數(shù)據(jù)。
  • 用戶在線列表憔购,按用戶查找會話困難宫峦,緩存服務(wù)器需要進(jìn)行全遍歷全部key.雖然有的緩存服務(wù)器如redis支持key的模糊查詢,但是還是會影響性能急劇下降玫鸟,CPU負(fù)載過高导绷,官方不推薦使用。
  • 如果要實(shí)現(xiàn)方便檢索的會話屎飘,如按店鋪妥曲、企業(yè)、用戶钦购、主機(jī)來檢索會話檐盟,只得用關(guān)系數(shù)據(jù)庫或NoSQL數(shù)據(jù)庫來實(shí)現(xiàn)。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末押桃,一起剝皮案震驚了整個濱河市葵萎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌唱凯,老刑警劉巖羡忘,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異磕昼,居然都是意外死亡卷雕,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進(jìn)店門票从,熙熙樓的掌柜王于貴愁眉苦臉地迎上來漫雕,“玉大人,你說我怎么就攤上這事纫骑⌒牵” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵先馆,是天一觀的道長发框。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么梅惯? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任宪拥,我火速辦了婚禮,結(jié)果婚禮上铣减,老公的妹妹穿的比我還像新娘她君。我一直安慰自己,他們只是感情好葫哗,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布缔刹。 她就那樣靜靜地躺著,像睡著了一般劣针。 火紅的嫁衣襯著肌膚如雪校镐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天捺典,我揣著相機(jī)與錄音鸟廓,去河邊找鬼。 笑死襟己,一個胖子當(dāng)著我的面吹牛引谜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播擎浴,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼员咽,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了退客?” 一聲冷哼從身側(cè)響起骏融,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎萌狂,沒想到半個月后档玻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡茫藏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年误趴,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片务傲。...
    茶點(diǎn)故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡凉当,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出售葡,到底是詐尸還是另有隱情看杭,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布挟伙,位于F島的核電站楼雹,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜贮缅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一榨咐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧谴供,春花似錦块茁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至崎场,卻和暖如春昌跌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背照雁。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留答恶,地道東北人饺蚊。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像悬嗓,于是被迫代替她去往敵國和親污呼。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評論 2 355

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

  • 目錄Cookie機(jī)制什么是CookieCookie的不可跨域名性Unicode編碼:保存中文BASE64編碼:保存...
    Tomatoro閱讀 16,946評論 7 186
  • 前端開發(fā)者丨h(huán)ttp請求 https:www.rokub.com 前言見解有限包竹, 如有描述不當(dāng)之處燕酷, 請幫忙指出,...
    麋鹿_720a閱讀 10,920評論 11 31
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理周瞎,服務(wù)發(fā)現(xiàn)苗缩,斷路器,智...
    卡卡羅2017閱讀 134,659評論 18 139
  • 朔風(fēng)初起送清寒声诸,曾經(jīng)繁華又寂然酱讶。萬木枯落盡霜染,向晚殘照戀暮山彼乌。 樽酒淡泻肯,意闌珊,如鉤弦月冷穹天慰照。夜深幽夢應(yīng)...
    柏蓮華閱讀 957評論 0 3
  • 今天灶挟,我又和孩子在一起做了好多事情,上午陪著她上美術(shù)課毒租,下午補(bǔ)了一節(jié)英語課稚铣,游戲活動打羽毛球、跳繩,晚間飯后...
    尚巾林閱讀 131評論 0 0