伺服器實現 如何實現session跨伺服器共享

2021-10-14 16:50:21 字數 1787 閱讀 5581

session共享有多種解決方法,常用的有四種:客戶端cookie儲存、伺服器間session同步、使用集群管理session、把session持久化到資料庫。1.客戶端cookie儲存

以cookie加密的方式儲存在客戶端,每次session資訊被寫在客戶端,然後經瀏覽器再次提交到伺服器,即使兩次請求在集群中的兩台伺服器上完成,也可以到達session共享。

優點是減輕伺服器端的壓力;

缺點是受到cookie的大小限制,可能占用一定頻寬,因為每次請求會在頭部附帶一定大小的cookie資訊,另外這種方式在使用者禁止使用cookie的情況下無效。

傳統**一般通過將一部分資料儲存在cookie中,來規避分布式環境下session的操作。這樣做的弊端很多,一方面cookie的安全性一直廣為垢病,另一方面cookie儲存資料的大小是有限制的。隨著移動網際網路的發展,很多情況下還得兼顧移動端的session需求,使得採用cookie來進行session同步的方式的弊端更為凸顯,分布式session正是在這種情況下應運而生的。2.伺服器間session同步

定時同步各個伺服器的session資訊,此方法可能有一定延時,使用者體驗也不是很好。

使用主-從伺服器的架構,當使用者在主伺服器上登入後,通過指令碼或者守護程序的方式,將session資訊傳遞到各個從伺服器中,也可以手工把session檔案存放的目錄改為nfs網路檔案系統,從而實現檔案的跨機器共享(使用nfs或windows檔案共享都可以,或者專用的共享儲存裝置)。

這樣,使用者訪問其它的從伺服器時,就可以讀到session資訊。

缺點:比如速度慢、不穩定等,另外,如果session資訊傳遞是主->從單向的,會有一些風險,比如主伺服器down了,其它伺服器無法獲得session資訊。3.把session持久化到資料庫

這種共享session的方式即將session資訊存入資料庫中,其它應用可以從資料庫中查出session資訊。目前採用這種方案時所使用的資料庫一般為mysql。

利用資料庫共享session的方案有一定的實用性,但也有如下缺點:

首先session的併發讀寫在資料庫中完成,對mysql的效能要求比較高;

其次,我們需要額外地實現session淘汰邏輯**,即定時從資料庫表中更新和刪除session資訊,增加了工作量。

對於系統可靠性要求較高的使用者,可以將session持久化到db中,這樣可以保證宕機時會話不易丟失,但缺點也是顯而易見的,系統的整體吞吐將受到很大的影響。4.使用集群管理session

將session統一儲存在快取集群上,如memcache,這樣可以保證較高的讀、寫效能,這一點對於併發量大的系統來說非常重要;並且從安全性考慮,session畢竟是有有效期的,使用快取儲存,也便於利用快取的失效機制。

使用快取的缺點是,一旦快取重啟,裡面儲存的會話也就丟失了,需要使用者重新建立會話,可以使用快取集群來保證快取的穩定性。

如圖(基於快取的分布式session架構)所示,前端使用者請求經過隨機分發之後,可能會命中後端任意的web server,將session以sessionid作為key,儲存到後端的快取集群中,使得不管請求如何分配,即便是某個web server宕機,也不會影響其他web server獲得 session,這樣既實現了集群間的session同步,又提高了 web server的容錯性。

tomcat作為web server時,可以通過乙個簡單的工具memcached-session- manager9(乙個tomcat session共享解決方案), 實現基於memcache的分布式session。

伺服器實現 FTP伺服器的實現(C語言)

我們在之前的文章中,曾經對ftp檔案傳輸協議做過詳細的介紹。本章,我們對如何用c語言實現ftp伺服器做乙個簡單的介紹。概述 ftp檔案傳輸協議,是網際網路上使用得最廣泛的檔案傳輸協議。ftp提供互動式的訪問,允許客戶指明檔案的格式與型別,並允許檔案具有儲存許可權。ftp遮蔽了不同作業系統之前的細節,...

如何實現CentOS伺服器的擴容??

linux的硬碟識別 一般使用 fdisk l 命令可以列出系統中當前連線的硬碟 裝置和分割槽資訊.新硬碟沒有分割槽資訊,則只顯示硬碟大小資訊.1.關閉伺服器加上新硬碟 2.啟動伺服器,以root使用者登入 3.檢視硬碟資訊 fdisk l disk dev sda 42.9 gb,42949672...

如何實現CentOS伺服器的擴容??

linux的硬碟識別 一般使用 fdisk l 命令可以列出系統中當前連線的硬碟 裝置和分割槽資訊.新硬碟沒有分割槽資訊,則只顯示硬碟大小資訊.1.關閉伺服器加上新硬碟 2.啟動伺服器,以root使用者登入 3.檢視硬碟資訊 fdisk l disk dev sda 42.9 gb,42949672...