欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

簡單了解4種分布式session解決方案

 更新時間:2020年04月29日 08:37:42   作者:架構(gòu)文摘  
這篇文章主要介紹了簡單了解4種分布式session解決方案,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

cookie和session的區(qū)別和聯(lián)系

cookie是本地客戶端用來存儲少量數(shù)據(jù)信息的,保存在客戶端,用戶能夠很容易的獲取,安全性不高,存儲的數(shù)據(jù)量小
session是服務(wù)器用來存儲部分?jǐn)?shù)據(jù)信息,保存在服務(wù)器,用戶不容易獲取,安全性高,儲存的數(shù)據(jù)量相對大,存儲在服務(wù)器,會占用一些服務(wù)器資源,但是對于它的優(yōu)點來說,這個缺點可以忽略了

session有什么用

在一次客戶端和服務(wù)器為之間的會話中,客戶端(瀏覽器)向服務(wù)器發(fā)送請求,首先cookie會自動攜帶上次請求存儲的數(shù)據(jù)(JSESSIONID)到服務(wù)器,服務(wù)器根據(jù)請求參數(shù)中的JSESSIONID到服務(wù)器中的session庫中查詢是否存在此JSESSIONID的信息,如果存在,那么服務(wù)器就知道此用戶是誰,如果不存在,就會創(chuàng)建一個JSESSIONID,并在本次請求結(jié)束后將JSESSIONID返回給客戶端,同時將此JSESSIONID在客戶端cookie中進行保存

客戶端和服務(wù)器之間是通過http協(xié)議進行通信,但是http協(xié)議是無狀態(tài)的,不同次請求會話是沒有任何關(guān)聯(lián)的,但是優(yōu)點是處理速度快

session是一次瀏覽器和服務(wù)器的交互的會話,當(dāng)瀏覽器關(guān)閉的時候,會話就結(jié)束了,但是會話session還在,默認session是還保留30分鐘的

分布式session一致性

客戶端發(fā)送一個請求,經(jīng)過負載均衡后該請求會被分配到服務(wù)器中的其中一個,由于不同服務(wù)器含有不同的web服務(wù)器(例如Tomcat),不同的web服務(wù)器中并不能發(fā)現(xiàn)之前web服務(wù)器保存的session信息,就會再次生成一個JSESSIONID,之前的狀態(tài)就會丟失

方案一:客戶端存儲

直接將信息存儲在cookie中cookie是存儲在客戶端上的一小段數(shù)據(jù),客戶端通過http協(xié)議和服務(wù)器進行cookie交互,通常用來存儲一些不敏感信息

缺點

數(shù)據(jù)存儲在客戶端,存在安全隱患

cookie存儲大小、類型存在限制

數(shù)據(jù)存儲在cookie中,如果一次請求cookie過大,會給網(wǎng)絡(luò)增加更大的開銷

方案二:session復(fù)制

session復(fù)制是小型企業(yè)應(yīng)用使用較多的一種服務(wù)器集群session管理機制,在真正的開發(fā)使用的并不是很多,通過對web服務(wù)器(例如Tomcat)進行搭建集群。

存在的問題

session同步的原理是在同一個局域網(wǎng)里面通過發(fā)送廣播來異步同步session的,一旦服務(wù)器多了,并發(fā)上來了,session需要同步的數(shù)據(jù)量就大了,需要將其他服務(wù)器上的session全部同步到本服務(wù)器上,會帶來一定的網(wǎng)路開銷,在用戶量特別大的時候,會出現(xiàn)內(nèi)存不足的情況
優(yōu)點:

服務(wù)器之間的session信息都是同步的,任何一臺服務(wù)器宕機的時候不會影響另外服務(wù)器中session的狀態(tài),配置相對簡單
Tomcat內(nèi)部已經(jīng)支持分布式架構(gòu)開發(fā)管理機制,可以對tomcat修改配置來支持session復(fù)制,在集群中的幾臺服務(wù)器之間同步session對象,使每臺服務(wù)器上都保存了所有用戶的session信息,這樣任何一臺本機宕機都不會導(dǎo)致session數(shù)據(jù)的丟失,而服務(wù)器使用session時,也只需要在本機獲取即可
如何配置:

在Tomcat安裝目錄下的config目錄中的server.xml文件中,將注釋打開,tomcat必須在同一個網(wǎng)關(guān)內(nèi),要不然收不到廣播,同步不了session

在web.xml中開啟session復(fù)制:<distributable/>

方案三:session綁定:

Nginx介紹:

Nginx是一款自由的、開源的、高性能的http服務(wù)器和反向代理服務(wù)器

Nginx能做什么:

反向代理、負載均衡、http服務(wù)器(動靜代理)、正向代理

如何使用nginx進行session綁定

我們利用nginx的反向代理和負載均衡,之前是客戶端會被分配到其中一臺服務(wù)器進行處理,具體分配到哪臺服務(wù)器進行處理還得看服務(wù)器的負載均衡算法(輪詢、隨機、ip-hash、權(quán)重等),但是我們可以基于nginx的ip-hash策略,可以對客戶端和服務(wù)器進行綁定,同一個客戶端就只能訪問該服務(wù)器,無論客戶端發(fā)送多少次請求都被同一個服務(wù)器處理

在nginx安裝目錄下的conf目錄中的nginx.conf文件

upstream aaa {
	Ip_hash;
	server 39.105.59.4:8080;
	Server 39.105.59.4:8081;
}
server {
	listen 80;
	server_name www.wanyingjing.cn;
	#root /usr/local/nginx/html;
	#index index.html index.htm;
	location / {
		proxy_pass http:39.105.59.4;
		index index.html index.htm;
	}
}

缺點:

容易造成單點故障,如果有一臺服務(wù)器宕機,那么該臺服務(wù)器上的session信息將會丟失

前端不能有負載均衡,如果有,session綁定將會出問題

優(yōu)點:

配置簡單

方案四:基于redis存儲session方案

基于redis存儲session方案流程示意圖

引入pom依賴:

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-session-data-redis</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-data-starter-redis</artifactId>
</dependency>

配置redis

#redis數(shù)據(jù)庫索引(默認是0)
spring.redis.database=0
spring.redis.host=127.0.0.1
spring.redis.port=6379
#默認密碼為空
spring.redis.password=
#連接池最大連接數(shù)(負數(shù)表示沒有限制)
spring.redis.jedis.pool.max-active=1000
#連接池最大阻塞等待時間(負數(shù)表示沒有限制)
spring.redis.jedis.pool.max-wait=-1ms
#連接池中的最大空閑連接
spring.redis.jedis.pool.max-idle=10
#連接池中的最小空閑連接
spring.redis.jedis.pool.min-idle=2
#連接超時時間(毫秒)
spring.redis.timeout=500ms

優(yōu)點:

  • 這是企業(yè)中使用的最多的一種方式
  • spring為我們封裝好了spring-session,直接引入依賴即可
  • 數(shù)據(jù)保存在redis中,無縫接入,不存在任何安全隱患
  • redis自身可做集群,搭建主從,同時方便管理

缺點:

多了一次網(wǎng)絡(luò)調(diào)用,web容器需要向redis訪問

總結(jié)

一般會將web容器所在的服務(wù)器和redis所在的服務(wù)器放在同一個機房,減少網(wǎng)絡(luò)開銷,走內(nèi)網(wǎng)進行連接

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java同步關(guān)鍵字synchronize底層實現(xiàn)原理解析

    Java同步關(guān)鍵字synchronize底層實現(xiàn)原理解析

    synchronized關(guān)鍵字對大家來說并不陌生,當(dāng)我們遇到并發(fā)情況時,優(yōu)先會想到用synchronized關(guān)鍵字去解決,synchronized確實能夠幫助我們?nèi)ソ鉀Q并發(fā)的問題,接下來通過本文給大家分享java synchronize底層實現(xiàn)原理,感興趣的朋友一起看看吧
    2021-08-08
  • Java如何解決發(fā)送Post請求報Stream?closed問題

    Java如何解決發(fā)送Post請求報Stream?closed問題

    這篇文章主要介紹了Java如何解決發(fā)送Post請求報Stream?closed問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • hibernate增刪改查操作代碼

    hibernate增刪改查操作代碼

    這篇文章主要介紹了hibernate增刪改查操作代碼,需要的朋友可以參考下
    2017-09-09
  • Java多線程之ReentrantReadWriteLock源碼解析

    Java多線程之ReentrantReadWriteLock源碼解析

    這篇文章主要介紹了Java多線程之ReentrantReadWriteLock源碼解析,文中有非常詳細的代碼示例,對正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-05-05
  • Spring?AOP實現(xiàn)多數(shù)據(jù)源動態(tài)切換

    Spring?AOP實現(xiàn)多數(shù)據(jù)源動態(tài)切換

    本文主要介紹了Spring?AOP實現(xiàn)多數(shù)據(jù)源動態(tài)切換,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • springcloud gateway如何實現(xiàn)路由和負載均衡

    springcloud gateway如何實現(xiàn)路由和負載均衡

    這篇文章主要介紹了springcloud gateway如何實現(xiàn)路由和負載均衡的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • tomcat報錯:Wrapper cannot find servlet class ...問題解決

    tomcat報錯:Wrapper cannot find servlet class ...問題解決

    這篇文章主要介紹了tomcat報錯:Wrapper cannot find servlet class ...問題解決的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • 基于SPRINGBOOT配置文件占位符過程解析

    基于SPRINGBOOT配置文件占位符過程解析

    這篇文章主要介紹了基于SPRINGBOOT配置文件占位符過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • mybatis實現(xiàn)圖書管理系統(tǒng)

    mybatis實現(xiàn)圖書管理系統(tǒng)

    這篇文章主要為大家詳細介紹了mybatis實現(xiàn)圖書管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • java多態(tài)性中的Overload和Override區(qū)別詳解

    java多態(tài)性中的Overload和Override區(qū)別詳解

    這篇文章主要介紹了java多態(tài)性中的Overload和Override區(qū)別詳解,重寫(Overriding)是父類與子類之間多態(tài)性的一種表現(xiàn),而重載(Overloading)是一個類中多態(tài)性的一種表現(xiàn),需要的朋友可以參考下
    2023-07-07

最新評論