nginx tomcat memcache會話保持

2021-10-03 08:46:23 字數 3490 閱讀 2351

應用伺服器的高可用架構設計主要基於服務無狀態這一特性,但是事實上,業務總是有狀態的,在交易類的電子商務**,需要有購物車記錄使用者的購買資訊,使用者每次購買請求都是向購物車中增加商品;在社交類的**中,需要記錄使用者的當前登入狀態、最新發布的訊息及好友狀態等,使用者每次重新整理頁面都需要更新這些資訊。

在**中,http請求是無狀態的。也就是說即使第一次和伺服器連線後並且登入成功後,第二次請求伺服器依然不能知道當前請求是哪個使用者。cookie的出現就是為了解決這個問題,第一次登入後伺服器返回一些資料(cookie)給瀏覽器,然後瀏覽器儲存在本地,當該使用者傳送第二次請求的時候,就會自動的把上次請求儲存的cookie資料自動的攜帶給伺服器,伺服器通過瀏覽器攜帶的資料就能判斷當前使用者是哪個了。cookie儲存的資料量有限,不同的瀏覽器有不同的儲存大小,但一般不超過4kb。因此使用cookie只能儲存一些小量的資料。

session和cookie的作用有點類似,都是為了儲存使用者相關的資訊。不同的是,cookie是儲存在本地瀏覽器,而session儲存在伺服器。儲存在伺服器的資料會更加的安全,不容易被竊取。但儲存在伺服器也有一定的弊端,就是會占用伺服器的資源,但現在伺服器已經發展至今,一些session資訊還是綽綽有餘的。

web開發發展至今,cookie和session的使用已經出現了一些非常成熟的方案。在如今的市場或者企業裡,一般有兩種儲存方式:

1、儲存在服務端:通過cookie儲存乙個session_id,然後具體的資料則是儲存在session中。如果使用者已經登入,則伺服器會在cookie中儲存乙個session_id,下次再次請求的時候,會把該session_id攜帶上來,伺服器根據session_id在session庫中獲取使用者的session資料。就能知道該使用者到底是誰,以及之前儲存的一些狀態資訊。這種專業術語叫做server side session。

2、將session資料加密,然後儲存在cookie中。這種專業術語叫做client side session。flask採用的就是這種方式,但是也可以替換成其他形式。

客戶端請求時nginx通過負載排程演算法將請求排程至某一后端伺服器;並把session儲存到兩台memcached中;客戶端重新整理(不換瀏覽器)時,請求換成另乙個後端伺服器響應時session id保持不變;

(1)當在nginx配置檔案中加入ip_hash;

ip_hash將同乙個使用者的請求進行固定後端的繫結 當server2掛掉後,反向**會調轉到server3上,但此時的session已經發生變化,仍然保持不了server2的session

(2)交叉儲存我存乙份,然後給對方的memcache裡面也存乙份

如果我的服務(tomcat)宕機了,對方也可以讀取到我的session資訊

[root@server2 lib]# pwd

/usr/local/tomcat/lib

[root@server2 lib]# rm -fr memcached-session-manager-tc6-1.6.3.jar # 因為我們的tomcat是7版本的,所以6版本的我們用不上,刪除即可,否則可能影響

測試:看有沒有實現session共享(通過memcache)

通過反向**,如果後端的一台服務掛掉,我們將使用者的請求調向後端的一台新的伺服器,保持之前的會話session資訊

可以看到

server2的session在server3上面儲存了乙份

將server2的tomcat服務shutdown後,進行頁面重新整理

server3的session寫到了server2的memcache

同時server3也可以通過memcache讀到剛才儲存到的server2的session資訊

apache安裝 簡單配置負載均衡和會話保持

首先安裝apache依賴的apr和apr util 2.解壓 tar xzvf apr 1.5.1.tar.gz 3.進入解壓目錄,依次執行 1 2 3 configure make makeinstall 5.解壓 tar xzvf apr util 1.5.4.tar.gz 6.進入解壓目錄,依...

python會話 python會話?

這可能是乙個老問題,但我面臨著同樣的問題 python中沒有內建的會話支援。我編寫了乙個簡單的會話處理程式,可能對某些人有用 usr bin python coding utf 8 import tempfile import hashlib import os import time import...

Tensorflow建立會話,啟動會話

import tensorflow as tf 定義乙個常量 m1 tf.constant 3,3 這是乙個一行兩列的資料 print m1 m2 tf.constant 2 3 print m2 輸出 tensor const 5 0 shape 1,2 dtype int32 tensor co...