本發(fā)明涉及一種基于內存數(shù)據(jù)庫的網站訪問方法。
背景技術:
隨著互聯(lián)網技術的迅速發(fā)展,各類網絡應用運用而生,例如網購,用戶需要購物必須首先登錄到購物網站,通常用戶在登錄到網站的時間段內,需要一個會話控制(session)來跟蹤會話,對于網站的后臺,一般是由多臺服務器通過負載均衡共同承擔后臺服務,網站訪問生成的session數(shù)據(jù)文件存放于某一服務器的磁盤上。負載均衡的目的是為了平均分配網絡訪問請求,因此同一用戶的第一次網絡訪問和第二次網絡訪問與同一臺服務器無必然關系,實際上也是無法確定的,即第一秒訪問的可能是某一服務器,第二秒訪問的可能是另一服務器。所以同一個登錄用戶實際上就會出現(xiàn):第一秒訪問的是第一臺服務器,第二秒訪問的是第二臺服務器,而訪問的登錄信息一般保存在session數(shù)據(jù)文件中,如此登錄保存的session數(shù)據(jù)就需要進行共享,不然的話會出現(xiàn)訪問第一臺服務器生成了一個session數(shù)據(jù),第二秒訪問請求到第三臺服務器,結果第三臺服務器獲取不到剛才生成的session數(shù)據(jù)。
針對上述問題,現(xiàn)有解決方案1為:將原來存儲在某一服務器磁盤上的session數(shù)據(jù)存儲到客戶端的瀏覽器cookie中。這樣就不需要涉及到數(shù)據(jù)共享。客戶端請求訪問的時候,原來生成在服務器的session數(shù)據(jù)生成到瀏覽器的cookie中,根據(jù)cookie中的數(shù)據(jù)識別用戶。后臺服務器由原來的從本地磁盤上讀取session數(shù)據(jù)轉變?yōu)閺目蛻舳藶g覽器cookie中讀取session數(shù)據(jù),這樣,在網站多臺服務器負載均衡的情況下,即便第一秒請求訪問的是第一臺服務器,第二秒請求訪問的是第三臺服務器,均可以讀取客戶端上的瀏覽器cookie數(shù)據(jù)。
該解決方案減輕了服務器的壓力,由于session數(shù)據(jù)不保存在服務器磁盤上,因此不會出現(xiàn)session數(shù)據(jù)讀取不到的問題。但是其網絡的訪問請求占用很多,每次訪問請求時,客戶端都要通過cookie發(fā)送session數(shù)據(jù)給服務器。另外,瀏覽器對cookie的大小存在限制,每種瀏覽器限制是不同的。
所以該解決方案不適合高訪問量的情況下,每次訪問請求瀏覽器都要發(fā)送session數(shù)據(jù)給服務器。一般一個cookie大小為2k,每次發(fā)送需占用很多帶寬,成本增高。另外存在一定的安全問題,將session數(shù)據(jù)存放于客戶端,而一般session數(shù)據(jù)包含的都是重要性數(shù)據(jù),如帳號、昵稱、用戶id等,因此安全性較差。
現(xiàn)有的解決方案2為:session數(shù)據(jù)保存在傳統(tǒng)的關系型數(shù)據(jù)庫中,這種方式的擴展性很強,可以隨意增加web而不受影響,且安全性較好,其實質為采用程序模擬實現(xiàn)session的機制。具體為將以前存儲在文件中的session數(shù)據(jù)存儲到數(shù)據(jù)庫中,程序模擬從數(shù)據(jù)庫讀取session數(shù)據(jù),約定什么情況下數(shù)據(jù)過期并自動清理,這里是指刪除數(shù)據(jù)庫中的行。session數(shù)據(jù)存放到數(shù)據(jù)庫后,就可以實現(xiàn)多臺服務器統(tǒng)一操作數(shù)據(jù)庫,每臺服務器都能從數(shù)據(jù)庫中進行讀取,從而實現(xiàn)session數(shù)據(jù)的共享。
session數(shù)據(jù)存放于數(shù)據(jù)庫,當訪問量小時沒有問題。但對于大流量網站將嚴重拖慢訪問速度。因為在訪問時首先需查詢數(shù)據(jù)庫,造成數(shù)據(jù)庫壓力大,在高并發(fā)訪問的情況下,會出現(xiàn)很大的性能問題。session數(shù)據(jù)存儲在數(shù)據(jù)庫的做法,在線人數(shù)決定了其瓶頸,只要是登錄的用戶就會涉及到頻繁操作數(shù)據(jù)庫,影響網站的訪問性能。
現(xiàn)有的解決方案3:利用開源的反向代理服務器來做session數(shù)據(jù)的復制,客戶端訪問第一臺服務器,則第一臺服務器同時必須將session數(shù)據(jù)拷貝到第二臺服務器和第三臺服務器上,以實現(xiàn)session數(shù)據(jù)的同步。
該解決方案對于小型網站系統(tǒng),即僅有2~3臺服務器,那么服務器間相互拷貝不存在問題,但如果一個大型網站系統(tǒng)有20~30臺服務器的話,答案是顯而易見的,此時服務器不用再對外提供服務了,就各服務器之間的session數(shù)據(jù)復制就會將服務器的80%-90%的資源占掉,并且復制數(shù)據(jù)會出現(xiàn)延遲,拖慢整個系統(tǒng)的速度。
技術實現(xiàn)要素:
本發(fā)明所要解決的技術問題是提供一種基于內存數(shù)據(jù)庫的網站訪問方法,本方法利用內存數(shù)據(jù)庫讀寫速度的優(yōu)勢,克服了傳統(tǒng)網站訪問過程session數(shù)據(jù)存儲的缺陷,極大提高了網站的訪問性能,并且確保了session數(shù)據(jù)的安全性。
為解決上述技術問題,本發(fā)明基于內存數(shù)據(jù)庫的網站訪問方法包括如下步驟:
步驟一、用戶首次發(fā)送登錄網站信息,網站生成一個session數(shù)據(jù)來跟蹤會話,并且通過服務代理隨機分配網站后臺某一服務器處理該次訪問;
步驟二、網站后臺某一服務器將當前用戶的session數(shù)據(jù)存放于供網站后臺所有服務器共享的內存數(shù)據(jù)庫中,并且對該次訪問作出應答;
步驟三、當用戶再次訪問網站時,網站服務代理隨機分配網站后臺另一服務器處理再次訪問,另一服務器首先檢查本機有無當前用戶的session數(shù)據(jù),如有則直接作出應答,如無則從內存數(shù)據(jù)庫中獲取當前用戶的session數(shù)據(jù),然后作出對應的應答;
步驟四、網站后臺服務器采用淘汰策略設置存放于內存數(shù)據(jù)庫中session數(shù)據(jù)的有效時間,超過有效時間的session數(shù)據(jù)從內存數(shù)據(jù)庫中刪除,訪問會話過期或被放棄。
進一步,網站后臺服務器通過定制方式編輯生成包含用戶登錄偏好、狀態(tài)的session數(shù)據(jù),便于網站人性化的提供當前在線用戶因登錄行為引起的實時公告信息和統(tǒng)計信息。
由于本發(fā)明基于內存數(shù)據(jù)庫的網站訪問方法采用了上述技術方案,即本方法在用戶首次發(fā)送登錄網站信息時生成一個session數(shù)據(jù)來跟蹤會話,并隨機分配某一服務器處理該次訪問;該服務器將當前用戶的session數(shù)據(jù)存放于供網站后臺所有服務器共享的內存數(shù)據(jù)庫中,并且對該次訪問作出應答;當用戶再次訪問網站時,隨機分配另一服務器處理再次訪問,另一服務器首先檢查本機有無當前用戶的session數(shù)據(jù),如有則直接作出應答,如無則從內存數(shù)據(jù)庫中獲取當前用戶的session數(shù)據(jù),然后作出對應的應答;網站后臺服務器設置session數(shù)據(jù)的有效時間,超過有效時間的session數(shù)據(jù)從內存數(shù)據(jù)庫中刪除,訪問會話過期或被放棄。本方法利用內存數(shù)據(jù)庫讀寫速度的優(yōu)勢,克服了傳統(tǒng)網站訪問過程session數(shù)據(jù)存儲的缺陷,極大提高了網站的訪問性能,并且確保了session數(shù)據(jù)的安全性。
附圖說明
下面結合附圖和實施方式對本發(fā)明作進一步的詳細說明:
圖1為本發(fā)明基于內存數(shù)據(jù)庫的網站訪問方法的原理示意圖。
具體實施方式
實施例如圖1所示,本發(fā)明基于內存數(shù)據(jù)庫的網站訪問方法包括如下步驟:
步驟一、用戶首次發(fā)送登錄網站信息,網站生成一個session數(shù)據(jù)來跟蹤會話,并且通過服務代理隨機分配網站后臺某一服務器處理該次訪問;
步驟二、網站后臺某一服務器將當前用戶的session數(shù)據(jù)存放于供網站后臺所有服務器共享的內存數(shù)據(jù)庫中,并且對該次訪問作出應答;
步驟三、當用戶再次訪問網站時,網站服務代理隨機分配網站后臺另一服務器處理再次訪問,另一服務器首先檢查本機有無當前用戶的session數(shù)據(jù),如有則直接作出應答,如無則從內存數(shù)據(jù)庫中獲取當前用戶的session數(shù)據(jù),然后作出對應的應答;
步驟四、網站后臺服務器采用淘汰策略設置存放于內存數(shù)據(jù)庫中session數(shù)據(jù)的有效時間,超過有效時間的session數(shù)據(jù)從內存數(shù)據(jù)庫中刪除,訪問會話過期或被放棄。
優(yōu)選的,網站后臺服務器通過定制方式編輯生成包含用戶登錄偏好、狀態(tài)的session數(shù)據(jù),便于網站人性化的提供當前在線用戶因登錄行為引起的實時公告信息和統(tǒng)計信息。
本方法中的內存數(shù)據(jù)庫是將數(shù)據(jù)放在內存中直接操作的數(shù)據(jù)庫,相對于磁盤,內存的數(shù)據(jù)讀寫速度要高出幾個數(shù)量級,將數(shù)據(jù)保存在內存中相比從磁盤上訪問能夠極大地提高應用的性能。內存數(shù)據(jù)庫拋棄了磁盤數(shù)據(jù)管理的傳統(tǒng)方式,基于全部數(shù)據(jù)都在內存中重新設計了體系結構,并且在數(shù)據(jù)緩存、快速算法、并行操作方面也進行了相應的改進,因此數(shù)據(jù)處理速度比傳統(tǒng)數(shù)據(jù)庫的數(shù)據(jù)處理速度要快很多,一般都在10倍以上。內存數(shù)據(jù)庫的最大特點是其“主拷貝”或“工作版本”常駐內存,即活動事務只與實時內存數(shù)據(jù)庫的內存拷貝打交道。
本方法利用內存數(shù)據(jù)庫讀寫速度的優(yōu)勢,其與磁盤讀取的速度不是一個數(shù)量級的,將session數(shù)據(jù)保存在memcached、redis、couchbase之類的內存數(shù)據(jù)庫中,他們是基于內存存儲數(shù)據(jù)的,性能很高,用戶并發(fā)量很大的時候尤其合適;針對于安全方面,將session數(shù)據(jù)存放內存數(shù)據(jù)庫中不會存在安全問題,由于內存數(shù)據(jù)庫集群對于外部是不可訪問,因此杜絕了信息泄露等風險;同時內存數(shù)據(jù)庫系統(tǒng)能夠控制內存中的過期數(shù)據(jù)自動失效,其剛好符合session數(shù)據(jù)的過期需要,滿足session數(shù)據(jù)的存儲需要,利用內存數(shù)據(jù)庫集群,可達到自動容災,實現(xiàn)高可用性,當網站中一個節(jié)點宕機,導致該節(jié)點服務不可用時,由于session數(shù)據(jù)是存儲在內存數(shù)據(jù)庫中的,因此不影響網站整體的服務;在擴展方面,新增節(jié)點時,只需要應用服務連接內存數(shù)據(jù)庫,將新增的節(jié)點添加到負載均衡的集群中就可以完成擴展。