日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java中单体应用锁的局限性&分布式锁

發(fā)布時間:2024/1/16 java 33 coder
生活随笔 收集整理的這篇文章主要介紹了 Java中单体应用锁的局限性&分布式锁 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

互聯(lián)網(wǎng)系統(tǒng)架構(gòu)的演進

在互聯(lián)網(wǎng)系統(tǒng)發(fā)展之初,系統(tǒng)比較簡單,消耗資源小,用戶訪問量也比較少,我們只部署一個Tomcat應用就可以滿足需求。系統(tǒng)架構(gòu)圖如下:

一個Tomcat可以看作是一個JVM進程,當大量的請求并發(fā)到達系統(tǒng)時,所有的請求都落在這唯一的一個Tomcat上,如果某些請求方法是需要加鎖的,比如:秒殺扣減庫存,是可以滿足需求的,這和我們前面章節(jié)所講的內(nèi)容是一樣的。但是隨著訪問量的增加,導致一個Tomcat難以支撐,這時我們就要集群部署Tomcat,使用多個Tomcat共同支撐整個系統(tǒng)。系統(tǒng)架構(gòu)圖如下:

上圖中,我們部署了兩個Tomcat,共同支撐系統(tǒng)。當一個請求到達系統(tǒng)時,首先會經(jīng)過Nginx,Nginx主要是做負載轉(zhuǎn)發(fā)的,它會根據(jù)自己配置的負載均衡策略將請求轉(zhuǎn)發(fā)到其中的一個Tomcat中。當大量的請求并發(fā)訪問時,兩個Tomcat共同承擔所有的訪問量,這時,我們同樣在秒殺扣減庫存的場景中,使用單體應用鎖,還能夠滿足要求嗎?

單體應用鎖的局限性

如上圖所示,在整個系統(tǒng)架構(gòu)中,存在兩個Tomcat,每個Tomcat是 -個JVM。在進行秒殺業(yè)務的時候,由于大家都在搶購秒殺商品,大量的請求同時到達系統(tǒng),通過Nginx分 發(fā)到兩個Tomcat上。我們通過一個極端的案例場景, 可以更好地理解單體應用鎖的局限性。假如,秒殺商品的數(shù)量只有1個,這時,這些大量的請求當中,只有一個請求可以成功的搶到這個商品,這就需要在扣減庫存的方法.上加鎖,扣減庫存的動作只能一個一個去執(zhí)行,而不能同時去執(zhí)行如果同時執(zhí)行,這1個商品可能同時被多個人搶到,從而產(chǎn)生超賣現(xiàn)象。加鎖之后,扣減庫存的動作一個一個去執(zhí)行,凡是將庫存扣減為負數(shù)的,都拋出異常,提示該用戶沒有搶到商品。通過加鎖看似解決了秒殺的問題,但是事實,上真的是這樣嗎?

我們看到系統(tǒng)中存在兩個Tomcat,我們加的鎖是JDK提供的鎖,這種鎖只能在一個JVM下起作用,也就是在一個Tomcat內(nèi)是沒有問題的。當存在兩個或兩個以上的Tomcat時,大量的并發(fā)請求分散到不同的Tomcat_上,在每一一個Tomcat中都可以防止并發(fā)的產(chǎn)生,但是在多個Tomcat之間,每個Tomcat中獲得鎖的這個請求,又產(chǎn)生了并發(fā)從而產(chǎn)生超賣現(xiàn)象。這也就是單體應用鎖的局限性,它只能在一個JVM內(nèi)加鎖,而不能從這個應用層面去加鎖。

那么這個問題如何解決呢?這就需要使用分布式鎖了,在整個應用層面去加鎖。什么是分布式鎖呢?我們怎么去使用分布式鎖呢?

什么是分布式鎖

在說分布式鎖之前,我們看一看單體應用鎖的特點,單體應用鎖是在一個JVM進程內(nèi)有效,無法跨JVM、跨進程。那么分布式鎖的定義就出來了,分布式鎖就是可以跨越多個JVM、跨越多個進程的鎖,這種鎖就叫做分布式鎖。

分布式鎖的設計思路

在上圖中,由于Tomcat是由Java啟動的,所以每個Tomcat可以看成一個JVM,JVM內(nèi)部的鎖是無法跨越多個進程的。所以,我們要實現(xiàn)分布式鎖,我們只能在這些JVM之外去尋找,通過其他的組件來實現(xiàn)分布式鎖。系統(tǒng)的架構(gòu)如圖所示:

兩個Tomcat通過第三方的組件實現(xiàn)跨JVM、跨進程的分布式鎖。這就是分布式鎖的解決思路,找到所有JVM可以共同訪問的第三方組件,通過第三方組件實現(xiàn)分布式鎖。

目前存在的分布式的方案

分布式鎖都是通過第三方組件來實現(xiàn)的,目前比較流行的分布式鎖的解決方案有:

  • 數(shù)據(jù)庫,通過數(shù)據(jù)庫可以實現(xiàn)分布式鎖,但是在高并發(fā)的情況下對數(shù)據(jù)庫壓力較大,所以很少使用。
  • Redis,借助Redis也可以實現(xiàn)分布式鎖,而且Redis的Java客戶端種類很多,使用的方法也不盡相同。
  • Zookeeper,Zookeeper也可以實現(xiàn)分布式鎖,同樣Zookeeper 也存在多個Java客戶端,使用方法也不相同。

本人最近搭建了程序員專屬的編程資料個人網(wǎng)站:程序員波特,主要記錄Java相關技術系列教程,面試題的收集和整理等,讓上班摸魚的你,不再無聊。

總結(jié)

以上是生活随笔為你收集整理的Java中单体应用锁的局限性&分布式锁的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日本免费网址 | 中文字幕一区二区三区人妻电影 | 国产精品丝袜视频 | 成人久久免费 | 青草青在线 | sm国产在线调教视频 | 国产乱乱| 国产中文字幕乱人伦在线观看 | 国内精品毛片 | 日韩免费三级 | 色狠狠一区二区三区 | 日本美女操 | 日韩成人激情视频 | 91丨porny丨首页 | 欧美老熟妇乱大交xxxxx | 欧美日韩人妻精品一区二区 | 国产精品1区2区 | 欧美激情成人在线 | 成人免费无遮挡无码黄漫视频 | 精品人妻一区二区三区四区五区 | 91精品国产高清91久久久久久 | 最新在线观看av | 美女被日网站 | 麻豆www.| 91福利视频在线 | 午夜久久久久久 | 齐天大性床战铁扇公主 | 国产激情一区二区三区视频免樱桃 | 老熟女毛茸茸浓毛 | 欧美天堂一区 | 亚洲欧洲精品一区二区 | 国产精品久久久久久久天堂 | 亚洲视频免费在线播放 | 波多野结衣理论片 | 国产v片在线观看 | 在线免费国产 | 午夜色av | 日本大尺度电影免费观看全集中文版 | 国产爆乳无码一区二区麻豆 | 打屁股疼的撕心裂肺的视频 | 亚洲黄色网页 | 国产毛片久久久久久国产毛片 | 少妇高潮网站 | 久久91 | 亚洲无人区码一码二码三码的含义 | 久久人人爽人人爽人人片av高清 | 91视频进入| 性生活免费网站 | 亚洲少妇视频 | 国产黄频在线观看 | 激情777 | 激情午夜婷婷 | www.黄色在线观看 | 成人av在线一区二区 | 国产精品69毛片高清亚洲 | 久久精品视频18 | 中文在线字幕免费观 | 欧美性大战久久久久久 | 亚洲成人www | 在线你懂得 | www.自拍偷拍 | 国产在线视频一区 | 深夜福利在线播放 | www.亚洲成人 | 欧美激情自拍偷拍 | 性生活视频网站 | 成熟的女同志hd | 国产不卡在线播放 | 人妻视频一区二区 | 成人欧美一区二区三区 | 国产精品美女久久久久久 | 中文字幕乱码视频 | 亚洲激情影院 | 黄色小视频链接 | av不卡一区二区 | 亚洲一区二区视频网站 | 成年人免费观看视频网站 | 成人欧美视频在线观看 | 双性人妖互交localhost | jzzjzzjzz亚洲成熟少妇 | 9999av| 国产毛片久久久久久国产毛片 | 台湾swag在线观看 | 韩国av免费观看 | 亚洲精品视频免费 | 国产日韩在线免费观看 | 国产电影免费观看高清完整版视频 | 亚洲永久无码精品一区二区 | 快射视频网站 | 亚洲综合色吧 | 麻豆国产在线播放 | 在线视频免费观看你懂的 | 午夜少妇 | 91破处视频 | 91在线第一页 | 五月天婷婷综合网 | 麻豆免费视频 | 国产高清一区 | 男人都懂的网站 |