丨解決一個互斥問題系統(tǒng)并發(fā)用戶數(shù)提升了10倍_第1頁
丨解決一個互斥問題系統(tǒng)并發(fā)用戶數(shù)提升了10倍_第2頁
丨解決一個互斥問題系統(tǒng)并發(fā)用戶數(shù)提升了10倍_第3頁
丨解決一個互斥問題系統(tǒng)并發(fā)用戶數(shù)提升了10倍_第4頁
丨解決一個互斥問題系統(tǒng)并發(fā)用戶數(shù)提升了10倍_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

優(yōu)化業(yè)務(wù)中的互斥鎖,以及是如何提升業(yè)務(wù)RPS(Requestspersecond,請求吞吐量)性能指標10倍以上的,從而幫助你全面地了解分析與優(yōu)化互斥鎖的詳細過程。以優(yōu)化掉,而哪些場景下不可以。并且你還會掌握一種手動實現(xiàn)事務(wù)的機制(作回滾機制),來替代業(yè)務(wù)中互斥鎖的,進一步來幫助優(yōu)化提升軟件的性能。這個性能優(yōu)化案例的業(yè)務(wù)場景是這樣的:用戶給表單提交一條記錄,在這條記中會可見,在該業(yè)務(wù)中使用了一個Redis鎖來實現(xiàn)互斥,從而實現(xiàn)了被加鎖的業(yè)務(wù)邏輯執(zhí)字段不重復(fù)檢測:檢查插入的字段值在數(shù)據(jù)庫中是否有重復(fù)的情況出現(xiàn),如果出現(xiàn)重復(fù)其他操作:即用戶提交記錄的過程中一些關(guān)鍵業(yè)務(wù)操作,其特點是不能被拆分執(zhí)行,也不能被回滾。如果操作成功的話,就會執(zhí)行下一步的操作,否則也會直接退出。所有字段插入除此之外,在優(yōu)化前的代碼實現(xiàn)中,需要進行重復(fù)性校驗的字段都會記錄在Redis中。所以,圖中的操作1、操作3都是基于Redis來實現(xiàn)的。那么在看完這個業(yè)務(wù)實現(xiàn)邏輯圖之后,你可能會比較好奇:什么不使用關(guān)系數(shù)據(jù)庫中的字段唯一性檢測機制來實現(xiàn)呢?其實這是因為,在這個業(yè)務(wù)系統(tǒng)中有大約0則可能都不一樣,而且用戶還可以隨意修改這個規(guī)則。所以,這個系統(tǒng)在設(shè)計實現(xiàn)的時Redis比較簡單,而且是按照單個表單來進行加鎖的,所以在因此,問題在第22講中,我們已經(jīng)學(xué)習(xí)過加鎖的計算邏輯屬于串行資源,這是系統(tǒng)中潛在的性能在這個中,因為Lock和Unlock是采用Redis的互斥鎖來實現(xiàn)的,它們所使用的Redis的script實現(xiàn)如圖中所示,通過在真實系統(tǒng)中進量,其中Locktime+Unlocktime的操作時間之和在3ms左右。 執(zhí)行開銷為30ms左右,那么對應(yīng)的MaxRPS=1s/(3ms+30ms),也就是大30RPS左0MaxRPS300RPS因此到這里,在這個性能優(yōu)化案例中,我們經(jīng)過測量加鎖的計算邏輯執(zhí)行時間為30RPS,然后根據(jù)上面的,我們計算出的最大RPS值也為30RPS左右,這與真實的性能測試針對這個業(yè)務(wù)案例,你應(yīng)該也能發(fā)現(xiàn)一個明顯的特點:絕大多數(shù)情況下,并不會出現(xiàn)并發(fā)提交相同字段值的情況。也就是說,如果這個業(yè)務(wù)邏輯沒有增加互斥鎖,在.9%下業(yè)務(wù)邏輯也是正確的。所以,針對這種場景,我們就可以采用手動實現(xiàn)事務(wù)機制,來優(yōu)化掉業(yè)務(wù)代碼中的互斥鎖,來提升請求吞吐量的性能。而這里我們已經(jīng)知道,在這個案例中,使用互斥鎖解決的問題是判斷字段不重復(fù)和段插入操作的原子性問題。所以說,我們其實可以考慮采用一些優(yōu)化機制,來單獨實現(xiàn)這兩個操作組合的原子性。實際上,原來的Redis使用s的Pipeline保證這兩步操作組合的原子性,從而不會被其他Redis操作干擾到。這樣針對接下來的其他操作(也就是用戶提交數(shù)據(jù)過程中的一些不可拆分的關(guān)鍵業(yè)務(wù)操。另了實務(wù)的和能我們要字段時,記錄前的狀態(tài)和插入后的變更狀態(tài),從而就可以實現(xiàn)失敗后的回滾機制。但是,我最后在實現(xiàn)時并沒有采納,這背后其實有很多的原因。比方說,使用MongoDB的事務(wù)需要進行數(shù)據(jù)遷移,而且需要升級系統(tǒng)的MongoDB集群的數(shù)據(jù)庫版本等,以及使用Redis事務(wù)機制的代碼實現(xiàn)并不友好,等等。不過這里有一個最重要的原因就是,不管是使用RedisDB的時間,拉長到了步驟“作結(jié)束之后,而這樣就顯著增大了事務(wù)失敗的概率。所以最后,我們采用前面這種優(yōu)化后的實現(xiàn)機制,因為去除了互斥鎖,所以用戶間的提交Pipelne操作會排隊處理,而由Pipele的執(zhí)行時長在3msRPS,提升到了PS實現(xiàn)了性能提升超過10。同步互斥是高性能分布式系統(tǒng)設(shè)計實現(xiàn)的關(guān)鍵技術(shù)之一,而在軟件開發(fā)的過程中,我們很容易因為設(shè)計或?qū)崿F(xiàn)不高效,導(dǎo)致整個軟件系統(tǒng)的性能不夠理想。所以在今天的課堂上,我通過一個真實的性能優(yōu)化案例,給你講解了業(yè)務(wù)中使用互斥鎖存在的性能問題,包括它對請求吞吐量的性能影響,以及優(yōu)化互斥鎖來提升系統(tǒng)性能的方法和過程。但是,每個業(yè)務(wù)系統(tǒng)中的同步互斥問題都存在特有的復(fù)雜性,所以你應(yīng)該學(xué)習(xí)收獲到的RedisCAS命令,有Pipelne機制,還支持t,你的思考和看法。如果覺得有收獲,也歡迎你把今天的內(nèi)容給的朋友。給需要的人,Ta訂閱后你可得

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論