
為什么大家紛紛都采用分布式架構呢?
在目前的互聯網技術架構中,最受歡迎的是分布式架構。為什么每個人都采用分布式架構? 1.高效且低成本,將在多種小型計算機的高性能計算機中部署的程序分散; 2.強大的可擴展性,可以通過擴展業務水平擴展系統的性能; 3.強的可靠性,在系統中的一個或多個失敗時,還有其他機器提供服務; 4.具有強大的并發性,所有機器同時運行提供服務。分布,真的很香!但是,使用分布式架構時存在一些問題。最嚴重的問題是數據一致性。由于業務部署在多臺計算機上,因為時間和空間不一致,數據將是不同的。分布式帽理論告訴我們“分布式系統不能同時滿足一致性,可用性和分區公差。最多會滿足兩個項目”。對于數據不一致的問題,互聯網有幾個想法。例如,基本上是可用的基本服務,犧牲臨時數據不一致,只要數據最終一致;分布式事務用于解決問題;分布式鎖用于解決問題。今天我們將介紹分布式鎖的解決方案。首先查看特定情況以解釋為什么需要分布式鎖定。電子商務業務采用分布式架構后,該程序部署在3個Tomcat容器中(1個Tomcat容器代表服務器,3個Tomcats可以了解電子商務服務在北京,上海和深圳部署了電子商務服務,以及成員變量A代表貨物的數量。在北京,鮑勃在上海,以及深圳湯姆所有啟動了用戶要求購買或取消iPhone12。在Nginx負載平衡之后,Alice的請求被發送到北京服務器,并將Bob的請求發送到上海服務器和湯姆。該請求被發送到深圳服務器。此時,每個服務器將更改iPhone12的數量。愛麗絲的要求是將貨物數量增加到200,鮑勃的要求是減少100乘100,湯姆的要求是增加貨物數量。
1.如果對商品數量的修改沒有限制,整體將搞砸。也許鮑勃第一次減少,而湯姆的增加,數據完全搞砸了,因此需要分布式鎖定解決方案。分布式系統中鎖的概念不存在。還有鎖定傳統互聯網的發展。例如,當多個進程是處理請求時,內存資源將不足。此時,操作系統將使用信號量來解決資源抓取。如果信號量值大于0,則信號量值將減少1,并且將同時分配內存資源。如果信號量的值小于0,則該過程處于等待狀態。在完成其他過程操作之后,信號量值增加1,喚醒等待過程。總而言之,實現鎖定有三個元素:1。有空間用于存儲鎖。在多進程中,內存是存儲鎖的空間。通過控制鎖來實現不同進程的訪問控制。 2.可以唯一識別,不同的空間受到不同鎖的保護,必須唯一識別。 3.有狀態,即存在和不存在。在分布式系統環境中,分布式鎖是一個變量,并且可以同時由機器的一個線程執行方法,并且還提出了更高的要求,以實現分布式鎖,即高性能和高可用性采集是必需的。要釋放鎖,需要鎖定超時機制來避免死鎖。如何實現分布式鎖?行業中有三種實施方法:1。基于數據庫; 2.基于REDIS; 3.基于Zookeeper。對于第一個實施方案,它非常簡單。我們知道傳統數據庫中存在酸交易原子,一致性,耐用性和可用性規則。如果基于數據庫實現分布式鎖,則只需在數據庫中創建一個表。該表包含方法名稱,并將唯一索引添加到方法名稱中。如果要執行該方法,請使用此方法名稱將數據插入表中。插入時,無法插入其他數據,這相當于獲得鎖定。在成功插入后,刪除相應的數據以釋放鎖定。此方案的優勢在于它很簡單,但問題是它對數據庫有很高的要求,因為數據庫的可用性和性能將直接影響分布式鎖的可用性,并且數據庫可能需要主從站讀寫和寫入的部署和分離。對于第二個實施方案,您只需使用redis命令setnx,到期,刪除(請允許我嘆了口氣,Redis真的很容易使用,簡單良好,性能簡單),setnxkeyvalue將給一些變量分配一個值和返回1.當業務請求到來時,如果返回鍵值為1,則線程獲取鎖定。如果鍵值為0,則線程無法抓取鎖定。對于第三個實施方案,我們知道Zookeeper是分布式協調服務。它的內部是一個分層文件系統目錄樹結構。同一目錄中只能有一個唯一的文件名。因此,在實現分布式鎖時,只需要創建目錄。如果線程想要獲取鎖定,它會在目錄中創建臨時序列節點,然后遍歷以獲取是否存在小于自身的節點。如果存在,則獲取鎖定失敗。如果不存在,則獲取鎖定成功。缺點是創建節點頻繁。通過介紹本文,仔細閱讀的小合作伙伴在使用分布式架構中獲得了技能。在分布式環境中,資源的鎖定非常重要。數據一致性問題通過分布式鎖解決。朋友可以根據他們的實際業務條件選擇合適的分布式鎖定方案?