事务与分布式事务原理与实现
生活随笔
收集整理的這篇文章主要介紹了
事务与分布式事务原理与实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
事務是個什么東西,他在什么地方會用到,第二個就是事務的常見思路,就是我們如何能夠達到我們上面說的要求的,那么第三個想要介紹的是,事務處理的常見問題,然后從單機事務轉變到分布式事務,來介紹分布式事務所面臨的一些問題,主要有分布式事務所面臨的問題,然后還是市面上的一些解決方案,比如像Google的Spanner,他在里面有哪些創新和代價呢,最后還有DRDS和TDDL的實踐,也會給到大家
但是因為時間的關系呢,我們這一次里面,主要想介紹的東西就是,前三個,事務的簡介,處理事務的常見思路,以及事務處理的常見問題,那我們正式進入到第一個章節,就是事務簡介章節,事務的核心就是鎖和并發,大家可能一想到事務就是ACID,比如什么強一致,但是其實事務的本質,非常的簡單,他就是鎖和并發的一個結合體,那為什么是這么說呢,其實核心的原因就在于說,事務的本質,其實就是將傳統意義上難以理解的事情,用一種更容易讓大家理解的方式,來表述的方法,所以事務自然而然給大家帶來最大的優勢,以傳統意義上的鎖,和并發的關系,更容易被大家所理解,但是他有自己的劣勢,這個最主要的劣勢,性能比較低,不是那么的容易,這里說白了,一個最關鍵的問題,容易理解的模型,性能往往都不好,性能好的模型,一般都不容易理解,所以這就是生活,原因也非常的簡單,其實說白了性能好,就意味著說,鎖的顆粒度盡可能小,但是如果你想降低鎖的顆粒度,那就意味著你要進行非常仔細的辨析,到底哪里需要加鎖,哪里不應該加鎖,但是你會發現,如果你辨析了鎖的顆粒度,盡可能的降低了鎖的顆粒度,反而會增加你編程的難度,所以問題的關鍵往往都在于說,能不能找到一個比較平衡的位置,讓用戶理解里面的事情不是特別困難的同時,又能極大的提高性能,這才是真正意義上事務鎖和并發所追求的部分,那么后面會越來越深刻的感受到這個問題,所以在這里只是簡單地給大家帶一下
緊接著我們要進入的問題就是,什么叫事務,我們從一個事務單元開始,相信這個圖大家也看過,Bob給Smith 100塊,那你可以看到,在這個過程里面的時候,Bob給Smith 100塊錢的時候,他做這么幾個步驟,第一個是鎖定Bob的賬戶,第二步是鎖定Smith的賬戶,你會發現在這里加了一個鎖,在這邊再加了一個鎖以后,是不是只有一個請求可以進入到這里面,操作這個賬戶,一個線程可以進入,比如線程1,其他的線程比如線程2,它是這樣,走到這里發現有鎖,他就只能在這里等待,那線程3也類似,他也有可能走到這里,就開始等待,那么你就發現,在整個事務進行過程中的時候,只有線程1進入到了這個鎖內,而其他的線程是排除在鎖外,那么你會發現,利用這種方式,我就可以讓,這后面的三個操作,查看Bob是否有100塊,從Bob中減少100,和給Smith加100,這三個操作,都可以由線程1來完成,那么這三步操作,你會發現,只有一個人能夠看到他的中間狀態,也就是只有線程1可以看到,而線程2和線程3,都看不到這個中間狀態,于是你會發現,在這個事務單元解鎖之前,其他的線程,其實只能等待鎖外的,因此我是不是就可以看到,我可以保證一點就是,事務的線程2,和線程3,他只能夠看到,要么Bob賬戶里有錢,要么Smith賬戶里有錢,不會出現說,比如我們假設,在這個例子里你會發現,如果我們停止,沒有鎖的話,那么減少了Bob 100塊,這邊賬戶里可能是0元,那么Smith里面沒有加上,這個線程1等在這里,就卡在這一步上,假設就卡在這一步以后,那么Bob減了100塊錢,而Smith沒來的及加,當線程2和線程3去訪問賬戶的時候會發現,線程2比如訪問了Bob賬戶,0,訪問Smith賬戶也是0,線程2和線程3看這個系統的時候會發現,原來這個數據庫是不一致的,看到了嗎,可能會出現的場景是,這邊是0,Bob的賬戶是0,Smith的賬戶也是0,于是系統本身就出現了不一致,這在一定場景下是不能接受的,所以你就會發現,事務要保證的問題,就是一致性,一致性的意思就是,要么Bob有這100塊,要么Smith有這100塊,發現事務就是這樣的一個過程,要么他有,要么他有,而中間這個狀態,Bob沒有錢,而Smith有錢,這個狀態,不會出現在線程2和線程3的視野里,這個過程就是一個事務單元,這個樣的過程,其實就可以保證,ACID,也就是,用這種方式你就會發現,事務就可以保證他的原子性,保證他的一致性,一致性記住剛才我說的話,要么Bob有這一百塊,要么Smith有這一百塊,不存在中間狀態,所以這就是AC,隔離性是另外一個概念,一會我們會談到,那么D就是Duration,也就是說,持久性,換句話說,Bob有一百塊,Smith有這100塊,只要被線程2和線程3看到,那么他就必須是持久的,不能再回退到之前的狀態,所以ACID這四個事情,就對應到了我們一個轉賬的賬戶,就可以完成,但是我不想去額外的擴展ACID具體的概念,所以在這里面,我只強調到這里,大家可以在線下仔細去查看說,到底什么叫ACID
?
總結
以上是生活随笔為你收集整理的事务与分布式事务原理与实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 新版本springboot-整合多数据源
- 下一篇: 单行注释