<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ### 分布式session實現方案 * **Session復制** 在支持Session復制的Web服務器上,通過修改Web服務器的配置,可以實現將Session同步到其它Web服務器上,達到每個Web服務器上都保存一致的Session。 優點:代碼上不需要做支持和修改。 缺點:需要依賴支持的Web服務器,一旦更換成不支持的Web服務器就不能使用了,在數據量很大的情況下不僅占用網絡資源,而且會導致延遲。 適用場景:只適用于Web服務器比較少且Session數據量少的情況。 可用方案:開源方案tomcat-redis-session-manager,暫不支持Tomcat8 * **Session粘滯** 將用戶的每次請求都通過某種方法強制分發到某一個Web服務器上,只要這個Web服務器上存儲了對應Session數據,就可以實現會話跟蹤。 優點:使用簡單,沒有額外開銷。 缺點:一旦某個Web服務器重啟或宕機,相對應的Session數據將會丟失,而且需要依賴負載均衡機制。 適用場景:對穩定性要求不是很高的業務情景 * **Session集中管理** 在單獨的服務器或服務器集群上使用緩存技術,如Redis存儲Session數據,集中管理所有的Session,所有的Web服務器都從這個存儲介質中存取對應的Session,實現Session共享。 優點:可靠性高,減少Web服務器的資源開銷。 缺點:實現上有些復雜,配置較多。 適用場景:Web服務器較多、要求高可用性的情況。 可用方案:開源方案Spring Session,也可以自己實現,主要是重寫HttpServletRequestWrapper中的getSession方法 * **基于Cookie管理** 這種方式每次發起請求的時候都需要將Session數據放到Cookie中傳遞給服務端。 優點:不需要依賴額外外部存儲,不需要額外配置。 缺點:不安全,易被盜取或篡改;Cookie數量和長度有限制,需要消耗更多網絡帶寬。 適用場景:數據不重要、不敏感且數據量小的情況 【_**這四種方式,相對來說,Session集中管理更加可靠,使用也是最多的】**_ ### Session集中管理方案應該具備的特點 A、中間存儲介質的讀寫速度要快。之前的Session管理方案將Session對象存放在服務器內存中,有著很高的讀寫速度,進行Session集中管理后將會在Session讀寫中引入網絡傳輸,速度會有所降低,所以必須保證中間存儲介質的讀寫速度。 B、中間存儲介質要保證高可用。進行Session集中管理后,整個企業應用的Session都會存放在中間存儲介質中,如果存儲介質是不穩定的,那整個企業應用都將不穩定。 C、對Session的使用者來說,Session管理方案應該是透明的,切換成集中管理方案后用戶無感知。 D、Session管理方案不該和某一Web服務器耦合,應該適用于所有常規Web服務器。 根據上述標準可以看出,Session集中管理方案的技術選型應該從Session存儲介質和管理方案實現兩方面考慮。 ### 管理方案實現 目前常用的Session集中管理方案有兩種,一種是Memcache-Tomcat-Session,另一種是Spring Session。 Memcache-Tomcat-Session是一個基于Memcache和Tomcat實現Session集中管理的開源方案。通過擴展Tomcat的SessionManager,并且在配置文件中替換Tomcat默認的SessionManager來實現Session管理。雖然實現起來比較簡單,但是與Tomcat耦合,不適用于其他Web服務器。 Spring Session是Spring提供的一套Session管理方案,通過一個SessionFilter將所有請求進行攔截,然后使用Request包裝類來接管Session管理。Spring Session不與Web服務器耦合,能夠適用于常規的服務器。同時還提供了統一瀏覽器多Session等功能。 Spring Session雖然優點頗多,但是實現Session管理功能的代碼量也比較大,還需要配合Spring-data-redis使用,學習成本比較大,遇到問題不好維護 ![](../assets/20180421005019001.png) _**參考資料**_ [https://www.jianshu.com/p/3dd4e06bdfa4](https://www.jianshu.com/p/3dd4e06bdfa4)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看