AssetBundle使用,卸載,校驗(yàn)
728
2025-04-01
會(huì)話保持(Session Affinity),有時(shí)又稱粘滯會(huì)話(Sticky Sessions), 是負(fù)載均衡領(lǐng)域設(shè)計(jì)需要著力解決的重要問題之一,也是一個(gè)相對(duì)比較復(fù)雜的問題。
會(huì)話保持是指在負(fù)載均衡器上的一種機(jī)制,在完成負(fù)載均衡任務(wù)的同時(shí),還負(fù)責(zé)一系列相關(guān)連的訪問請(qǐng)求會(huì)分配到一臺(tái)服務(wù)器上?
當(dāng)用戶向服務(wù)器發(fā)起請(qǐng)求,服務(wù)器創(chuàng)建一個(gè)session,并把session id以cookie的形式寫回給客戶。
看一個(gè)例子:當(dāng)我訪問SAP UI5應(yīng)用時(shí),
在http請(qǐng)求的頭部觀察到客戶端要求服務(wù)器返回以cookie的形式返回session id的請(qǐng)求字段:
在服務(wù)器響應(yīng)的頭部字段果然返回了session id:
這些cookie信息能夠在Chrome開發(fā)者工具的Application標(biāo)簽頁里的Cookies區(qū)域查看:
如此一來,只要客戶的瀏覽器不關(guān),再去訪問服務(wù)器時(shí),訪問請(qǐng)求會(huì)自動(dòng)附上session id去,服務(wù)器端檢測(cè)到這個(gè)session id后,就會(huì)使用內(nèi)存中維持的與這個(gè)id對(duì)應(yīng)的session為客戶端服務(wù)。
再回到我們討論的會(huì)話保持這個(gè)話題。什么時(shí)候需要會(huì)話保持?舉個(gè)大家每天都會(huì)遇到的例子,大家在淘寶或者京東上購物時(shí),從完成用戶身份認(rèn)證到瀏覽店鋪,選擇心儀商品加入購物車,一直到最后下單完成支付,需要經(jīng)過很多次和服務(wù)器的交互過程才能完成整個(gè)交易。由于這幾次交互過程從順序上和邏輯上是密切相關(guān)的,服務(wù)器在進(jìn)行這些交互過程的某一個(gè)交互步驟時(shí)需要一個(gè)上下文(Context),即上一次交互過程的輸出,因此要求這些相關(guān)的交互過程都由一臺(tái)服務(wù)器完成。
在這種情況下,假設(shè)負(fù)載均衡器仍然把這些相關(guān)交互session分散到不同的服務(wù)器實(shí)例上,就會(huì)帶來很糟糕的用戶體驗(yàn),比如客戶在瀏覽器上每點(diǎn)擊一次,都會(huì)彈出登錄頁面。或者即使用戶輸入了正確的驗(yàn)證碼,卻仍然提示驗(yàn)證碼錯(cuò)誤。由于服務(wù)器處理實(shí)例不一樣,也有可能造成客戶放入購物車的物品丟失。
這就是會(huì)話保持機(jī)制引入的原因:確保把來自同一客戶的一個(gè)完整會(huì)話的請(qǐng)求轉(zhuǎn)發(fā)至后臺(tái)同一臺(tái)服務(wù)器進(jìn)行處理。
那么Cloud Foundry的Session Affinity是怎么實(shí)現(xiàn)的呢?
官方文檔有介紹:
https://docs.cloudfoundry.org/concepts/http-routing.html#sessions
(1) To support sticky sessions, configure your app to return a JSESSIONID cookie in responses. The app generates a JSESSIONID as a long hash in the following format:
您的應(yīng)用在響應(yīng)結(jié)果里需要加上一個(gè)JSESSIONID字段,長(zhǎng)度如下:
1A530637289A03B07199A44E8D531427
(2) If an app returns a JSESSIONID cookie to a client request, the CF routing tier generates a unique VCAP_ID for the app instance based on its GUID in the following format:
CF routing tier基于app生成的JSESSIONID生成一個(gè)VCAP_ID: 323f211e-fea3-4161-9bd1-615392327913
(3) 接下來客戶每次發(fā)起請(qǐng)求,必須同時(shí)提供JSESSIONID和VCAP_ID。JSESSION_ID交給應(yīng)用,用于實(shí)現(xiàn)session粘連。而VCAP_ID用于標(biāo)識(shí)服務(wù)的應(yīng)用實(shí)例,如果應(yīng)用掛了,gorouter會(huì)把請(qǐng)求路由到另一個(gè)應(yīng)用實(shí)例上。
Java 網(wǎng)絡(luò)
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。