web集群中常用的session同步解決方案及對比

2021-07-08 16:51:52 字數 2194 閱讀 5060

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

就需要優化或調整目前的架構,大部分人就會採用各種負載均衡軟體例如nginx、hproxy、lvs等,也有的採用分布式的方式把系統根據功能拆分成很多系統,也有的根據地域

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

採用負載均衡軟體是目前大家採取的比較多的方式。但是在採用負載均衡軟體時將會面臨session同步的問題。以下是解決問題的幾種方式。

1. 客戶端cookie加密的方式

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

但是有以下缺點:

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

* 安全性。session資料本來儲存在服務端的,而這個方案是讓session資料轉到外部網路或客戶端中,所以會有安全性問題。不過可以對寫入cookie的session 資料做加密。

* 頻寬消耗。由於加了session資料,頻寬當然也會增加一點。

* 效能消耗。每次http請求和響應都帶有session資料,對於web伺服器來說,在同樣的處理情況下,響應的結果輸出越少,支援的併發請求越。

2. web server的session複製方式

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

優點:靠應用容器來完成session共享,並不依賴應用,如果應用服務數量並不是很多,可以考慮;

缺點:* 同步session資料帶來都網路開銷。只要session資料變化,就需要同步到所有機器上,機器越多,網路開銷越大。

* 由於每台伺服器都儲存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,這種方式也會有問題:

* 如果某一台伺服器宕機或重啟,那麼這台伺服器上的session資料就丟失了。如果session資料中還有登入狀態資訊,那麼使用者需要重現登入。

* 負載均衡要處理具體的session到伺服器的對映。

6.使用terracotta來儲存session

跟memcached類似,但是資料不需要序列化,並且是find-grained changes,效能更好。配置對原來的應用完全透明,原有程式幾乎不用做任何修改。而且terracotta本身支援ha。

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

WEB應用中常用的加密演算法

如果需要進一步編碼為可顯示字串,則需進行base64編碼或者十六進製制編碼。編碼後的資料長度會進一步增加 base64是增長為4 3倍起的最小的4的倍數,十六進製制編碼是增長為2倍 比如,對原文長度在32 47個位元組之間的明文,經過aes256jncryptor加密後的密文長度就是114個位元組,...

推薦幾個WEB中常用的工具方法

class dom工具類,提供了一些方便的函式頁面元素的一些操作 constructor return domutils function domutils 從待選列表移動一項到已經選擇列表 param fbox 待選專案列表 param tbox 選擇了的專案列表 param fmsg 提示資訊 ...

mysql中常用的語句 mysql中常用的語句整理

mysql中常用的語句 1 建立帶自增長的主鍵的表 drop table if exists user login create table user login user id int unsigned not null auto increment,user name varchar 50 de...