freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于zookeeper的分布式session實(shí)現(xiàn)-已發(fā)布-全文預(yù)覽

2025-07-09 17:06 上一頁面

下一頁面
  

【正文】 me) {}以上代碼會(huì)實(shí)例化一個(gè)Session對(duì)象,并將Session ID寫入客戶端Cookie中,最后實(shí)例化Session元數(shù)據(jù),并在ZooKeeper上新建一個(gè)Session節(jié)點(diǎn)。new(cookie !=String id = ()。Session session =(不是Jetty容器下的Request對(duì)象)。Request)) {public如果通過上面的方法返回的Session對(duì)象還是null,則真的需要實(shí)例化一個(gè)Session對(duì)象了,代碼如下所示:正如代碼中所展示的,我們實(shí)例化一個(gè)指定ID的Session對(duì)象,并放入當(dāng)前系統(tǒng)的Session容器中,這樣就完成了Session ID在分布式環(huán)境中的共享,以及Session對(duì)象在各子系統(tǒng)之間的同步。然后先到本地的Session容器中查找是否存在該ID的Session對(duì)象。returnsession =//否則創(chuàng)建指定ID的Session并返回(用于同步分布式環(huán)境中的其他機(jī)器上的Session本地副本)}if//如果存在,則直接返回else(id)。//刪除本地的副本(!valid) {Request req = (Request) request。//將HttpServletRequest轉(zhuǎn)換成Jetty容器的Request類型}instanceof所以先要對(duì)已經(jīng)存在的Session ID進(jìn)行處理。B)returngetRequestSessionId(HttpServletRequest request) {}=nullamp。(sessionamp。(session=(id !=(獲取客戶端的Session ID:[null。session。!=newnullHttpSession getSession(boolean另外我們還自己實(shí)現(xiàn)sessionManager接口,用來管理Session的生命周期。sessionManager)。//ServletException {void()。//銷毀ZooKeeper}}()。{ifdestroy() {see/**+ poolsize +((poolsize))。{].)。}String timeout = (TIMEOUT)。}Configuration()。throwsinit()*=staticstaticstaticprotected/**參數(shù)配置*/implements}}這個(gè)filter是繼承自DistributedSessionFilter的,這個(gè)父類主要是負(fù)責(zé)完成初始化參數(shù)設(shè)置等通用方法的實(shí)現(xiàn),代碼如下所示:publicnewthrows}}( pleted.)。()。{=throwsprivateDistributedSessionFilter {publicversion屬性:這個(gè)屬性是為了冗余Znode的version值,用來實(shí)現(xiàn)樂觀鎖,對(duì)Session節(jié)點(diǎn)的元數(shù)據(jù)進(jìn)行更新操作。currentTimeMillis(),就表示當(dāng)前Session超時(shí)。c)其中需要關(guān)注的屬性有:a)== ()。*intvalidateprivate/**是否可用*/private/**session的最后一次訪問時(shí)間*/private/**session的最大空閑時(shí)間*/private/**session的創(chuàng)建時(shí)間*/serialVersionUIDprivateSerializable {以下代碼就是SessionMetaData的實(shí)現(xiàn):public如果Session中的Map大于1MB,就不能單節(jié)點(diǎn)的存儲(chǔ)了。但是大部分情況下,我們?cè)谧x取數(shù)據(jù)時(shí)并不需要整個(gè)Map,而是Map中的一個(gè)或幾個(gè)值。因此,每個(gè)節(jié)點(diǎn)天然就是一個(gè)KeyValue鍵值對(duì)的數(shù)據(jù)結(jié)構(gòu)?!?SESSIONS”是一個(gè)組節(jié)點(diǎn),用來在ZooKeeper上劃分不同功能組的定義。2)也就是說,ZooKeeper負(fù)責(zé)Session數(shù)據(jù)的存儲(chǔ),而我們自己實(shí)現(xiàn)的Session管理器將負(fù)責(zé)Session生命周期的管理。通過選舉算法,最終由一臺(tái)原本是跟隨者的 服務(wù)器升級(jí)為領(lǐng)導(dǎo)者。1)由于數(shù)據(jù)需要通過網(wǎng)絡(luò)傳輸,而網(wǎng)絡(luò)是不穩(wěn)定的,所以如果網(wǎng)絡(luò)發(fā)生故障,則所有的數(shù)據(jù)通訊都將終止。5.因?yàn)樵贘etty的HttpServletRequest實(shí)現(xiàn)類的一些方法中對(duì)Session的類型進(jìn)行了強(qiáng)制轉(zhuǎn)換(轉(zhuǎn)換成它自定義的HttpSession實(shí)現(xiàn)類),如果不從其繼承,則會(huì)出現(xiàn)ClassCastException異常。例如,在Jetty容器中,HttpSession的實(shí)現(xiàn)類是一個(gè)保護(hù)內(nèi)部類,無法從其繼承并覆蓋相關(guān)的方法,只能從其實(shí)現(xiàn)類的父類中繼承更加抽象的Session實(shí)現(xiàn)。當(dāng)然上面描述的4點(diǎn)挑戰(zhàn)只是在實(shí)現(xiàn)分布式Session過程中面臨的關(guān)鍵問題,并不是全部。用戶在某個(gè)子系統(tǒng)的Session中設(shè)置了一個(gè)User類型的對(duì)象,通過序列化,將User類型的對(duì)象轉(zhuǎn)換成字節(jié)數(shù)組,并通過網(wǎng)絡(luò)傳輸?shù)搅薽emcached或是ZooKeeper上。這里涉及到了JVM的類裝載機(jī)制,由于這個(gè)主題不是本文的討論重點(diǎn),所以相關(guān)詳情可以參考相關(guān)的JVM文檔。你無法保證每個(gè)子系統(tǒng)的時(shí)鐘都是一致的,可能相差幾秒,甚至相差幾分鐘。Session的失效Session是有生命周期的,當(dāng)Session的空閑時(shí)間(maxIdle屬性值)超出限制時(shí),Session就失效了,這種設(shè)計(jì)主要是考慮到了Web容器的可靠性。因此我們需要一種機(jī)制,即可以保證Session數(shù)據(jù)的一致性,又不會(huì)降低用戶操作的響應(yīng)度。Session中數(shù)據(jù)的復(fù)制和共享Session ID的問題一樣,在分布式環(huán)境下,Session中的用戶數(shù)據(jù)也需要在各個(gè)子系統(tǒng)中共享。因此,當(dāng)某個(gè)子系統(tǒng)的Web容器產(chǎn)生一個(gè)新的ID時(shí),它必須需要一種機(jī)制來通知其他子系統(tǒng),并且告知新ID是什么。在Servlet中,我們可以通過HttpSession的getId()方法得到這個(gè)值,但是我們無法改變這個(gè)值。無論是memcached,還是ZooKeeper,底層都是基于TCP/IP的。有人會(huì)懷疑ZooKeeper的執(zhí)行能力,在ZooKeeper誕生的地方——Yahoo!給出了一組數(shù)據(jù)將打消你的懷疑。通過選舉算法和集群復(fù)制可以避免單點(diǎn)故障,由于是文件系統(tǒng),所以即使所有的ZooKeeper節(jié)點(diǎn)全部掛掉,數(shù)據(jù)也不會(huì)丟失,重啟服務(wù)器之后,數(shù)據(jù)即可恢復(fù)。雖然memcached也可以是分布式集群環(huán)境的,但是對(duì)于一份數(shù)據(jù)來說,它總是存儲(chǔ)在某一臺(tái)memcached服務(wù)器上。ZooKeeper之特性ZooKeeper本質(zhì)上是一個(gè)分布式的小文件存儲(chǔ)系統(tǒng)。而在我們的case中,它被作為一個(gè)協(xié)調(diào)分布式環(huán)境中各子系統(tǒng)之間共享狀態(tài)數(shù)據(jù)的基礎(chǔ)設(shè)施。但是拆分系統(tǒng)同時(shí)也帶來了系統(tǒng)的復(fù)雜性——各子系統(tǒng)不是孤立存在的,它們彼此 之間需要協(xié)作和交互,這就是我們常說的分布式系統(tǒng)。動(dòng)物園里當(dāng)然有好多的動(dòng)物,游客可以根據(jù)動(dòng)物園提供的向?qū)D到不同的場館觀賞各種類型的動(dòng)物,而不是像走在原始叢林里,心驚膽顫的被動(dòng) 物所觀賞?;赯ooKeeper的分布式Session實(shí)現(xiàn)1.認(rèn)識(shí)ZooKeeperZooKeeper—— “動(dòng)物園管理員”。拆 分系統(tǒng)是目前我們可選擇的解決系統(tǒng)可伸縮性和性能問題的唯一行之有效的方法。它可以應(yīng)用在一些需要提供統(tǒng)一協(xié)調(diào)服務(wù)的case中,例如命名、配置管理、同步和組服務(wù)等。3.memcached本質(zhì)上是一個(gè)內(nèi)存緩存系統(tǒng)。當(dāng)然你可以自己實(shí)現(xiàn)一套機(jī)制,用來在分布式memcached之間進(jìn)行數(shù)據(jù)的同步和持久化,但是實(shí)現(xiàn)這套機(jī)制談何容易!由上述ZooKeeper的特性可知,ZooKeeper是一個(gè)分布式小文件系統(tǒng),并且被設(shè)計(jì)為高可用性。當(dāng)然所有的一切ZooKeeper已經(jīng)為開發(fā)者提供了保障,我們需要做的只是調(diào)用API。4.在分布式環(huán)境下,每個(gè)子系統(tǒng)都是跨網(wǎng)絡(luò)的獨(dú)立JVM,在這些JVM之間實(shí)現(xiàn)共享數(shù)據(jù)的方式無非就是TCP/IP通訊。1)Jetty和Tomcat容器會(huì)通過一個(gè)Hash算法,得到一個(gè)唯一的ID字符串,然后賦值給某個(gè)實(shí)例化的Session,此時(shí),這個(gè)Session就可以被放入Web容器的SessionManager中開始它短暫的一生。在單系統(tǒng)中,Session ID只需要被自身的Web容器讀寫,但是在分布式環(huán)境中,多個(gè)Web容器需要共享同一個(gè)Session ID。其實(shí)Session在分布式系統(tǒng)之間的復(fù)制實(shí)現(xiàn)是簡單的,但是每次在Session數(shù)據(jù)發(fā)生變化時(shí),都在子系統(tǒng)之間復(fù)制一次數(shù)據(jù),會(huì)大大降低用戶的響應(yīng)速度。在分布式環(huán)境下,Session被簡單的創(chuàng)建,并且通過某種機(jī)制被復(fù)制到了其他系統(tǒng)中。4)我在同一個(gè)上打了引號(hào),因?yàn)閷?shí)際上并非是同一個(gè)ClassLoader,只是邏輯上我們認(rèn)為是同一個(gè)。我們通過一個(gè)例子來描述這個(gè)問題。因此在做反序列化時(shí)出現(xiàn)了ClassNotFoundException異常。但是在不同的Web容器中(例如Jetty或是Tomcat)對(duì)HttpServletRequest的實(shí)現(xiàn)是不一樣的,雖然都是實(shí)現(xiàn)了HttpServletRequest接口,但是各自又添加了一些特性在其中。很不幸,那是不可能的。并不像網(wǎng)上有些人的輕描淡寫,僅僅覆蓋setAttribute和getAttribute方法是行不通的。算法實(shí)現(xiàn)從上述的挑戰(zhàn)來看,要寫一個(gè)分布式應(yīng)用程序是困難的,主要原因是因?yàn)榫植抗收?。接下來我們就開始描述如何實(shí)現(xiàn)基于ZooKeeper的分布式Session系統(tǒng)?;赯ooKeeper的分布式Session系統(tǒng)架構(gòu)當(dāng)領(lǐng)導(dǎo)者服務(wù)器由于故障無法訪問時(shí),剩下的所有跟隨者服務(wù)器就開始進(jìn)行領(lǐng)導(dǎo)者的選舉。它不再對(duì)用戶的Session進(jìn)行本地管理,而是委托給ZooKeeper和我們自己實(shí)現(xiàn)的Session管理器。下面會(huì)對(duì)此進(jìn)行詳細(xì)的描述。分布式Session的數(shù)據(jù)模型Session數(shù)據(jù)的存儲(chǔ)是有
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1