本節(jié)大綱
何為會話保持
何時需要會話保持
會會話保持的分類
何為會話保持
會話保持是負載均衡最常見的問題之一,也是一個相對比較復(fù)雜的問題。會話保持有時候又叫做粘滯會話(Sticky Sessions)。會話保持是指在負載均衡器上的一種機制,可以識別客戶端與服務(wù)器之間交互過程的關(guān)連性,在作負載均衡的同時還保證一系列相關(guān)連的訪問請求會保持分配到一臺服務(wù)器上
何時需要會話保持
在討論這個問題前,我們必須先花點時間弄清楚一些概念:什么是連接(Connection)、什么是會話(Session),以及這二者之間的區(qū)別。需要特別強調(diào)的是,如果我們僅僅是談?wù)撠撦d均衡,會話和連接往往具有相同的含義。
從簡單的角度來看,如果用戶需要登錄,那么就可以簡單的理解為會話;如果不需要登錄,那么就是連接。
對于同一個連接中的數(shù)據(jù)包,負載均衡會將其進行NAT轉(zhuǎn)換后,轉(zhuǎn)發(fā)至后端固定的服務(wù)器進行處理。負載均衡系統(tǒng)內(nèi)部會專門有一張表來記錄這些連接的狀況,包括:[源IP:端口]、[目的IP:端口]、[服務(wù)器IP:端口]、空閑超時時間(Idle Timeout)等等。由于負載均衡內(nèi)部記錄連接狀態(tài)的這張表需要消耗系統(tǒng)的內(nèi)存資源,因此這張表不可能無限大,所有傳統(tǒng)廠商都會有一定的限制。這張表的大小一般稱之為大并發(fā)連接數(shù),也就是系統(tǒng)同時能夠容納的連接數(shù)量。負載均衡的當(dāng)前連接狀態(tài)表項中,設(shè)計了一個空閑超時時間(Idle Timeout)的參數(shù)。當(dāng)該連接在Idle Timeout內(nèi)無流量通過時,負載均衡會自動刪除該連接條目,釋放系統(tǒng)資源。
刪除連接后,客戶端的請求將無法保證繼續(xù)發(fā)往同一個后端服務(wù)器,需要遵循負載均衡器的流量分發(fā)策略。
在某些要求登錄狀態(tài)的情境下,要求客戶端和服務(wù)器之間保持一個會話(session)以記錄客戶端的各種信息。比如在大多數(shù)電子商務(wù)的應(yīng)用系統(tǒng)或者需要進行用戶身份認證的在線系統(tǒng)中,一個客戶與服務(wù)器經(jīng)常經(jīng)過好幾次的交互過程才能完成一筆交易或者是一個請求的完成。由于這幾次交互過程是密切相關(guān)的,服務(wù)器在進行這些交互過程的某一個交互步驟時往往需要了解上一次或上幾次的交互過程處理結(jié)果,這就要求所有這些相關(guān)的交互過程都由一臺服務(wù)器完成,而不能被負載均衡器分散到不同的服務(wù)器上否則可能出現(xiàn)異常情景:
客戶端輸入了正確的用戶名和口令,但卻反復(fù)跳到登錄頁面;
用戶輸入了正確的驗證碼,但是總提示驗證碼錯誤;
客戶端放入購物車的物品丟失
…
因此會話保持機制的意義就在于,確保在合適的情境下,將來自相同客戶端的請求轉(zhuǎn)發(fā)至后端相同的服務(wù)器進行處理。換句話說,就是將客戶端與服務(wù)器之間建立的多個連接,都發(fā)送到相同的服務(wù)器進行處理。如果在客戶端和服務(wù)器之間部署了負載均衡設(shè)備,很有可能這多個連接會被轉(zhuǎn)發(fā)至不同的服務(wù)器進行處理。如果服務(wù)器之間沒有會話信息的同步機制,會導(dǎo)致其他服務(wù)器無法識別用戶身份,造成用戶在和應(yīng)用系統(tǒng)發(fā)生交互時出現(xiàn)異常。
負載均衡希望將來自客戶端的連接、請求均衡的轉(zhuǎn)發(fā)至后端的多臺服務(wù)器,以避免單臺服務(wù)器負載過高;而會話保持機制卻要求將某些請求轉(zhuǎn)發(fā)至同一臺服務(wù)器進行處理。因此,在實際的部署環(huán)境中,我們要根據(jù)應(yīng)用環(huán)境的特點,選擇適當(dāng)?shù)臅挶3謾C制。
會話保持類型
會話保持大體可以分為三大類,session sticky,session LBcluster和session server,而這三種會話綁定方式又各有優(yōu)缺點,適應(yīng)不同的場景;
1 session sticky
Session sticky,即會話綁定,即將客戶端的訪問通過某種算法將它調(diào)度至固定的服務(wù)器上,而這種實現(xiàn)方式主要是由調(diào)度器的調(diào)度算法來實現(xiàn)的,像在Nginx反向代理功能中就提供了ip_hash(每個請求按訪問ip結(jié)果分配。這樣來自同一個ip的訪問將被調(diào)度到同一臺服務(wù)器上,有效解決的動態(tài)網(wǎng)頁存在的session共享問題。),url_hash(此方法是按照訪問url的hash結(jié)果來分配請求,使每一個url定向到同一個后端服務(wù)器,可以進一步提高后端緩存服務(wù)器的效率。Nginx本身是不支持url_hash算法的)以及更加強大的一致性hash算法。這種調(diào)度方式是基于四層的會話調(diào)度,這種調(diào)度粒度很粗。
會話綁定中一個很重要的參數(shù)就是連接超時值,負載均衡器會為每一個處于保持狀態(tài)中的會話設(shè)定一個時間值。若一個會話從上一次完成到下次再來之間的間隔時間小于超時值時,負載均衡器將會將新的連接進行會話保持;但如果這個間隔大于該超時值,負載均衡器會將新來的連接認為是新的會話然后進行負載平衡。這種會話話保持實現(xiàn)簡單,只需要根據(jù)數(shù)據(jù)包三四層的信息就可以實現(xiàn),效率比較高。
但此種方式存在的問題就在于,當(dāng)多個客戶端通過代理或地址轉(zhuǎn)換的方式訪問服務(wù)器時,由于來源地址一樣,請求都被分配到同一臺服務(wù)器上,會導(dǎo)致服務(wù)器之間的負載嚴重失衡。另外一種情況是,同一個客戶端產(chǎn)生大量并發(fā),要求分配到多個服務(wù)器上處理的同時進行會話保持。這時基于客戶端源地址的會話保持方法也會導(dǎo)致負載均衡失效。以上情況出現(xiàn)時,就必須要考慮使用其他的會話保持方式。
2 Session Lbcluster
由于session sticky在調(diào)度中不能夠很好的實現(xiàn)會話的保持與高可用性,只要其中一臺主機宕機,就意味著這臺主機維持的所有會話都將丟失,這不僅對用戶是一種不好的體驗,更是一個站點的損失,于是人們開始思考能否讓后端的每個服務(wù)器都能夠攜帶所有服務(wù)器的會話呢?漸漸的找到了解決方案,那就是實現(xiàn)會話集群,會話集群,顧名思義,那就是將所有維持會話的服務(wù)組合成一個集群,維護該站點所有的會話信息,這樣一來,我們就不用在擔(dān)心因為某臺主機而使得用戶的信息丟失。
這種方式解決了用戶會話丟失的問題,用戶再也不會出現(xiàn)什么”客戶端放入購物車的物品丟失”這類問題了。但是解決了A類問題也會帶來B類問題,每個會話服務(wù)器既要處理前端的用戶請求又要會話同步至其他的主機,如果這是一個量很大的服務(wù)站點,那么每一臺主機在同步其他主機的會話信息,以及將自己維持的會話發(fā)送給其他服務(wù)器時將會產(chǎn)生大量IO操作,這就使得每個服務(wù)器的壓力變得異常大,處理前端的請求的性能大大降低。并且,同步使用的是組播的方式來實現(xiàn)的,大量服務(wù)器同時同步各自的會話給其他的主機,這將消耗大量的帶寬。
3 Session Server
鑒于會話集群帶來的新問題,我們選擇一組服務(wù)器來專門用戶進行會話的管理,后端服務(wù)器只需要將自己的會話寫入到后端的會話服務(wù)器即可,等到用戶的請求到來是,只需要與session server中的會話值做比較即可。那么session Server怎樣存儲這些會話信息呢,于是有了以下幾種存儲方式:
1) 數(shù)據(jù)庫存放
Session信息存儲到數(shù)據(jù)庫表以實現(xiàn)不同應(yīng)用服務(wù)器間Session信息的共享。此種方式適合數(shù)據(jù)庫訪問量不大的網(wǎng)站。
優(yōu)點:實現(xiàn)簡單
缺點:由于數(shù)據(jù)庫服務(wù)器相對于應(yīng)用服務(wù)器更難擴展且資源更為寶貴,在高并發(fā)的Web應(yīng)用中,大的性能瓶頸通常出現(xiàn)在數(shù)據(jù)庫服務(wù)器。因此如果將 Session存儲到數(shù)據(jù)庫表,頻繁的數(shù)據(jù)庫操作會影響業(yè)務(wù)。
2) 文件系統(tǒng)存放
通過文件系統(tǒng)(比如NFS)來實現(xiàn)各臺服務(wù)器間的Session共享。此種方式適合并發(fā)量不大的網(wǎng)站。
優(yōu)點:各臺服務(wù)器只需要mount存儲Session的磁盤即可,實現(xiàn)較為簡單。
缺點:NFS對高并發(fā)讀寫的性能并不高,在硬盤I/O性能和網(wǎng)絡(luò)帶寬上存在較大瓶頸,尤其是對于Session這樣的小文件的頻繁讀寫操作。
3) Memcached存放
利用Memcached來保存Session數(shù)據(jù),直接通過內(nèi)存的方式讀取。
優(yōu)點:效率高,在讀寫速度上會比存放在文件系統(tǒng)時快很多,而且多個服務(wù)器共用Session也更加方便,將這些服務(wù)器都配置成使用同一組memcached服務(wù)器就可以,減少了額外的工作量。
缺點:一旦宕機內(nèi)存中的數(shù)據(jù)將會丟失,但對Session數(shù)據(jù)來說并不是嚴重的問題。如果網(wǎng)站訪問量太大、Session太多的時候memcached會將不常用的部分刪除,但是如果用戶隔離了一段時間之后繼續(xù)使用,將會發(fā)生讀取失敗的問題。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
網(wǎng)頁名稱:session會話基礎(chǔ)理論-創(chuàng)新互聯(lián)
URL分享:http://sd-ha.com/article2/pgdic.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、品牌網(wǎng)站制作、靜態(tài)網(wǎng)站、品牌網(wǎng)站建設(shè)、小程序開發(fā)、App設(shè)計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)