隨著**的功能越來越多,使用者量越來越龐大,單節點模式已經嚴重不能支撐整個系統的正常運作,輕則使用者頁面訪問時間越來越慢,重則就會導致整個系統癱瘓。這時候
就需要優化或調整目前的架構,大部分人就會採用各種負載均衡軟體例如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...