如何防止接口重復(fù)請(qǐng)求 什么時(shí)候需要分布式鎖?
什么時(shí)候需要分布式鎖?首先,我們需要知道在非分布式環(huán)境中,什么可以用鎖來(lái)解決?多線程環(huán)境,共享資源線程安全問(wèn)題!此時(shí),共享資源通常在一臺(tái)機(jī)器的多線程中競(jìng)爭(zhēng)。從JAVA內(nèi)存模型的角度來(lái)看,我們可以通過(guò)鎖
什么時(shí)候需要分布式鎖?
首先,我們需要知道在非分布式環(huán)境中,什么可以用鎖來(lái)解決?
多線程環(huán)境,共享資源線程安全問(wèn)題!此時(shí),共享資源通常在一臺(tái)機(jī)器的多線程中競(jìng)爭(zhēng)。從JAVA內(nèi)存模型的角度來(lái)看,我們可以通過(guò)鎖定對(duì)象、方法和代碼塊來(lái)避免共享資源的競(jìng)爭(zhēng)
!1,生成全局ID;
2,修改全局配置文件;
3,分布式服務(wù)中的seckill;
4,分布式環(huán)境中的重復(fù)提交;
1,使用數(shù)據(jù)庫(kù)的唯一主鍵實(shí)現(xiàn)鎖定
!2、使用redis指令:通常使用setnx方法,incr方法實(shí)現(xiàn)
3、使用zookeeper:使用API生成臨時(shí)節(jié)點(diǎn)實(shí)現(xiàn)鎖定
有多少互聯(lián)網(wǎng)系統(tǒng)確實(shí)需要使用分布式架構(gòu)?
更不用說(shuō)互聯(lián)網(wǎng)的實(shí)際發(fā)展了,現(xiàn)在即使是面試新生,分布式的問(wèn)題基本上都是不可避免的。
目前,分布式體系結(jié)構(gòu)具有高并發(fā)性和高穩(wěn)定性的特點(diǎn)。
高并發(fā)意味著當(dāng)單節(jié)點(diǎn)服務(wù)器的性能達(dá)到瓶頸時(shí),可以通過(guò)引入nginx和部署多個(gè)服務(wù)器節(jié)點(diǎn)來(lái)擴(kuò)展,以增加系統(tǒng)的吞吐量。這就是1*n=n的意思。
高穩(wěn)定性意味著,如果單個(gè)或部分節(jié)點(diǎn)由于不可預(yù)知的原因發(fā)生故障,則不會(huì)影響系統(tǒng)的整體功能服務(wù),即M-N>0(M>N)。對(duì)于用戶來(lái)說(shuō),系統(tǒng)可用性始終是最重要的。
綜上所述,根據(jù)我個(gè)人的經(jīng)驗(yàn),目前無(wú)論是市場(chǎng)級(jí)產(chǎn)品還是公司級(jí)產(chǎn)品,只要項(xiàng)目團(tuán)隊(duì)有對(duì)服務(wù)質(zhì)量的追求,他們都會(huì)以不同的方式向分布式架構(gòu)發(fā)展。
另外,對(duì)于一個(gè)功能不是很復(fù)雜和龐大的項(xiàng)目組來(lái)說(shuō),只要在開發(fā)設(shè)計(jì)階段一開始就及時(shí)引入Memcache或redis作為數(shù)據(jù)緩存,而不是使用服務(wù)器的內(nèi)存,后期切換到分布式系統(tǒng)的過(guò)程就會(huì)非??臁?/p>
以上是我個(gè)人的觀點(diǎn)。歡迎在下面的評(píng)論區(qū)與我交流。
我是蘇思亮,來(lái)自bat的java開發(fā)工程師。我每天分享科技知識(shí)。歡迎您關(guān)注我,與我共同進(jìn)步。