面試官:分布式架構(gòu)下酗电,Session 共享有什么方案?
不要有session:但是確實(shí)在某些場(chǎng)景下内列,是可以沒有session的顾瞻,其實(shí)在很多接口類系統(tǒng)當(dāng)中,都提倡【API無狀態(tài)服務(wù)】德绿;也就是每一次的接口訪問荷荤,都不依賴于session、不依賴于前一次的接口訪問移稳;
存入cookie中:將session存儲(chǔ)到cookie中蕴纳,但是缺點(diǎn)也很明顯,例如每次請(qǐng)求都得帶著session个粱,數(shù)據(jù)存儲(chǔ)在客戶端本地古毛,是有風(fēng)險(xiǎn)的;
session同步:對(duì)個(gè)服務(wù)器之間同步session都许,這樣可以保證每個(gè)服務(wù)器上都有全部的session信息稻薇,不過當(dāng)服務(wù)器數(shù)量比較多的時(shí)候,同步是會(huì)有延遲甚至同步失斀赫鳌塞椎;
使用Nginx(或其他復(fù)雜均衡軟硬件)中的ip綁定策略,同一個(gè)ip只能在指定的同一個(gè)機(jī)器訪問睛低,但是這樣做風(fēng)險(xiǎn)也比較大案狠,而且也是去了負(fù)載均衡的意義服傍;
我們現(xiàn)在的系統(tǒng)會(huì)把session放到Redis中存儲(chǔ),雖然架構(gòu)上變得復(fù)雜骂铁,并且需要多訪問一次Redis吹零,但是這種方案帶來的好處也是很大的:實(shí)現(xiàn)session共享,可以水平擴(kuò)展(增加Redis服務(wù)器)拉庵,服務(wù)器重啟session不丟失(不過也要注意session在Redis中的刷新/失效機(jī)制)灿椅,不僅可以跨服務(wù)器session共享,甚至可以跨平臺(tái)(例如網(wǎng)頁端和APP端)钞支。
推薦學(xué)習(xí)【5分鐘背八股】68:雙寫一致性問題如何解決伸辟?