華為云企業(yè)級(jí)Redis揭秘第16期:超越開源Redis的ACID"真"事務(wù)

      網(wǎng)友投稿 599 2022-05-29

      日常生活中的shopping、交通、手游都離不開高頻的金融消費(fèi)、虛擬交易。熟悉MySQL的讀者,一定知道數(shù)據(jù)庫(kù)事務(wù)(Transaction)可以搞定這類關(guān)鍵場(chǎng)景,事務(wù)不但極大簡(jiǎn)化了上層業(yè)務(wù)的編程模型,給開發(fā)者帶來(lái)便利,同時(shí)它也讓“交易”等核心業(yè)務(wù)正確可靠。

      其實(shí),Redis也有事務(wù),但社區(qū)版只做了簡(jiǎn)版實(shí)現(xiàn),無(wú)法滿足ACID要求,因此應(yīng)用有限。

      本文將介紹華為云企業(yè)級(jí)數(shù)據(jù)庫(kù)GaussDB(for Redis)(下文簡(jiǎn)稱為高斯Redis)的事務(wù)功能,與社區(qū)版不同,高斯Redis提供了滿足ACID的企業(yè)級(jí)事務(wù)特性。

      1.什么是事務(wù)?

      請(qǐng)?jiān)O(shè)想如下場(chǎng)景:

      在一個(gè)月黑風(fēng)高之夜,一場(chǎng)交易正在進(jìn)行。玩家B收款成功,但A卻沒(méi)拿到裝備。

      好了,一場(chǎng)PK在所難免。

      玩家做幾次點(diǎn)擊即可完成交易,但底層數(shù)據(jù)庫(kù)內(nèi)部,卻需要執(zhí)行至少4個(gè)關(guān)鍵操作:

      試想,如步驟4失敗,而前置步驟成功,會(huì)發(fā)生邏輯錯(cuò)亂,這將帶來(lái)災(zāi)難性的用戶體驗(yàn)。

      事務(wù)是如何解決這類場(chǎng)景的?這依賴于4大特性:

      原子性(Atomicity):一組操作要么全成功,要么全失敗。

      一致性(Consistency):即滿足既定約束,保證系統(tǒng)不脫離合理狀態(tài)。例如,如果A、B各有50枚金幣,那么全局總數(shù)應(yīng)始終保持100。

      隔離性(Isolation):多個(gè)事務(wù)的執(zhí)行相互隔離,互不影響。

      持久性(Durability):提交成功的事務(wù)應(yīng)帶來(lái)永久性狀態(tài)變化,即使掉電,數(shù)據(jù)也不應(yīng)丟失。

      其中,一致性是最關(guān)鍵的,而原子性、隔離性、持久性都是為了保證一致性。當(dāng)然,為了確保整體系統(tǒng)的一致性,也需要業(yè)務(wù)層的共同設(shè)計(jì)實(shí)現(xiàn),本文不詳細(xì)展開。

      那么,開源Redis事務(wù)存在哪些問(wèn)題,GaussDB(for Redis)的企業(yè)級(jí)事務(wù)功能又是什么樣的?下面我們來(lái)具體看看。

      2. 從四大特性看Redis的事務(wù)

      2.1 原子性

      社區(qū)版Redis

      開源Redis事務(wù)是一種極簡(jiǎn)設(shè)計(jì),并不支持事務(wù)失敗時(shí)的回滾操作,不滿足事務(wù)的原子性。

      此外還有以下問(wèn)題:

      入隊(duì)校驗(yàn)不完備:只校驗(yàn)簡(jiǎn)單語(yǔ)法,無(wú)法識(shí)別key的類型錯(cuò)誤;

      錯(cuò)誤處理不完備:直接跳過(guò)錯(cuò)誤,繼續(xù)執(zhí)行后續(xù)命令。

      GaussDB(for Redis)

      如圖所示,開源Redis事務(wù)在第一條命令出錯(cuò)的情況下仍舊執(zhí)行了下面的命令,而高斯Redis則避免了這樣的問(wèn)題。

      每個(gè)事務(wù)的執(zhí)行在提交前會(huì)進(jìn)行錯(cuò)誤判斷,如有錯(cuò)誤則會(huì)觸發(fā)回滾邏輯,放棄之前的操作,對(duì)原數(shù)據(jù)無(wú)影響

      高斯Redis在保留社區(qū)版事務(wù)使用邏輯的同時(shí),在底層實(shí)現(xiàn)了對(duì)回滾的支持,滿足了事務(wù)的原子性。

      2.2 隔離性

      社區(qū)版Redis

      事務(wù)在并發(fā)執(zhí)行時(shí),應(yīng)當(dāng)處理各種隔離性問(wèn)題。

      開源Redis對(duì)命令的執(zhí)行是單線程設(shè)計(jì),因此的確可以保證不會(huì)有兩個(gè)事務(wù)同時(shí)被執(zhí)行,具體來(lái)看:

      開源Redis不存在隔離性問(wèn)題;

      代價(jià)是性能的降低和對(duì)整體吞吐的影響,事務(wù)只能單線程處理,對(duì)其他請(qǐng)求的干擾較大。

      GaussDB(for Redis)

      高斯Redis是多線程架構(gòu),內(nèi)部對(duì)數(shù)據(jù)進(jìn)行自動(dòng)分片,在同數(shù)據(jù)分片內(nèi)保留序列化的隔離性級(jí)別,同時(shí)極大提高整體實(shí)例的并發(fā)能力。

      2.3 持久性

      社區(qū)版Redis

      開源Redis是純內(nèi)存設(shè)計(jì),不提供可靠的數(shù)據(jù)存儲(chǔ)能力。掉電后數(shù)據(jù)丟失,即使開啟RDB或AOF,也只能在一定程度上挽回部分?jǐn)?shù)據(jù),具體來(lái)看:

      RDB方式會(huì)丟失部分?jǐn)?shù)據(jù),數(shù)據(jù)只能恢復(fù)到上次快照的時(shí)間

      即使是AOF方式,持久性也存在問(wèn)題,從命令執(zhí)行到保存到硬盤之間,仍舊存在時(shí)間差

      AOF方式恢復(fù)緩慢、維護(hù)文件龐大,維護(hù)管理成本都會(huì)非常高,重建時(shí)間也很長(zhǎng)

      綜合來(lái)看,社區(qū)版Redis的持久化能力有限,不足以支持事務(wù)的持久性要求。

      GaussDB(for Redis)

      高斯Redis采用存算分離的設(shè)計(jì)理念,底層使用高性能分布式存儲(chǔ)池保存全量數(shù)據(jù),結(jié)合RocksDB存儲(chǔ)引擎,可保證核心數(shù)據(jù)的可靠存儲(chǔ),架構(gòu)圖:

      GaussDB(for Redis)核心優(yōu)勢(shì):

      核心數(shù)據(jù)存儲(chǔ):全量數(shù)據(jù)落盤,3副本冗余,不怕丟數(shù)據(jù)

      高可用:秒級(jí)故障接管,即使N-1節(jié)點(diǎn)故障,全量數(shù)據(jù)也可用

      低時(shí)延:自動(dòng)冷熱分離,亞毫秒級(jí)時(shí)延,能Hold緩存場(chǎng)景

      高吞吐:全部節(jié)點(diǎn)可寫,QPS可水平擴(kuò)展,能抗流量高峰

      強(qiáng)一致:3副本強(qiáng)一致同步,不會(huì)發(fā)生臟讀,業(yè)務(wù)免踩坑

      秒擴(kuò)容:例如,8G到64G擴(kuò)容只需1秒,且對(duì)業(yè)務(wù)0影響

      降成本:數(shù)據(jù)量越大價(jià)格越香,能夠真正幫用戶省成本

      高斯Redis強(qiáng)大的持久化保障,支持核心數(shù)據(jù)的可靠存儲(chǔ),也為事務(wù)的執(zhí)行提供了有力的保證。

      2.4 一致性

      從數(shù)據(jù)庫(kù)層面,數(shù)據(jù)庫(kù)通過(guò)原子性、隔離性、持久性來(lái)保證一致性,可以說(shuō)在ACID中一致性是事務(wù)的目的,其他特性是手段。

      如上文所述,開源Redis在原子性和持久性上都存在種種問(wèn)題,一致性自然也無(wú)法保障。在上述特性的保障下,不論是正常執(zhí)行還是存在命令失敗場(chǎng)景,高斯Redis事務(wù)都有可靠的一致性。

      2.5 對(duì)比總結(jié)

      通過(guò)上述介紹我們從事務(wù)的四大特性出發(fā)詳細(xì)地介紹了高斯Redis的事務(wù),最后做一個(gè)總結(jié):

      3. 結(jié)語(yǔ)

      近年來(lái),以Redis為代表的KV數(shù)據(jù)庫(kù)逐漸在越來(lái)越多的場(chǎng)景發(fā)揮作用,而高斯Redis作為華為云旗艦KV數(shù)據(jù)庫(kù),可滿足企業(yè)核心數(shù)據(jù)的可靠存儲(chǔ)要求。

      高斯Redis的事務(wù)能力相比社區(qū)版Redis有極大提升,在ACID事務(wù)的加持下,更可在“庫(kù)存”、“交易”等關(guān)鍵場(chǎng)景簡(jiǎn)化業(yè)務(wù)設(shè)計(jì),帶來(lái)可靠數(shù)據(jù)存儲(chǔ)能力。

      4. 附錄

      杭州/西安/深圳簡(jiǎn)歷投遞:yuwenlong4@huawei.com

      華為云企業(yè)級(jí)Redis揭秘第16期:超越開源Redis的ACID"真"事務(wù)

      產(chǎn)品資料導(dǎo)航:https://bbs.huaweicloud.com/blogs/248875

      MySQL Redis 云數(shù)據(jù)庫(kù) GaussDB(for Redis) 數(shù)據(jù)庫(kù) 緩存

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:基于Tcl腳本生成Vivado工程及編譯
      下一篇:Linux驅(qū)動(dòng)開發(fā)-proc接口介紹
      相關(guān)文章
      亚洲欧好州第一的日产suv| 国产亚洲av人片在线观看| 亚洲伊人久久综合中文成人网| 亚洲avav天堂av在线网爱情| 亚洲精品免费视频| 国产精品亚洲片在线观看不卡| 亚洲视频人成在线播放| 国产精品亚洲va在线观看| 亚洲精品无码专区在线播放| 日韩亚洲人成在线| 亚洲va久久久久| 亚洲乱码无人区卡1卡2卡3| 亚洲日产乱码一二三区别| 亚洲欧洲精品成人久久曰| 亚洲av日韩av永久在线观看| 丰满亚洲大尺度无码无码专线| 亚洲av色香蕉一区二区三区蜜桃| 亚洲av午夜电影在线观看 | 亚洲日韩精品一区二区三区 | 亚洲国产精品无码久久久久久曰| 另类小说亚洲色图| 亚洲免费日韩无码系列| 亚洲一区无码精品色| 最新亚洲成av人免费看| 日韩色视频一区二区三区亚洲| 九九精品国产亚洲AV日韩| 亚洲第一区精品日韩在线播放| 国产成人综合亚洲一区| 亚洲性日韩精品一区二区三区| 国产偷国产偷亚洲高清日韩| 亚洲人精品午夜射精日韩| 亚洲A∨无码一区二区三区| 亚洲色成人网一二三区| 亚洲一区免费视频| 亚洲欧美日本韩国| vvvv99日韩精品亚洲| 中文字幕在亚洲第一在线| 国产亚洲高清不卡在线观看| 久久精品国产亚洲AV香蕉| 亚洲丰满熟女一区二区v| 亚洲国产精品无码久久|