天天看點

SpringBoot+Redis實作Session資料共享

1.需求

在傳統的Web小規模并發的情況下,單個Tomcat容器往往就能勝任請求的負載與處理,如圖1所示的方案一。方案一的好處在于,部署簡單,維護友善,在Web服務發生變更之後,能夠快速更新;除此之外,在使用者Session管理方面也十分簡單:将所有Session存儲至本地伺服器即可。但是該方案存在并發規模小、單點故障等原因。

SpringBoot+Redis實作Session資料共享

針對方案一存在的負載小、單點故障等因素,方案二進行了大規模的改進。首先,使用NGINX+keepalived取代原來的單節點Tomcat,同時以NGINX作為反向代理伺服器,管理多個Tomcat服務節點。如圖2所示。

SpringBoot+Redis實作Session資料共享

從圖2可以看出,單節點部署的使用者請求負載,從單個Tomcat伺服器轉移到了Nginx負載(還有其他負載均衡方式)下的多個Tomcat節點,進而實作了單個Web服務的負載均衡與備份。而各個Tomcat節點與NGINX之間,則是采用反向代理的形式進行通信,具體方法有以下五種:

**1、輪詢(預設)

每個請求按時間順序逐一配置設定到不同的後端伺服器,如果後端伺服器down掉,能自動剔除。

upstream backserver {

server 192.168.0.14;

server 192.168.0.15;

} **

**2、指定權重

指定輪詢幾率,weight和通路比率成正比,用于後端伺服器性能不均的情況。

server 192.168.0.14 weight=10;

server 192.168.0.15 weight=10;

**3、IP綁定 ip_hash

每個請求按通路ip的hash結果配置設定,這樣每個訪客固定通路一個後端伺服器,可以解決session的問題。

ip_hash;

server 192.168.0.14:88;

server 192.168.0.15:80;

}

**

**4、fair(第三方)

按後端伺服器的響應時間來配置設定請求,響應時間短的優先配置設定。

server server1;

server server2;

fair;

**5、url_hash(第三方)

按通路url的hash結果來配置設定請求,使每個url定向到同一個後端伺服器,後端伺服器為緩存時比較有效。

server squid1:3128;

server squid2:3128;

hash $request_uri;

hash_method crc32;

具體NGINX+Keepalived+Tomcat的負載均衡搭建請參考我的另一篇部落格。

2.帶來的問題

繼續閱讀