谷粒商城分布式基礎(chǔ)圖converted_第1頁(yè)
谷粒商城分布式基礎(chǔ)圖converted_第2頁(yè)
谷粒商城分布式基礎(chǔ)圖converted_第3頁(yè)
谷粒商城分布式基礎(chǔ)圖converted_第4頁(yè)
谷粒商城分布式基礎(chǔ)圖converted_第5頁(yè)
已閱讀5頁(yè),還剩84頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

分布式基礎(chǔ)篇倉(cāng)儲(chǔ)服務(wù)訂單服務(wù)支付服務(wù)優(yōu)惠服務(wù)用戶服務(wù)商品服務(wù)秒殺服務(wù)購(gòu)物車服務(wù)檢索服務(wù)中央認(rèn)證服務(wù)后臺(tái)管理業(yè)務(wù)微服務(wù)群數(shù)據(jù)支撐層服務(wù)治理Nacos注冊(cè)中心Nacos配置中心Seata分布式事務(wù)Sentinel服務(wù)容錯(cuò)SpringCloud

Alibaba第三方服務(wù)物流短信金融身份認(rèn)證限流鑒權(quán)熔斷降級(jí)API網(wǎng)關(guān)過(guò)濾路由負(fù)載均衡數(shù)據(jù)層admin-vueshop-vueapp小程序SpringCloud應(yīng)用監(jiān)控Feign遠(yuǎn)程調(diào)用&負(fù)載均衡Gateway網(wǎng)關(guān)Sleuth服務(wù)追蹤Zipkin可視化追蹤網(wǎng)絡(luò)地址轉(zhuǎn)換-端口轉(zhuǎn)發(fā)VirtualboxWindowsRedis63796666222222MySQL33063333DockerDocker虛擬化容器技術(shù)。Docker基于鏡像,可以秒級(jí)啟動(dòng)各種容器。每一種容器都是一個(gè)完整的運(yùn)行環(huán)境,容器之間互相隔離。docker容器文件掛載與端口映射dockerMySQL容器Redis容器33066379MySQL3306Redis6379docker

run

-p

3306:3306

--name

mysql

\-v

/mydata/mysql/log:/var/log/mysql

\-v

/mydata/mysql/data:/var/lib/mysql

\-v

/mydata/mysql/conf:/etc/mysql

\-e

MYSQL_ROOT_PASSWORD=root\-d

mysql:5.7linux微服務(wù)-注冊(cè)中心、配置中心、網(wǎng)關(guān)優(yōu)惠服務(wù)倉(cāng)儲(chǔ)服務(wù)訂單服務(wù)商品服務(wù)支付服務(wù)用戶服務(wù)秒殺服務(wù)檢索服務(wù)購(gòu)物車服務(wù)注冊(cè)中心配置中心admin-vueAPI網(wǎng)關(guān)商品服務(wù)訂單服務(wù)路由過(guò)濾監(jiān)控限流...API網(wǎng)關(guān)API網(wǎng)關(guān)前端技術(shù)棧類比Javajdk8,9,10,11...框架Spring、SpringMVC工具idea,eclipse項(xiàng)目構(gòu)建maven,gradle依賴管理maven工具webstorm,vscode項(xiàng)目構(gòu)建webpack,gulp依賴管理npmJJaavvaaSSccrirpitpt

eess66,,77,,88......框框架JQJQuueer架ryy、、VVuue、e、RReeaacctt跨域跨域:指的是瀏覽器不能執(zhí)行其他網(wǎng)站的腳本。它是由瀏覽器的同源策略造成的,是瀏覽器對(duì)javascript施加的安全限制。同源策略:是指協(xié)議,域名,端口都要相同,其中有一個(gè)不同都會(huì)產(chǎn)生跨域;跨域流程瀏覽器服務(wù)器1、預(yù)檢請(qǐng)求,OPTIONS2、響應(yīng)允許跨域3、發(fā)送真實(shí)請(qǐng)求4、響應(yīng)數(shù)據(jù)解決跨域-(一)使用nginx部署為同一域nginxvue-admin動(dòng)態(tài)請(qǐng)求靜態(tài)請(qǐng)求adminproductcouponordergateway解決跨域-(二)配置當(dāng)次請(qǐng)求允許跨域1、添加響應(yīng)頭Access-Control-Allow-Origin:支持哪些來(lái)源的請(qǐng)求跨域Access-Control-Allow-Methods:支持哪些方法跨域Access-Control-Allow-Credentials:跨域請(qǐng)求默認(rèn)不包含cookie,設(shè)置為true可以包含

cookieAccess-Control-Expose-Headers:跨域請(qǐng)求暴露的字段CORS請(qǐng)求時(shí),XMLHttpRequest對(duì)象的getResponseHeader()方法只能拿到6個(gè)基本字段:

Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma。如果想拿到其他字段,就必須在Access-Control-Expose-Headers里面指定。Access-Control-Max-Age:表明該響應(yīng)的有效時(shí)間為多少秒。在有效時(shí)間內(nèi),瀏覽器無(wú)須為同一請(qǐng)求再次發(fā)起預(yù)檢請(qǐng)求。請(qǐng)注意,瀏覽器自身維護(hù)了一個(gè)最大有效時(shí)間,如果該首部字段的值超過(guò)了最大有效時(shí)間,將不會(huì)生效。文件存儲(chǔ)瀏覽器商品服務(wù)瀏覽器商品服務(wù)商品服務(wù)商品服務(wù)普通上傳的分布式情況瀏覽器普通上傳商品服務(wù)商品服務(wù)商品服務(wù)商品服務(wù)

文件存儲(chǔ)自建服務(wù)器云存儲(chǔ)搭建復(fù)雜,維護(hù)成本高,前期費(fèi)用高即開即用,無(wú)需維護(hù),按量收費(fèi)阿里云對(duì)象存儲(chǔ)-普通上傳方式阿里云對(duì)象存儲(chǔ)-服務(wù)端簽名后直傳【屬性分組-規(guī)格參數(shù)-銷售屬性-三級(jí)分類】關(guān)聯(lián)關(guān)系id

groupNamecatelogId1主體12

屏幕1idcatelogName1手機(jī)2冰箱id

attrNamecatelogId1

內(nèi)存12

像素1id

attrGroupIdattrId111212SPU-SKU-屬性SPU-SKU-屬性表idattrNamecatelogId1網(wǎng)絡(luò)12像素13內(nèi)存14容量1product_attr_value:商品屬性值表id

spuId

attrIdattrVal1123000萬(wàn)2113G;4G;5Gsku_sale_attr_value:sku銷售屬性值表idskuIdspuIdattrIdattrVal11136G2114128G32134G421464G屬性分組-效果采購(gòu)簡(jiǎn)要流程人工創(chuàng)建采購(gòu)需求庫(kù)存預(yù)警創(chuàng)建采購(gòu)需求采購(gòu)單人工合并系統(tǒng)定時(shí)合并采購(gòu)人員分配通知供應(yīng)商或自主采購(gòu)采購(gòu)單入庫(kù)添加庫(kù)存分布式基礎(chǔ)篇總結(jié)1、分布式基礎(chǔ)概念微服務(wù)、注冊(cè)中心、配置中心、遠(yuǎn)程調(diào)用、Feign、網(wǎng)關(guān)2、基礎(chǔ)開發(fā)SpringBoot2.0、SpringCloud、Mybatis-Plus、Vue組件化、阿里云對(duì)象存儲(chǔ)3、環(huán)境Vagrant、Linux、Docker、MySQL、Redis、逆向工程&人人開源4、開發(fā)規(guī)范數(shù)據(jù)校驗(yàn)JSR303、全局異常處理、全局統(tǒng)一返回、全局跨域處理枚舉狀態(tài)、業(yè)務(wù)狀態(tài)碼、VO與TO與PO劃分、邏輯刪除Lombok:@Data、@Slf4j分布式高級(jí)篇ElasticSearch概念-基礎(chǔ)概念ES集群microsoftgooglemegacorpemployeeproductemployeeproduct{id:1,name:”張三”,age:18}{id:2,name:”李四”,age:19}{id:3,name:”王五”,age:20}{id:1,name:”張三”,age:18}{id:2,name:”李四”,age:19}{id:3,name:”王五”,age:20}索引類型文檔屬性ElasticSearch概念-倒排索引詞記錄紅海1,2,3,4,5行動(dòng)1,2,3探索2,5特別3,5記錄篇4特工5分詞:將整句分拆為單詞保存的記錄紅海行動(dòng)探索紅海行動(dòng)紅海特別行動(dòng)紅海記錄篇特工紅海特別探索檢索:、紅海特工行動(dòng)?、紅海行動(dòng)?相關(guān)性得分:ElasticSearch7-去掉type概念關(guān)系型數(shù)據(jù)庫(kù)中兩個(gè)數(shù)據(jù)表示是獨(dú)立的,即使他們里面有相同名稱的列也不影響使用,但ES中不是這樣的。elasticsearch是基于Lucene開發(fā)的搜索引擎,而ES中不同type下名稱相同的

filed最終在Lucene中的處理方式是一樣的。兩個(gè)不同type下的兩個(gè)user_name,在ES同一個(gè)索引下其實(shí)被認(rèn)為是同一個(gè)filed,你必須在兩個(gè)不同的type中定義相同的filed映射。否則,不同type中的相同字段名稱就會(huì)在處理中出現(xiàn)沖突的情況,導(dǎo)致Lucene處理效率下降。去掉type就是為了提高ES處理數(shù)據(jù)的效率。Elasticsearch

7.xURL中的type參數(shù)為可選。比如,索引一個(gè)文檔不再要求提供文檔類型。Elasticsearch

8.x不再支持URL中的type參數(shù)。解決:將索引從多類型遷移到單類型,每種類型文檔一個(gè)獨(dú)立索引Es-數(shù)組的扁平化處理扁平化檢索(實(shí)際并沒(méi)有Alice

Smith,但是會(huì)檢索到)項(xiàng)目微服務(wù)nginx靜態(tài)資源網(wǎng)關(guān)網(wǎng)關(guān)網(wǎng)關(guān)商品服務(wù)視圖用戶服務(wù)視圖檢索服務(wù)視圖訂單服務(wù)視圖購(gòu)物車服務(wù)視圖動(dòng)靜分離靜:圖片,js、css等靜態(tài)資源(以實(shí)際文件存在的方式)動(dòng):服務(wù)器需要處理的請(qǐng)求Nginx+Windows搭建域名訪問(wèn)環(huán)境nginxwindows->hosts文件虛擬機(jī)ip虛擬機(jī)ip虛擬機(jī)ip虛擬機(jī)ip網(wǎng)關(guān)網(wǎng)關(guān)網(wǎng)關(guān)微服務(wù)群nginx代理給網(wǎng)關(guān)的時(shí)候,會(huì)丟失請(qǐng)求的host信息

proxy_set_header

Host

$host讓nginx幫我們進(jìn)行反向代理,所有來(lái)自原的請(qǐng)求,都轉(zhuǎn)到商品服務(wù)域名映射效果請(qǐng)求接口請(qǐng)求頁(yè)面nginx直接代理給網(wǎng)關(guān),網(wǎng)關(guān)判斷如果/api/****,轉(zhuǎn)交給對(duì)應(yīng)的服務(wù)器如果是滿足域名,轉(zhuǎn)交給對(duì)應(yīng)的服務(wù)正向代理與反向代理正向代理:如科學(xué)上網(wǎng),隱藏客戶端信息反向代理:屏蔽內(nèi)網(wǎng)服務(wù)器信息,負(fù)載均衡訪問(wèn)Nginx配置文件Nginx動(dòng)靜分離NginxGateway微服務(wù)Tomcat靜態(tài)資源文件動(dòng)態(tài)請(qǐng)求靜態(tài)請(qǐng)求1、以后將所有項(xiàng)目的靜態(tài)資源都應(yīng)該放在nginx里面

2、規(guī)則:/static/**所有請(qǐng)求都由nginx直接返回Nginx轉(zhuǎn)發(fā)效果nginxgatewayproductsearch本地緩存getCategorysgetBrandsgetProductgulimall-productcache分布式緩存-本地模式在分布式下的問(wèn)題gulimall-productgetCategorysgetBrandsgetProductcachegulimall-productgetCategorysgetBrandsgetProductcachegulimall-productgetCategorysgetBrandsgetProductcache分布式緩存gulimall-productgetCategorysgetBrandsgetProductgulimall-productgetCategorysgetBrandsgetProductgulimall-productgetCategorysgetBrandsgetProduct緩存中間件redis高并發(fā)下緩存失效問(wèn)題-緩存穿透緩存穿透:指查詢一個(gè)一定不存在的數(shù)據(jù),由于緩存是不命中,將去查詢數(shù)據(jù)庫(kù),但是數(shù)據(jù)庫(kù)也無(wú)此記錄,我們沒(méi)有將這次查詢的null寫入緩存,這將導(dǎo)致這個(gè)不存在的數(shù)據(jù)每次請(qǐng)求都要到存儲(chǔ)層去查詢,失去了緩存的意義風(fēng)險(xiǎn):利用不存在的數(shù)據(jù)進(jìn)行攻擊,數(shù)據(jù)庫(kù)瞬時(shí)壓力增大,最終導(dǎo)致崩潰緩存db100萬(wàn)100萬(wàn)解決:null結(jié)果緩存,并加入短暫過(guò)期時(shí)間高并發(fā)下緩存失效問(wèn)題-緩存雪崩緩存雪崩:緩存雪崩是指在我們?cè)O(shè)置緩存時(shí)key采用了相同的過(guò)期時(shí)間,導(dǎo)致緩存在某一時(shí)刻同時(shí)失效,請(qǐng)求全部轉(zhuǎn)發(fā)到DB,DB瞬時(shí)壓力過(guò)重雪崩。db緩存100萬(wàn)100萬(wàn)解決:原有的失效時(shí)間基礎(chǔ)上增加一個(gè)隨機(jī)值,比如1-5分鐘隨機(jī),這樣每一個(gè)緩存的過(guò)期時(shí)間的重復(fù)率就會(huì)降低,就很難引發(fā)集體失效的事件。高并發(fā)下緩存失效問(wèn)題-緩存擊穿緩存穿透:對(duì)于一些設(shè)置了過(guò)期時(shí)間的key,如果這些key可能會(huì)在某些時(shí)間點(diǎn)被超高并發(fā)地訪問(wèn),是一種非?!?/p>

熱點(diǎn)”

的數(shù)據(jù)。如果這個(gè)key在大量請(qǐng)求同時(shí)進(jìn)來(lái)前正好失效,那么所有對(duì)這個(gè)key的數(shù)據(jù)查詢都落到db,我們稱為緩存擊穿。解決:加鎖大量并發(fā)只讓一個(gè)去查,其他人等待,查到以后釋放鎖,其他人獲取到鎖,先查緩存,就會(huì)有數(shù)據(jù),不用去dbdb緩存100萬(wàn)100萬(wàn)分布式下如何加鎖?商品服 商品服 商品服 商品服 商品服 商品服 商品服 商品服務(wù)

務(wù)

務(wù)

務(wù)

務(wù)

務(wù)

務(wù)

務(wù)緩存DB本地鎖,只能鎖住當(dāng)前進(jìn)程,所以我們需要分布式鎖this鎖-時(shí)序問(wèn)題確認(rèn)緩存沒(méi)有查數(shù)據(jù)庫(kù)方法結(jié)束100萬(wàn)查緩存12結(jié)果放入緩存分布式鎖演進(jìn)-基本原理商品服 商品服 商品服 商品服 商品服 商品服 商品服 商品服務(wù)

務(wù)

務(wù)

務(wù)

務(wù)

務(wù)

務(wù)

務(wù)占鎖執(zhí)行業(yè)務(wù)釋放鎖我們可以同時(shí)去一個(gè)地方“占坑”,如果占到,就執(zhí)行邏輯。否則就必須等待,直到釋放鎖?!罢伎印笨梢匀edis,可以去數(shù)據(jù)庫(kù),可以去任何大家都能訪問(wèn)的地方。等待可以自旋的方式。獲取鎖,setnx(“l(fā)ock”,1111)結(jié)束沒(méi)獲取到鎖等待100ms重試問(wèn)題:1、setnx占好了位,業(yè)務(wù)代碼異?;蛘叱绦蛟陧?yè)面過(guò)程中宕機(jī)。沒(méi)有執(zhí)行刪除鎖邏輯,這就造成了死鎖解決:設(shè)置鎖的自動(dòng)過(guò)期,即使沒(méi)有刪除,會(huì)自動(dòng)刪除獲取鎖,setnx(“l(fā)ock”,1111)獲取到鎖執(zhí)行業(yè)務(wù)刪除鎖返回ok返回nullredis獲取鎖,setnx(“l(fā)ock”,1111)分布式鎖演進(jìn)-階段一分布式鎖演進(jìn)-階段二redis獲取鎖,setnx(“l(fā)ock”,1111)獲取到鎖刪除鎖結(jié)束返回ok沒(méi)獲取到鎖等待100ms重試返回null問(wèn)題:1、setnx設(shè)置好,正要去設(shè)置過(guò)期時(shí)間,宕機(jī)。又死鎖了。解決:設(shè)置過(guò)期時(shí)間和占位必須是原子的。redis支持使用setnx

ex命令設(shè)置過(guò)期時(shí)間執(zhí)行業(yè)務(wù)分布式鎖演進(jìn)-階段三redis獲取鎖,setnxex(“l(fā)ock”,1111,10s)刪除鎖結(jié)束返回ok等待100ms重試返回null獲取到鎖執(zhí)行業(yè)務(wù)沒(méi)獲取到鎖問(wèn)題:1、刪除鎖直接刪除???如果由于業(yè)務(wù)時(shí)間很長(zhǎng),鎖自己過(guò)期了,我們

直接刪除,有可能把別人正在持有的鎖刪除了。解決:占鎖的時(shí)候,值指定為uuid,每個(gè)人匹配是自己的鎖才刪除。分布式鎖演進(jìn)-階段四redis獲取鎖,setnxex(“l(fā)ock”,UUID,10s)獲取到鎖執(zhí)行業(yè)務(wù)結(jié)束返回ok沒(méi)獲取到鎖等待100ms重試返回null問(wèn)題:1、如果正好判斷是當(dāng)前值,正要?jiǎng)h除鎖的時(shí)候,鎖已經(jīng)過(guò)期,別人已經(jīng)設(shè)置到了新的值。那么我們刪除的是別人的鎖解決:刪除鎖必須保證原子性。使用redis+Lua腳本完成獲取當(dāng)前鎖的值,如果是之前uuid刪除鎖分布式鎖演進(jìn)-階段五-最終形態(tài)獲取到鎖結(jié)束沒(méi)獲取到鎖等待100ms重試redis獲取鎖,setnxex(“l(fā)ock”,UUID,10s)返回ok

返回null執(zhí)行業(yè)務(wù)腳本解鎖-保證原子性String

script

=

"if

redis.call('get',

KEYS[1])

==

ARGV[1]

then

returnredis.call('del',

KEYS[1])

else

return

0

end";保證加鎖【占位+過(guò)期時(shí)間】和刪除鎖【判斷+刪除】的原子性。更難的事情,鎖的自動(dòng)續(xù)期緩存數(shù)據(jù)一致性-雙寫模式寫數(shù)據(jù)庫(kù)寫緩存數(shù)據(jù)更新這是暫時(shí)性的臟數(shù)據(jù)問(wèn)題,但是在數(shù)據(jù)穩(wěn)定,緩存過(guò)期以后,又能得到最新的正確數(shù)據(jù)讀到的最新數(shù)據(jù)有延遲:最終一致性由于卡頓等原因,導(dǎo)致寫緩存2在最前,寫緩存1在后面就出現(xiàn)了不一致臟數(shù)據(jù)問(wèn)題:寫數(shù)據(jù)庫(kù)-1寫緩存-1寫數(shù)據(jù)庫(kù)-2寫緩存-2關(guān)鍵點(diǎn)關(guān)鍵點(diǎn)緩存數(shù)據(jù)一致性-失效模式寫數(shù)據(jù)庫(kù)數(shù)據(jù)更新寫db-1刪緩存寫db-2刪緩存讀緩存讀db-1更新緩存關(guān)鍵點(diǎn)關(guān)鍵點(diǎn)刪緩存我們系統(tǒng)的一致性解決方案:1、緩存的所有數(shù)據(jù)都有過(guò)期時(shí)間,數(shù)據(jù)過(guò)期下一次查詢觸發(fā)主動(dòng)更新2、讀寫數(shù)據(jù)的時(shí)候,加上分布式的讀寫鎖。經(jīng)常寫,經(jīng)常讀緩存數(shù)據(jù)一致性-解決方案無(wú)論是雙寫模式還是失效模式,都會(huì)導(dǎo)致緩存的不一致問(wèn)題。即多個(gè)實(shí)例同時(shí)更新會(huì)出事。怎么辦?1、如果是用戶緯度數(shù)據(jù)(訂單數(shù)據(jù)、用戶數(shù)據(jù)),這種并發(fā)幾率非常小,不用考慮這個(gè)問(wèn)題,緩存數(shù)據(jù)加上過(guò)期時(shí)間,每隔一段時(shí)間觸發(fā)讀的主動(dòng)更新即可2、如果是菜單,商品介紹等基礎(chǔ)數(shù)據(jù),也可以去使用canal訂閱binlog的方式。3、緩存數(shù)據(jù)+過(guò)期時(shí)間也足夠解決大部分業(yè)務(wù)對(duì)于緩存的要求。4、通過(guò)加鎖保證并發(fā)讀寫,寫寫的時(shí)候按順序排好隊(duì)。讀讀無(wú)所謂。所以適合使用讀寫鎖。(業(yè)務(wù)不關(guān)心臟數(shù)據(jù),允許臨時(shí)臟數(shù)據(jù)可忽略);總結(jié):我們能放入緩存的數(shù)據(jù)本就不應(yīng)該是實(shí)時(shí)性、一致性要求超高的。所以緩存數(shù)據(jù)的時(shí)候加上過(guò)期時(shí)間,保證每天拿到當(dāng)前最新數(shù)據(jù)即可。我們不應(yīng)該過(guò)度設(shè)計(jì),增加系統(tǒng)的復(fù)雜性遇到實(shí)時(shí)性、一致性要求高的數(shù)據(jù),就應(yīng)該查數(shù)據(jù)庫(kù),即使慢點(diǎn)。緩存數(shù)據(jù)一致性-解決-Canal使用Canal更新緩存使用Canal解決數(shù)據(jù)異構(gòu)商城檢索-檢索條件分析1、全文檢索:skuTitle-》keyword2、排序:saleCount(銷量)、hotScore(熱度分)、skuPrice(價(jià)格)3、過(guò)濾:hasStock、skuPrice區(qū)間、brandId、catalog3Id、attrs4、聚合:attrs完整查詢參數(shù)keyword=小米

&sort=saleCount_desc/asc&hasStock=0/1&skuPrice=400_1900&brandId=1&catalog3Id=1&attrs=1_3G:4G:5G&attrs=2_驍龍845&attrs=4_高清屏MD5&MD5鹽值加密MD5Message

Digest

algorithm

5,信息摘要算法壓縮性:任意長(zhǎng)度的數(shù)據(jù),算出的MD5值長(zhǎng)度都是固定的。容易計(jì)算:從原數(shù)據(jù)計(jì)算出MD5值很容易??剐薷男裕簩?duì)原數(shù)據(jù)進(jìn)行任何改動(dòng),哪怕只修改1個(gè)字節(jié),所得到的MD5值都有很大區(qū)別。強(qiáng)抗碰撞:想找到兩個(gè)不同的數(shù)據(jù),使它們具有相同的MD5值,是非常困難的。不可逆加鹽:通過(guò)生成隨機(jī)數(shù)與MD5生成字符串進(jìn)行組合數(shù)據(jù)庫(kù)同時(shí)存儲(chǔ)MD5值與salt值。驗(yàn)證正確性時(shí)使用salt進(jìn)行MD5即可OAuth2.0clientCSDN等第三方應(yīng)用resource

owner本人Authorization

ServerQQ服務(wù)器Resource

ServerQQ服務(wù)器1、向用戶申請(qǐng)請(qǐng)求認(rèn)證2、用戶授權(quán)(輸入自己的

社交賬號(hào)密碼)3、使用上步授權(quán),進(jìn)行認(rèn)證4、認(rèn)證通過(guò),返回訪問(wèn)令牌5、使用訪問(wèn)令牌,獲取開放保護(hù)信息6、認(rèn)證令牌,返回受保護(hù)信息1、使用Code換取AccessToken,Code只能用一次2、同一個(gè)用戶的accessToken一段時(shí)間是不會(huì)變化的,即使多次獲取Session共享問(wèn)題-session原理瀏覽器服務(wù)器1、第一次訪問(wèn)服務(wù)器(進(jìn)行登錄)2、登錄成功用戶保存到

session中2、命令瀏覽器保存一個(gè)jsessionid=123的cookie123user=v,k=v234k=v,k=v567sessionManager3、以后訪問(wèn)會(huì)帶上cookie。jsessionid=1234、瀏覽器關(guān)閉,清除會(huì)話cookie5、下次訪問(wèn),沒(méi)有jsessionid,再創(chuàng)建一個(gè),進(jìn)入步驟1問(wèn)題:1、不能跨不同域名共享Session共享問(wèn)題-分布式下session共享問(wèn)題瀏覽器會(huì)員服務(wù)auth.gulimall會(huì)員服務(wù)auth.gulimall同一個(gè)服務(wù),復(fù)制多份,session不同步問(wèn)題瀏覽器會(huì)員服務(wù)訂單服務(wù)不同服務(wù),session不能共享問(wèn)題Session共享問(wèn)題解決-session復(fù)制優(yōu)點(diǎn)缺點(diǎn)web-server(Tomcat)原生支持,只需要修改配置文件session同步需要數(shù)據(jù)傳輸,占用大量網(wǎng)絡(luò)帶寬,降低了服務(wù)器群的業(yè)務(wù)處理能力任意一臺(tái)web-server保存的數(shù)據(jù)都是所有web-server的session總和,受到內(nèi)存限制無(wú)法水平擴(kuò)展更多的web-server大型分布式集群情況下,由于所有web-server都全量保存數(shù)據(jù),所以此方案不可取。Session共享問(wèn)題解決-客戶端存儲(chǔ)優(yōu)點(diǎn)缺點(diǎn)服務(wù)器不需存儲(chǔ)session,用戶保存自己的session信息到cookie中。節(jié)省服務(wù)端資源都是缺點(diǎn),這只是一種思路。具體如下:每次http請(qǐng)求,攜帶用戶在cookie中的完整信息,浪費(fèi)網(wǎng)絡(luò)帶寬session數(shù)據(jù)放在cookie中,cookie有長(zhǎng)度限制

4K,不能保存大量信息session數(shù)據(jù)放在cookie中,存在泄漏、篡改、竊取等安全隱患這種方式不會(huì)使用。Session共享問(wèn)題解決-hash一致性缺點(diǎn)優(yōu)點(diǎn):只需要改nginx配置,不需要修改應(yīng)用代碼負(fù)載均衡,只要hash屬性的值分布是均勻的,多臺(tái)web-server的負(fù)載是均衡的可以支持web-server水平擴(kuò)展(session同步法是不行的,受內(nèi)存限制)session還是存在web-server中的,所以web-server重啟可能導(dǎo)致部分session丟失,影響業(yè)務(wù),如部分用戶需要重新登錄如果web-server水平擴(kuò)展,rehash后session重新分布,也會(huì)有一部分用戶路由不到正確的session但是以上缺點(diǎn)問(wèn)題也不是很大,因?yàn)閟ession本來(lái)都是有有效期的。所以這兩種反向代理的方式可以使用Session共享問(wèn)題解決-統(tǒng)一存儲(chǔ)不足優(yōu)點(diǎn):沒(méi)有安全隱患可以水平擴(kuò)展,數(shù)據(jù)庫(kù)/緩存水平切分即可web-server重啟或者擴(kuò)容都不會(huì)有

session丟失增加了一次網(wǎng)絡(luò)調(diào)用,并且需要修改應(yīng)用代碼;如將所有的getSession方法替換為從Redis查數(shù)據(jù)的方式。redis獲取數(shù)據(jù)比內(nèi)存慢很多上面缺點(diǎn)可以用SpringSession完美解決Session共享問(wèn)題解決-不同服務(wù),子域session共享jsessionid這個(gè)cookie默認(rèn)是當(dāng)前系統(tǒng)域名的。當(dāng)我們分拆服務(wù),不同域名部署的時(shí)候,我們可以使用如下解決方案;瀏覽器會(huì)員服務(wù)訂單服務(wù)商品服務(wù).guli

jsessionid=1redis存儲(chǔ)sessionSpringSession核心原理SessionRepositoryFilter包裝原始請(qǐng)求對(duì)象。包裝后的對(duì)象應(yīng)用到了我們后面的整個(gè)執(zhí)行鏈HttpSession

session1

=

request.getSession();多系統(tǒng)-單點(diǎn)登錄尚硅谷谷粒學(xué)院-在線教育谷粒商城-電商系統(tǒng)谷?;I-眾籌系統(tǒng)認(rèn)證中心SSO/xxl-sso-server

登錄服務(wù)器8080/xxl-sso-web-sample-springboot

項(xiàng)目1/xxl-sso-web-sample-springboot

項(xiàng)目280818082核心:三個(gè)系統(tǒng)即使域名不一樣,想辦法給三個(gè)系統(tǒng)同步同一個(gè)用戶的票據(jù);、中央認(rèn)證服務(wù)器;、其他系統(tǒng),想要登錄去登錄,登錄成功跳轉(zhuǎn)回來(lái)3)、只要有一個(gè)登錄,其他都不用登錄4)、全系統(tǒng)統(tǒng)一一個(gè)sso-sessionid;所有系統(tǒng)可能域名都不相同購(gòu)物車數(shù)據(jù)結(jié)構(gòu)cart:1cart:271{skuId:7,title:”小米”,price:2999}{skuId:1,title:”華為”,price:2999}2311{skuId:23,title:”小米9”,price:2999}{skuId:11,title:”華為P30”,price:2999}Map<String

k1,Map<Stringk2,CartItemInfo>>k1:標(biāo)識(shí)每一個(gè)用戶的購(gòu)物車k2:購(gòu)物項(xiàng)的商品id在redis中key:用戶標(biāo)識(shí)value:Hash(k:商品id,v:購(gòu)物項(xiàng)詳情)ThreadLocal-同一個(gè)線程共享數(shù)據(jù)controller攔截器servicedaocontroller攔截器servicedaocontroller攔截器servicedaoMap<Thread,Object>

threadLocalRabbitMQ概念Publisher生產(chǎn)者M(jìn)essage【b(rk)】頭+體route-key:路由鍵Exchange交換機(jī)Exchange負(fù)責(zé)接收消息Queue隊(duì)列Queue存儲(chǔ)消息QueueBroker消息代理綁定Bindingabc消費(fèi)者【用戶】Consumer訂

庫(kù)存1個(gè)客戶端只會(huì)建立一條連接channal信Connection

道建立連接1條長(zhǎng)連接,很多channal虛擬主機(jī)VHost/java虛擬主機(jī)VHost/phpFeign遠(yuǎn)程調(diào)用丟失請(qǐng)求頭問(wèn)題老請(qǐng)求order服務(wù)瀏覽器發(fā)送

請(qǐng)求頭自動(dòng)帶了cookiecart服務(wù)feign遠(yuǎn)程調(diào)用這個(gè)請(qǐng)求沒(méi)有任何請(qǐng)求頭創(chuàng)建一個(gè)新request沒(méi)有請(qǐng)求頭,cart認(rèn)為沒(méi)登錄加上feign遠(yuǎn)程調(diào)用的請(qǐng)求攔截器遠(yuǎn)程調(diào)用Cookie等請(qǐng)求頭必須和老請(qǐng)求同步過(guò)來(lái)Feign異步情況丟失上下文問(wèn)題老請(qǐng)求order服務(wù)ThreadLocalOrderServiceaddresscart老請(qǐng)求order服務(wù)addresscartOrderService

72ThreadLocal101102interceptorinterceptorThreadLocalThreadLocal分布式事務(wù)事務(wù)保證:1、訂單服務(wù)異常,庫(kù)存鎖定不運(yùn)行,全部回滾,撤銷操作2、庫(kù)存服務(wù)事務(wù)自治,鎖定失敗全部回滾,訂單感受到,繼續(xù)回滾3、庫(kù)存服務(wù)鎖定成功了,但是網(wǎng)絡(luò)原因返回?cái)?shù)據(jù)途中問(wèn)題?4、庫(kù)存服務(wù)鎖定成功了,庫(kù)存服務(wù)下面的邏輯發(fā)生故障,訂單回滾了,怎么處理?利用消息隊(duì)列實(shí)現(xiàn)最終一致庫(kù)存服務(wù)鎖定成功后發(fā)給消息隊(duì)列消息(當(dāng)前庫(kù)存工作單),過(guò)段時(shí)間自動(dòng)解鎖,解鎖時(shí)先查詢訂單的支付狀態(tài)。解鎖成功修改庫(kù)存工作單詳情項(xiàng)狀態(tài)為已解鎖1、遠(yuǎn)程服務(wù)假失?。哼h(yuǎn)程服務(wù)其實(shí)成功了,由于網(wǎng)絡(luò)故障等沒(méi)有返回導(dǎo)致:訂單回滾,庫(kù)存卻扣減2、遠(yuǎn)程服務(wù)執(zhí)行完成,下面的其他方法出現(xiàn)問(wèn)題導(dǎo)致:已執(zhí)行的遠(yuǎn)程請(qǐng)求,肯定不能回滾庫(kù)存服務(wù)鎖定庫(kù)存訂單服務(wù)下訂單用戶服務(wù)扣減積分分布式事務(wù)延時(shí)隊(duì)列場(chǎng)景下訂單關(guān)閉訂單30min未支付鎖庫(kù)存解鎖庫(kù)存40min后,檢查訂單不存在或者被取消定時(shí)任務(wù)的時(shí)效性問(wèn)題01306031被掃到訂單釋放&庫(kù)存解鎖庫(kù)存鎖定訂單創(chuàng)建成功訂單解鎖庫(kù)存解鎖庫(kù)存鎖定訂單創(chuàng)建成功訂單解鎖庫(kù)存解鎖機(jī)器卡頓,消息延遲...加密-對(duì)稱加密明文密文密鑰A明文密鑰A發(fā)送方密文接受方DES、3DES(TripleDES)、AES、RC2、RC4、RC5和Blowfish等加密解密使用同一把鑰匙加密-非對(duì)稱加密明文密文密鑰A文密鑰B明發(fā)送方密文接受方RSA、Elgamal等加密解密使用不同鑰匙密鑰C密鑰D內(nèi)網(wǎng)穿透我的電腦別人電腦京東商城別人電腦我的電腦QQ服務(wù)器QQQQ內(nèi)網(wǎng)穿透別人電腦我的電腦內(nèi)網(wǎng)穿透服務(wù)商服務(wù)商軟件分配一個(gè)域名其他電腦服務(wù)商軟件分配一個(gè)域名內(nèi)網(wǎng)穿透聯(lián)調(diào)我的電腦:80Host文件為虛擬機(jī)ip路徑精確匹配default網(wǎng)關(guān)集群配置/pay轉(zhuǎn)發(fā)到網(wǎng)關(guān)集群手動(dòng)設(shè)置header為order域名請(qǐng)求Host頭不匹配Nginxguli

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論