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

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

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

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

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

session有什么用

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

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

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

分布式session一致性

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

方案一:客戶端存儲(chǔ)

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

缺點(diǎn)

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

cookie存儲(chǔ)大小、類型存在限制

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

方案二:session復(fù)制

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

存在的問題

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

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

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

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

方案三:session綁定:

Nginx介紹:

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

Nginx能做什么:

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

如何使用nginx進(jìn)行session綁定

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

缺點(diǎn):

容易造成單點(diǎn)故障,如果有一臺(tái)服務(wù)器宕機(jī),那么該臺(tái)服務(wù)器上的session信息將會(huì)丟失

前端不能有負(fù)載均衡,如果有,session綁定將會(huì)出問題

優(yōu)點(diǎn):

配置簡單

方案四:基于redis存儲(chǔ)session方案

基于redis存儲(chǔ)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ù)庫索引(默認(rèn)是0)
spring.redis.database=0
spring.redis.host=127.0.0.1
spring.redis.port=6379
#默認(rèn)密碼為空
spring.redis.password=
#連接池最大連接數(shù)(負(fù)數(shù)表示沒有限制)
spring.redis.jedis.pool.max-active=1000
#連接池最大阻塞等待時(shí)間(負(fù)數(shù)表示沒有限制)
spring.redis.jedis.pool.max-wait=-1ms
#連接池中的最大空閑連接
spring.redis.jedis.pool.max-idle=10
#連接池中的最小空閑連接
spring.redis.jedis.pool.min-idle=2
#連接超時(shí)時(shí)間(毫秒)
spring.redis.timeout=500ms

優(yōu)點(diǎn):

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

缺點(diǎn):

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

總結(jié)

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

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

相關(guān)文章

最新評(píng)論