setnx分布式鎖原理 本人本科大二,隨手可以寫java網(wǎng)課上的倉儲系統(tǒng)(無法聯(lián)網(wǎng),圖形化界面,sql),在業(yè)內(nèi)算什么水平呢?
本人本科大二,隨手可以寫java網(wǎng)課上的倉儲系統(tǒng)(無法聯(lián)網(wǎng),圖形化界面,sql),在業(yè)內(nèi)算什么水平呢?我做軟件已經(jīng)20多年了。編程不僅是關(guān)于使用什么語言,而且是關(guān)于思考。編程語言只是一種工具。如果你熟
本人本科大二,隨手可以寫java網(wǎng)課上的倉儲系統(tǒng)(無法聯(lián)網(wǎng),圖形化界面,sql),在業(yè)內(nèi)算什么水平呢?
我做軟件已經(jīng)20多年了。編程不僅是關(guān)于使用什么語言,而且是關(guān)于思考。編程語言只是一種工具。如果你熟悉一個工具,那就沒什么值得驕傲的了,除非你想把編程和詩人比較一下。一個軟件要實現(xiàn)哪些功能,這些功能用戶如何使用才能酷、易用、穩(wěn)定如新是最重要的。否則,這是一個懸而未決的問題。在這個領(lǐng)域沒有太多的前途
首先,我們需要知道在非分布式環(huán)境中使用鎖可以解決什么問題?
多線程環(huán)境,共享資源線程安全問題!此時,共享資源通常在一臺機器的多線程中競爭。從JAVA內(nèi)存模型的角度來看,我們可以通過鎖定對象、方法和代碼塊來避免共享資源的競爭
!1,生成全局ID;
2,修改全局配置文件;
3,分布式服務(wù)中的seckill;
4,分布式環(huán)境中的重復(fù)提交;
1,使用數(shù)據(jù)庫的唯一主鍵實現(xiàn)鎖定
!2、使用redis指令:通常使用setnx方法,incr方法實現(xiàn)
3、使用zookeeper:使用API生成臨時節(jié)點實現(xiàn)鎖定
什么時候需要分布式鎖?
分布式優(yōu)勢:1。增加系統(tǒng)容量。我們的業(yè)務(wù)量在不斷增長,為了能夠應(yīng)對不斷增長的業(yè)務(wù)量,一臺機器的性能已經(jīng)無法滿足,我們需要多臺機器來應(yīng)對大規(guī)模的應(yīng)用場景。因此,我們需要對業(yè)務(wù)系統(tǒng)進(jìn)行縱向或橫向拆分,使其成為分布式體系結(jié)構(gòu)。
2. 增強系統(tǒng)可用性。我們的業(yè)務(wù)變得越來越關(guān)鍵,我們需要提高整個系統(tǒng)架構(gòu)的可用性,這意味著架構(gòu)中不可能存在單點故障。這樣,整個系統(tǒng)就不會因為一臺機器的故障而不可用。因此,我們需要采用分布式體系結(jié)構(gòu)來冗余系統(tǒng),以消除單點故障,從而提高系統(tǒng)的可用性。
3. 由于模塊化,系統(tǒng)模塊的重用程度更高
4。由于軟件服務(wù)模塊是分塊的,所以并行開發(fā)和發(fā)布速度更快
5。系統(tǒng)具有較高的可擴展性
6。團(tuán)隊協(xié)作過程也會得到改進(jìn)
雖然分布式系統(tǒng)有一些優(yōu)勢,但也存在一些問題
2。架構(gòu)設(shè)計變得更加復(fù)雜(尤其是分布式事務(wù))
3。系統(tǒng)更靈活部署單個服務(wù)會更快,但是如果一個部署需要多個服務(wù),部署會變得更復(fù)雜
4。系統(tǒng)的吞吐量會變大,但響應(yīng)時間會變長
5。由于更多的服務(wù),操作和維護(hù)的復(fù)雜性將變得非常復(fù)雜
6。架構(gòu)的復(fù)雜性將導(dǎo)致更大的學(xué)習(xí)曲線
7。測試和錯誤檢查的復(fù)雜性將增加
8。分布式系統(tǒng)中的服務(wù)維護(hù)和運維管理技術(shù)種類繁多,使得分布式系統(tǒng)中的服務(wù)調(diào)度變得困難和復(fù)雜