“百變”Redis帶你見識不同場景下的產(chǎn)品技術(shù)架構(gòu)-創(chuàng)新互聯(lián)

2018飛天技術(shù)匯24期-云數(shù)據(jù)庫Redis產(chǎn)品發(fā)布會,由阿里云數(shù)據(jù)庫技術(shù)組技術(shù)專家王歡、懷聽、梁盼分別帶來以“Redis全球多活產(chǎn)品”、“Redis混合存儲產(chǎn)品”、“Redis多線程性能增強版”為題的演講。本文對Redis進行了簡單的介紹,進而針對不同的應(yīng)用場景研制出不同的產(chǎn)品,并對不同產(chǎn)品分別進行了詳細地介紹。
數(shù)十款阿里云產(chǎn)品限時折扣中, 趕快點擊這里 ,領(lǐng)券開始云上實踐吧!
直播視頻回顧
PPT下載地址( 云痕 )( 懷聽 )( 梁盼 )
以下內(nèi)容根據(jù)精彩視頻分享整理而成。

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:域名注冊、網(wǎng)絡(luò)空間、營銷軟件、網(wǎng)站建設(shè)、民豐網(wǎng)站維護、網(wǎng)站推廣。

Redis簡介

Redis 是一個高性能的key-value數(shù)據(jù)庫,Redis的優(yōu)勢有很多,例如,它的性能極高 ,Redis能讀的速度是110000次/s,寫的速度是81000次/s ;它具有豐富的數(shù)據(jù)類型,可支持二進制案例的 Strings、Lists、Hashes、Sets 及 Ordered Sets 數(shù)據(jù)類型操作;它的所有操作都是原子性的,意思就是要么成功執(zhí)行要么失敗完全不執(zhí)行;它還具有豐富的特性, 即支持 publish/subscribe、通知、key過期等等特性。
Redis 與其他key - value 緩存產(chǎn)品有三個共同特點:一是Redis支持數(shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保存在磁盤中,重啟的時候可以再次加載進行使用;二是Redis不僅僅支持簡單的key-value類型的數(shù)據(jù),同時還提供list、set、zset、hash等數(shù)據(jù)結(jié)構(gòu)的存儲;三是Redis支持數(shù)據(jù)的備份,即master-slave模式的數(shù)據(jù)備份。
Redis與其他key-value存儲的不同點在于Redis有著更為復(fù)雜的數(shù)據(jù)結(jié)構(gòu)并且提供對它們的原子性操作,這是一個不同于其他數(shù)據(jù)庫的進化路徑。Redis的數(shù)據(jù)類型都是基于基本數(shù)據(jù)結(jié)構(gòu)的同時對程序員是透明的,無需進行額外的抽象。另外的一個不同點在于Redis在內(nèi)存中運行時可以持久化到磁盤中,所以在對不同數(shù)據(jù)集進行高速讀寫時需要權(quán)衡內(nèi)存,因為數(shù)據(jù)量不能大于硬件內(nèi)存。因此,與磁盤上相同的復(fù)雜數(shù)據(jù)結(jié)構(gòu)相比,在內(nèi)存中操作起來更為簡單,這樣Redis可以做很多內(nèi)部復(fù)雜性很強的事情。同時,在磁盤格式方面它們是緊湊以追加的方式產(chǎn)生的,因為他們并不需要進行隨機訪問。

Redis全球多活產(chǎn)品

Redis全球多活產(chǎn)品是指多個Redis實例分布在全球不同的區(qū)域,它是阿里云自研、基于云數(shù)據(jù)庫Redis版(ApsaraDB for Redis)、100%兼容 Redis 協(xié)議的多活數(shù)據(jù)庫系統(tǒng)。通過數(shù)據(jù)同步通道,把多個Redis實例組網(wǎng)成1個邏輯上的 Redis 多活實例,多活實例內(nèi)的所有實例均可讀寫并保持實時數(shù)據(jù)同步。數(shù)據(jù)同步通道通過內(nèi)網(wǎng)打通,具有高可靠、高安全、低延遲的特性。子實例間通過CRDT(Conflict-free Replicated Data Type)機制檢測并解決數(shù)據(jù)沖突,保障數(shù)據(jù)最終一致性。Redis全球多活產(chǎn)品輕松支持異地多個站點同時對外提供服務(wù)的業(yè)務(wù)場景,助力企業(yè)快速復(fù)制阿里巴巴異地多活架構(gòu)。

高可用架構(gòu)演練之路

程序在運行過程中總會遇到各種各樣的問題,例如程序bug、機器故障、機房斷電起火故障等,業(yè)務(wù)上要求發(fā)生這些故障時要保證數(shù)據(jù)一致性和業(yè)務(wù)可用性,所以就有了架構(gòu)演練之路,即單可用區(qū)-同城容災(zāi)-兩地三中心-異地多活。
由于單可用區(qū)架構(gòu)無法應(yīng)對機房出現(xiàn)故障,就有了同城容災(zāi)的架構(gòu)。同城容災(zāi)架構(gòu)由于無法應(yīng)對地域級別的問題,接著就有了兩地三中心架構(gòu)。由于許多金融業(yè)務(wù)要求數(shù)據(jù)存儲在不同的地域中,同時對故障恢復(fù)時間有要求,因此兩地三中心架構(gòu)就在同城容災(zāi)基礎(chǔ)上加了一個standby中心,但依舊存在幾個缺陷,即冷備中心不工作,關(guān)鍵時刻不敢切的缺陷;冷備中心不工作,成本浪費的缺陷;本質(zhì)上數(shù)據(jù)仍然單點寫,數(shù)據(jù)庫瓶頸無法解的缺陷;資源、容災(zāi)、擴展無法解決的缺陷。 
后來有了異地多活架構(gòu),它是指所有的中心都提供業(yè)務(wù)服務(wù),底層的數(shù)據(jù)能夠相互同步,因此存在著許多優(yōu)點,例如,所有中心工作,切換有保障;所有中心工作,成本低;彈性伸縮,增加/減少中心個數(shù);故障獨立性導(dǎo)致中心不可用時,只影響部分用戶。

產(chǎn)品架構(gòu)


異地多活產(chǎn)品架構(gòu)圖如上圖所示,它是由云數(shù)據(jù)庫Redis版實例、同步通道和通道管理器三部分組成。由于異地多活是由多個Redis實例組成,因此可以實現(xiàn)每個子實例之間實時數(shù)據(jù)同步、每個子實例數(shù)據(jù)最終一致、每個子實例均可讀寫等功能。
在異地多活構(gòu)架中,對Redis進行了aof binlog增加oplog和CRDT策略merge key的改造,其中aof binlog增加oplog中包含gtid和邏輯時鐘信息,解決了循環(huán)同步、Exactly-once Apply的問題;CRDT策略merge key中解決了一致性的問題。
異地多活產(chǎn)品具有高可用、高性能、數(shù)據(jù)最終一致以及功能豐富的特性,具體介紹如下:

  • 高可用
    高可用是指同步通道支持斷點續(xù)傳,它最高可容忍天級別的隔斷,且隔斷之后數(shù)據(jù)還可以在斷點處繼續(xù)同步;同時,同步通道還可以自適應(yīng)處理子實例異常,例如主備切換、備庫重搭等。

  • 高性能
    高性能是指它具有異步復(fù)制同步不影響Redis自身讀寫性能,因為它本身定位就具有高性能、高吞吐、低延遲的性能,高吞吐是指它具有標準版Redis使得單向同步鏈路高達10萬TPS以及隨Redis節(jié)點數(shù)線性擴展的集群版Redis。低延遲是指洲際內(nèi)地域僅需百毫秒,更厲害的是跨洲際地域僅需 1秒級。

  • 最終一致性
    為了解決過去的架構(gòu)由于異步同步的邏輯產(chǎn)生的一致性問題,最終引進了CRDT(Conflict-Free Replicated Data Types)策略,它可支持最終一致性的數(shù)據(jù)類型有 String/Counter、Hash、Set、Zset、Geo、hyperloglog等。

  • 功能豐富
    異地多活產(chǎn)品增加了支持 Redis 實例類型、同步中的子實例支持變配規(guī)格、新增與刪除子實例等新功能,其中支持的 Redis 實例類型包括標準版、集群版以及讀寫分離版。

業(yè)務(wù)設(shè)計

“百變”Redis帶你見識不同場景下的產(chǎn)品技術(shù)架構(gòu)


異地多活業(yè)務(wù)具有不同的業(yè)務(wù)有不同的業(yè)務(wù)設(shè)計要求,它必須允許多個地域具有同時修改同一份數(shù)據(jù)的功能,例如全局session、全局PV、用戶收藏夾、購物車、地理位置信息、收藏夾、歷史搜索記錄、彈幕、評論等。同時,它還需要做數(shù)據(jù)切分,要求一份數(shù)據(jù)只允許有1個寫入點。
多活業(yè)務(wù)設(shè)計的要點有自包含性、松耦合性和路由規(guī)則一致性,即多活業(yè)務(wù)設(shè)計的所有計算與數(shù)據(jù)必須在1個中心內(nèi)完成;跨單元之間只能進行服務(wù)調(diào)用,不能直接訪問數(shù)據(jù)庫或其他存儲;路由必須是入口路由或者微服務(wù)調(diào)用路由。

Redis混合存儲產(chǎn)品

Redis混合存儲實例是阿里云自主研發(fā)的完全兼容Redis協(xié)議和特性的混合存儲產(chǎn)品。通過將部分冷數(shù)據(jù)存儲到磁盤,在保證絕大部分訪問性能不下降的基礎(chǔ)上,大大降低了用戶成本,并突破了內(nèi)存對Redis單實例數(shù)據(jù)量的限制。

技術(shù)架構(gòu)

“百變”Redis帶你見識不同場景下的產(chǎn)品技術(shù)架構(gòu)


它的數(shù)據(jù)類型是將熱數(shù)據(jù)存儲在內(nèi)存里,將冷數(shù)據(jù)存儲在磁盤里面,顧名思義,熱數(shù)據(jù)就是指頻繁訪問到的數(shù)據(jù)。因為所有的Redis都會訪問到Keys,相對來說Keys的訪問天生就比Values大許多,因此Redis混合存儲產(chǎn)品是將所有的Keys、常訪問的Values放到內(nèi)存里存儲,而不經(jīng)常訪問的Values放到磁盤里存儲。在業(yè)務(wù)場景里面,Keys只占十幾個字節(jié),但Values卻占幾百甚至幾千個字節(jié),所以將所有的Keys放到內(nèi)存里對整體性能能夠提高很多。

“百變”Redis帶你見識不同場景下的產(chǎn)品技術(shù)架構(gòu)


Redis混合存儲架構(gòu)如上圖所示,從業(yè)務(wù)模型來看,我們把Redis混合存儲架構(gòu)分為三層,第一層是計算層,它包含所有Redis的網(wǎng)絡(luò)連接、協(xié)議解析、定時任務(wù)、命令處理、過期、淘汰、同步等業(yè)務(wù)邏輯;第二層是數(shù)據(jù)層,它包含熱數(shù)據(jù)表示、冷熱數(shù)據(jù)交換、冷數(shù)據(jù)編解碼;第三層是存儲層,它包含存儲引擎、文件系統(tǒng)以及硬件管理。
其中,數(shù)據(jù)層進行冷熱交換是為了保證兼容性,因為所有Redis的業(yè)務(wù)邏輯是采用主線程來處理的,所有實際的IO是由后臺來運行的,進而也不會阻擋主線程的運行。在熱數(shù)據(jù)轉(zhuǎn)換成冷數(shù)據(jù)的過程中,數(shù)據(jù)量小于內(nèi)存時,Redis混合存儲會把所有的Keys和Values放到內(nèi)存里面,這樣可以達到性能最高。當數(shù)據(jù)量越來越大時,內(nèi)存里會出現(xiàn)存不下的現(xiàn)象,這時會按照最近的訪問頻率篩選出一些很少被訪問到的Values,然后由主線程生成IO任務(wù),接著后臺的IO線程拿到這些任務(wù)存儲到磁盤中,最后主線會將這些Values釋放掉。在冷數(shù)據(jù)轉(zhuǎn)換成熱數(shù)據(jù)的過程中,收到用戶請求后,首先判斷任務(wù)請求會訪問到哪些Values,然后看這些Values是否都在內(nèi)存里面,如果部分Values不在,會對這些Values生成IO任務(wù),然后主線程將客戶端掛起,接著繼續(xù)處理其它客戶端的請求,當此線程拿到這些任務(wù)后,會把數(shù)據(jù)從磁盤里面加載到內(nèi)存里面,同時通知給主線程,主線程收到這些通知之后會將掛起的客戶端喚醒繼續(xù)處理其他用戶請求。
對于存儲層而言,磁盤上的存儲是跟阿里巴巴的服務(wù)器研發(fā)團隊共建的一個用戶態(tài)的存儲引擎,稱為FusionEngine。它是由業(yè)務(wù)定制一個RocksDB,然后通過底層的一個用戶固態(tài)的文件系統(tǒng)來縮短用戶的IO路徑,進而避免了內(nèi)核的開銷。在業(yè)務(wù)場景里面,F(xiàn)usionEngine的性能比過去的文件系統(tǒng)性能提升了約80%左右,因此整體的Redis混合存儲性能也得到了有效的提升。

產(chǎn)品特性

Redis混合存儲產(chǎn)品的底層實線是支持冷熱數(shù)據(jù)任意配比的,即可以任意的匹配內(nèi)存占用多少和磁盤占用多少,進而在性能和成本上達到一個平衡。在應(yīng)用中,所有的數(shù)據(jù)量不能超過內(nèi)存加磁盤的容量。此產(chǎn)品適用于Values比較大的場景,因為Values對性能的影響不是很大,所以也比較適合數(shù)據(jù)訪問冷熱不均的場景。目前混合存儲開通的區(qū)域有華北2(北京)的可用區(qū)D、華東1(杭州)的可用區(qū)E、華南1(深圳)的可用區(qū)C。

應(yīng)用場景

Redis混合存儲產(chǎn)品應(yīng)用的場景包含電商類應(yīng)用、直播類應(yīng)用、互聯(lián)網(wǎng)類應(yīng)用,對于電商類應(yīng)用而言,它的活躍商品數(shù)據(jù)存放到內(nèi)存中,冷門商品數(shù)據(jù)存放到磁盤中;對于直播類應(yīng)用而言,它的活躍直播間和熱門直播間的數(shù)據(jù)存放到內(nèi)存中,下線直播間和冷門直播間的數(shù)據(jù)存放到磁盤中;對于互聯(lián)網(wǎng)類應(yīng)用而言,它的首頁和熱門貼數(shù)據(jù)存放到內(nèi)存中,冷門帖子存放到磁盤中。

Redis多線程性能增強版

Redis多線程性能增強版突破了Redis單線程的性能瓶頸,且100%兼容原生Redis,業(yè)務(wù)無需修改任何代碼。通過將命令解析,讀寫,響應(yīng)等事件分發(fā)給多個IO線程并發(fā)處理,實現(xiàn)處理性能質(zhì)的飛躍。

技術(shù)架構(gòu)

原生的Redis是進行串行處理的,當它接收到一個請求時,會嘗試連接讀取到一部分數(shù)據(jù),并對這部分數(shù)據(jù)進行解析,如果解析到一個完整的數(shù)據(jù),就會對這個數(shù)據(jù)進行處理。當這個數(shù)據(jù)處理完之后,會生成對數(shù)據(jù)的一個響應(yīng),針對這個響應(yīng)在發(fā)送給客戶端。原生的Redis存在一個缺陷,就是不能做到并發(fā)。相對而言,Redis多線程做的一個Master-Slave架構(gòu)就能夠做到并發(fā),它是將Master數(shù)據(jù)處理完之后,將數(shù)據(jù)同步到Slave上。

“百變”Redis帶你見識不同場景下的產(chǎn)品技術(shù)架構(gòu)


如上圖所示,Redis多線程性能增強版是由主線程、多個IO線程和WORKER線程組成,主線程主要負責接受連接,創(chuàng)建client,將連接轉(zhuǎn)發(fā)給IO線程。IO線程負責處理連接的讀寫事件,解析命令,將解析的完整命令轉(zhuǎn)發(fā)給WORKER線程處理,發(fā)送response包,負責刪除連接等;WORKER線程負責命令的處理,生成客戶端回包,定時器事件的執(zhí)行等。
在線程間數(shù)據(jù)在進行交換的過程中,一個IO線程在獲取到連接之后,就開始嘗試在這個連接上讀取請求,然后對請求做一個解析,若解析到是一個完整的請求,就會將請求放到隊列里面。接著,IO線程通知WORKER線程有新的命令需要處理,這個通知是通過管道來進行的。最后,WORKER線程接受到命令后就會對其進行處理,處理完之后會形成對命令的響應(yīng),并將響應(yīng)放到隊列里面,同樣,WORKER線程也會通知IO線程。

產(chǎn)品特性

“百變”Redis帶你見識不同場景下的產(chǎn)品技術(shù)架構(gòu)


IO線程越多,Redis多線程的性能越好,但是IO線程與Redis多線程的性能并不是線性的,當IO線程達到一定的數(shù)量時,WORKER就會達到一個瓶頸。因此,IO線程最多支持多達6個,默認情況下只有一個IO線程。另外需要注意的是,線程數(shù)個數(shù)跟規(guī)格是綁定的,一旦選定實例創(chuàng)建完畢后無法動態(tài)修改,如需修改,就需要通過升級規(guī)格的方式完成。
Redis多線程并不是在所有的場景中都適用,Redis多線程只適用于主從版無法滿足性能需求時、集群版shard節(jié)點成為性能瓶頸時、讀寫分離版本有熱寫瓶時以及同步延遲等問題時。

應(yīng)用場景

Redis多線程性能增強版主要應(yīng)用在電商類應(yīng)用、直播類應(yīng)用中,對于電商類應(yīng)用而言,適用于秒殺場景和庫存計數(shù);對于直播類應(yīng)用而言,主要適用于熱點直播間和明星大V的直播。

標題名稱:“百變”Redis帶你見識不同場景下的產(chǎn)品技術(shù)架構(gòu)-創(chuàng)新互聯(lián)
地址分享:http://www.muchs.cn/article24/ddsjje.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊網(wǎng)站設(shè)計公司、網(wǎng)站維護品牌網(wǎng)站建設(shè)、品牌網(wǎng)站設(shè)計、微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化