web叢集中經常使用的session同步解決方式及對照

來源:互聯網
上載者:User

標籤:ebs   strong   讀寫   限制   負載平衡   網路操作   頁面   會話   響應   

  隨著網站的功能越來越多,使用者量越來越龐大,單節點模式已經嚴重不能支撐整個系統的正常運作,輕則使用者頁面訪問時間越來越慢。重則就會導致整個系統癱瘓。這時候

就須要最佳化或調整眼下的架構,大部分人就會採用各種負載平衡軟體比如nginx、hproxy、LVS等,也有的採用分布式的方式把系統依據功能拆分成非常多系統,也有的依據地區

和網路不同來實現訪問不同節點部署的系統。也有的大型高流量、高負載的系統把負載平衡、分布式及依據地區、網路等這些方式都整合在一起來實現系統的正常執行。

採用負載平衡軟體是眼下大家採取的比較多的方式。可是在採用負載平衡軟體時將會面臨session同步的問題。

下面是解決這個問題的幾種方式。


1. clientcookie加密的方式


把session資料存放在cookie中,當請求過來時。從cookie中擷取session資料。這樣的方式不須要不論什麼的儲存系統。也不會出現讀寫session資料帶來的網路操作延時和不穩定性。


可是有下面缺點:

* Cookie有長度限制,這會影響session資料的長度。


* 安全性。

session資料本來儲存在服務端的,而這個方法是讓session資料轉到外部網路或client中。所以會有安全性問題。只是能夠對寫入Cookie的session 資料做加密。


* 頻寬消耗。因為加了session資料。頻寬當然也會添加一點。
* 效能消耗。每次Http請求和響應都帶有Session資料。對於Webserver來說,在相同的處理情況下,響應的結果輸出越少,支援的並發請求越。

2. web server的session複製方式

大部分應用server都提供了session複製的功能來實現叢集。tomcat、jboss、was都提供了這種功能。session複製就是每台應用服務。都儲存會話session資料。


長處:

靠應用程式容器來完畢session共用,並不依賴應用。假設應用服務數量並非非常多,能夠考慮。

缺點:

  * 同步session資料帶來都網路開銷。

僅僅要session資料變化,就須要同步到全部機器上,機器越多,網路開銷越大。
  * 因為每台server都儲存session資料,假設叢集的session資料非常多。比方90萬人在訪問網站。每台機器用於儲存session資料的內容佔用非常嚴重。



3. 使用關聯式資料庫儲存session     

用mysql、sqlserver等資料庫儲存session,就算伺服器宕機了也沒事,session照樣在。

缺點:

*程式須要定製。
  *每次請求都進行資料庫讀寫開銷不小(使用記憶體資料庫能夠提高效能,宕機就會遺失資料。

可供選擇的記憶體資料庫有BerkeleyDB,Mysql的記憶體表);

4.使用nosql資料庫儲存session


採用redis、mongodb、memcached等非關聯式資料庫來實現session的共用。這些非關聯式資料庫響應資料非常的快,並且支援的訪問量也比較大。系統資源消耗也比較少。這也是非常多系統所採用的方式。


可是也有缺點:

* 讀寫session引入了網路操作。相對於本機讀寫session,帶來了延時和不穩定性。


* 如Session集中服務有問題,會影響應用。

5.採用Session Stick

在單機情況。session儲存在單機上,請求也是到這台單機上,不會有問題。變成多台後,假設能保障每次請求都到同一台服務。那就和單機一樣了。 這須要在負載平衡裝置上改動。這就是Session Stick。這樣的方式也會有問題:


* 假設某一台server宕機或重新啟動。那麼這台server上的session資料就丟失了。假設session資料中還有登入狀態資訊。那麼使用者須要重現登入。


* 負載平衡要處理詳細的session到server的映射。


6.使用terracotta來儲存session


跟memcached類似,可是資料不須要序列化。並且是Find-Grained Changes。效能更好。

配置對原來的應用全然透明,原有程式差點兒不用做不論什麼改動。並且terracotta本身支援HA。

綜上所述。我個人推薦使用第4、6種方式來解決session共用的問題。

web叢集中經常使用的session同步解決方式及對照

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.