最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

session有什么用

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

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

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

分布式session一致性

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

方案一:客戶端存儲

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

缺點(diǎn)

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

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

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

方案二:session復(fù)制

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

存在的問題

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

服務(wù)器之間的session信息都是同步的,任何一臺服務(wù)器宕機(jī)的時(shí)候不會影響另外服務(wù)器中session的狀態(tài),配置相對簡單
Tomcat內(nèi)部已經(jīng)支持分布式架構(gòu)開發(fā)管理機(jī)制,可以對tomcat修改配置來支持session復(fù)制,在集群中的幾臺服務(wù)器之間同步session對象,使每臺服務(wù)器上都保存了所有用戶的session信息,這樣任何一臺本機(jī)宕機(jī)都不會導(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ù)器(動靜代理)、正向代理

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

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

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

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

配置簡單

方案四:基于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ù)庫索引(默認(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é)

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

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

相關(guān)文章

  • Maven項(xiàng)目分析剔除無用jar引用的方法步驟

    Maven項(xiàng)目分析剔除無用jar引用的方法步驟

    這篇文章主要介紹了Maven項(xiàng)目分析剔除無用jar引用的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • 從?JVM?中深入探究?Synchronized作用及原理

    從?JVM?中深入探究?Synchronized作用及原理

    這篇文章主要為大家介紹了從?JVM?中深入探究?Synchronized作用及原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • SpringData JPA中@OneToMany和@ManyToOne的用法詳解

    SpringData JPA中@OneToMany和@ManyToOne的用法詳解

    這篇文章主要介紹了SpringData JPA中@OneToMany和@ManyToOne的用法詳解,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • java網(wǎng)絡(luò)編程之識別示例 獲取主機(jī)網(wǎng)絡(luò)接口列表

    java網(wǎng)絡(luò)編程之識別示例 獲取主機(jī)網(wǎng)絡(luò)接口列表

    一個(gè)客戶端想要發(fā)起一次通信,先決條件就是需要知道運(yùn)行著服務(wù)器端程序的主機(jī)的IP地址是多少。然后我們才能夠通過這個(gè)地址向服務(wù)器發(fā)送信息。
    2014-01-01
  • 使用Spring源碼報(bào)錯(cuò)java:找不到類 InstrumentationSavingAgent的問題

    使用Spring源碼報(bào)錯(cuò)java:找不到類 InstrumentationSavingAgent的問題

    這篇文章主要介紹了使用Spring源碼報(bào)錯(cuò)java:找不到類 InstrumentationSavingAgent的問題,本文給大家分享解決方法,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Java emoji持久化mysql過程詳解

    Java emoji持久化mysql過程詳解

    這篇文章主要介紹了Java emoji持久化mysql過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • java利用POI讀取excel文件的方法

    java利用POI讀取excel文件的方法

    這篇文章主要介紹了java利用POI讀取excel文件的方法,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下
    2020-12-12
  • @Valid 無法校驗(yàn)List<E>的問題

    @Valid 無法校驗(yàn)List<E>的問題

    這篇文章主要介紹了@Valid 無法校驗(yàn)List<E>的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • springboot?vue接口測試定義編輯功能的實(shí)現(xiàn)

    springboot?vue接口測試定義編輯功能的實(shí)現(xiàn)

    這篇文章主要為大家介紹了springboot?vue接口測試定義編輯功能的實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • Spring Boot優(yōu)雅使用RocketMQ的方法實(shí)例

    Spring Boot優(yōu)雅使用RocketMQ的方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于Spring Boot優(yōu)雅使用RocketMQ的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12

最新評論

南木林县| 南宫市| 富锦市| 西青区| 武川县| 连云港市| 富平县| 化德县| 洛川县| 青岛市| 安化县| 邵阳县| 万州区| 常宁市| 耿马| 沂水县| 若羌县| 怀安县| 甘泉县| 临漳县| 全州县| 商洛市| 荆州市| 长子县| 尉犁县| 蓬溪县| 侯马市| 原阳县| 绥芬河市| 林周县| 丘北县| 乌苏市| 偏关县| 金阳县| 来凤县| 凌源市| 连云港市| 昌吉市| 修水县| 蓝山县| 深圳市|