會話保持(Session Affinity),有時(shí)又稱粘滯會話(Sticky Sessions), 是負(fù)載均衡領(lǐng)域設(shè)計(jì)需要著力解決的重要問題之一,也是一個(gè)相對比較復(fù)雜的問題。
成都創(chuàng)新互聯(lián)公司自成立以來,一直致力于為企業(yè)提供從網(wǎng)站策劃、網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、網(wǎng)站建設(shè)、電子商務(wù)、網(wǎng)站推廣、網(wǎng)站優(yōu)化到為企業(yè)提供個(gè)性化軟件開發(fā)等基于互聯(lián)網(wǎng)的全面整合營銷服務(wù)。公司擁有豐富的網(wǎng)站建設(shè)和互聯(lián)網(wǎng)應(yīng)用系統(tǒng)開發(fā)管理經(jīng)驗(yàn)、成熟的應(yīng)用系統(tǒng)解決方案、優(yōu)秀的網(wǎng)站開發(fā)工程師團(tuán)隊(duì)及專業(yè)的網(wǎng)站設(shè)計(jì)師團(tuán)隊(duì)。
會話保持是指在負(fù)載均衡器上的一種機(jī)制,在完成負(fù)載均衡任務(wù)的同時(shí),還負(fù)責(zé)一系列相關(guān)連的訪問請求會分配到一臺服務(wù)器上?
當(dāng)用戶向服務(wù)器發(fā)起請求,服務(wù)器創(chuàng)建一個(gè)session,并把session id以cookie的形式寫回給客戶。
看一個(gè)例子:當(dāng)我訪問SAP UI5應(yīng)用時(shí),
在http請求的頭部觀察到客戶端要求服務(wù)器返回以cookie的形式返回session id的請求字段:
在服務(wù)器響應(yīng)的頭部字段果然返回了session id:
這些cookie信息能夠在Chrome開發(fā)者工具的Application標(biāo)簽頁里的Cookies區(qū)域查看:
如此一來,只要客戶的瀏覽器不關(guān),再去訪問服務(wù)器時(shí),訪問請求會自動(dòng)附上session id去,服務(wù)器端檢測到這個(gè)session id后,就會使用內(nèi)存中維持的與這個(gè)id對應(yīng)的session為客戶端服務(wù)。
再回到我們討論的會話保持這個(gè)話題。什么時(shí)候需要會話保持?舉個(gè)大家每天都會遇到的例子,大家在淘寶或者京東上購物時(shí),從完成用戶身份認(rèn)證到瀏覽店鋪,選擇心儀商品加入購物車,一直到最后下單完成支付,需要經(jīng)過很多次和服務(wù)器的交互過程才能完成整個(gè)交易。由于這幾次交互過程從順序上和邏輯上是密切相關(guān)的,服務(wù)器在進(jìn)行這些交互過程的某一個(gè)交互步驟時(shí)需要一個(gè)上下文(Context),即上一次交互過程的輸出,因此要求這些相關(guān)的交互過程都由一臺服務(wù)器完成。
在這種情況下,假設(shè)負(fù)載均衡器仍然把這些相關(guān)交互session分散到不同的服務(wù)器實(shí)例上,就會帶來很糟糕的用戶體驗(yàn),比如客戶在瀏覽器上每點(diǎn)擊一次,都會彈出登錄頁面。或者即使用戶輸入了正確的驗(yàn)證碼,卻仍然提示驗(yàn)證碼錯(cuò)誤。由于服務(wù)器處理實(shí)例不一樣,也有可能造成客戶放入購物車的物品丟失。
這就是會話保持機(jī)制引入的原因:確保把來自同一客戶的一個(gè)完整會話的請求轉(zhuǎn)發(fā)至后臺同一臺服務(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字段,長度如下:
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ā)起請求,必須同時(shí)提供JSESSIONID和VCAP_ID。JSESSION_ID交給應(yīng)用,用于實(shí)現(xiàn)session粘連。而VCAP_ID用于標(biāo)識服務(wù)的應(yīng)用實(shí)例,如果應(yīng)用掛了,gorouter會把請求路由到另一個(gè)應(yīng)用實(shí)例上。
要獲取更多Jerry的原創(chuàng)文章,請關(guān)注公眾號"汪子熙":
當(dāng)前文章:CloudFoundrySessionAffinity(StickySession)的實(shí)現(xiàn)
網(wǎng)站URL:http://jinyejixie.com/article40/ijgpeo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站、網(wǎng)站內(nèi)鏈、用戶體驗(yàn)、外貿(mào)建站、網(wǎng)站設(shè)計(jì)公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)