对话张冬洪 | 全面解读NoSQL数据库Redis的核心技术与应用实践
互聯(lián)網(wǎng)和Web的蓬勃發(fā)展正在改變著我們的世界,隨著互聯(lián)網(wǎng)的不斷發(fā)展和壯大,企業(yè)數(shù)據(jù)規(guī)模越來(lái)越大,并發(fā)量越來(lái)越高,關(guān)系數(shù)據(jù)庫(kù)無(wú)法應(yīng)對(duì)新的負(fù)載壓力,隨著Hadoop,Cassandra,MongoDB,Redis等NoSQL數(shù)據(jù)庫(kù)的興起,因其良好的可擴(kuò)展性,弱化數(shù)據(jù)庫(kù)的設(shè)計(jì)范式,弱化一致性要求,在解決海量數(shù)據(jù)和高并發(fā)的問(wèn)題上明顯優(yōu)于關(guān)系型數(shù)據(jù)庫(kù)。因而很快廣泛應(yīng)用于互聯(lián)網(wǎng)業(yè)務(wù)中。
Redis作為基于K-V的NoSQL數(shù)據(jù)庫(kù),具有高性能、豐富的數(shù)據(jù)結(jié)構(gòu)、持久化、高可用、分布式、支持復(fù)制等特性。從09年至今,經(jīng)歷8年多的錘煉,已經(jīng)非常穩(wěn)定,并且得到業(yè)界的廣泛認(rèn)可和使用,同時(shí)社區(qū)非常活躍。
今天我們有幸邀請(qǐng)到了Redis中國(guó)用戶組主席張冬洪老師,請(qǐng)他分享Redis的核心技術(shù),應(yīng)用現(xiàn)狀及發(fā)展方向等。
遇見(jiàn)未來(lái)DB舞臺(tái)孰是王者之Redis專訪
自我介紹,團(tuán)隊(duì)介紹
1我是來(lái)自新浪微博研發(fā)中心的高級(jí)DBA 張冬洪,目前在微博帶一個(gè)小組,主要負(fù)責(zé)微博平臺(tái)、手機(jī)微博、話題、紅包飛、開(kāi)放平臺(tái)、私信、以及內(nèi)容管控項(xiàng)目的數(shù)據(jù)庫(kù)產(chǎn)品運(yùn)維和服務(wù)保障工作。工作中涉及的數(shù)據(jù)庫(kù)產(chǎn)品主要包括MySQL、Redis、Memcached、MCQ、Kafka、Pika、Postgresql等。
目前您的團(tuán)隊(duì)工作重心是什么呢?
2微博研發(fā)中心數(shù)據(jù)庫(kù)部門主要負(fù)責(zé)全微博平臺(tái)的后端資源的托管和運(yùn)維,涉及的資源種類比較多,數(shù)據(jù)量比較大,業(yè)務(wù)線和資源實(shí)例數(shù)目也是非常之多,并發(fā)量巨大。而這些正是微博這種體量的公司應(yīng)該具有的,微博作為當(dāng)今中文社交媒體的第一品牌,擁有超過(guò)3.76億的月活用戶,也是當(dāng)前社會(huì)熱點(diǎn)事件傳播的最主要平臺(tái),其中包括但不限制于大型活動(dòng)(如:里約奧運(yùn)會(huì)、朱日和沙場(chǎng)大點(diǎn)兵等),春晚,明星動(dòng)態(tài)(如:王寶強(qiáng)離婚事件、女排奪冠、喬任梁去世、白百合出軌、TFBOYS生日、鹿晗關(guān)曉彤CP等)。
而熱點(diǎn)事件往往具有不可預(yù)見(jiàn)性和突發(fā)性,并且伴隨著極短時(shí)間內(nèi)流量的數(shù)倍增長(zhǎng),甚至更多,有時(shí)持續(xù)時(shí)間較長(zhǎng)。如何快速應(yīng)對(duì)突發(fā)流量的沖擊,確保線上服務(wù)的穩(wěn)定性,是一個(gè)非常巨大的挑戰(zhàn)和有意義的事情。為了達(dá)到這一目標(biāo),需要有一個(gè)完善的,穩(wěn)定可靠的,健壯的數(shù)據(jù)庫(kù)運(yùn)維體系來(lái)提供支撐和管理,所以我們團(tuán)隊(duì)也是在領(lǐng)導(dǎo)的指導(dǎo)下,有目標(biāo)、有計(jì)劃的開(kāi)展一些數(shù)據(jù)庫(kù)自動(dòng)化運(yùn)維平臺(tái)的建設(shè)工作。
在業(yè)余的時(shí)間我和其他幾大互聯(lián)網(wǎng)公司的朋友一起發(fā)起了Redis中國(guó)用戶組(簡(jiǎn)稱CRUG),也歡迎大家加入我們。
Redis在過(guò)去的版本演進(jìn)中,比較重大的變化包括哪些呢?在最新4.0版本上,您認(rèn)為最核心的變化是什么呢?您關(guān)注的新特性有哪些,可以簡(jiǎn)單介紹下嗎?3
我最早接觸應(yīng)該是在12年的時(shí)候,當(dāng)時(shí)最新的版本應(yīng)該是2.6.x。那個(gè)時(shí)候也沒(méi)有在線上用,只是學(xué)習(xí)Linux的時(shí)候了解過(guò)。所以知道Redis的版本號(hào)命名規(guī)則借鑒了Linux的方式,版本號(hào)第二位如果是奇數(shù),則為非穩(wěn)定版本,如果為偶數(shù),則為穩(wěn)定版本。
這里我說(shuō)下穩(wěn)定版本的一些主要改進(jìn)吧:
?Redis2.6
1)鍵的過(guò)期時(shí)間支持毫秒
2)從節(jié)點(diǎn)提供只讀功能
3)服務(wù)端支持Lua腳本
4)放開(kāi)客戶端連接數(shù)的硬編碼限制
5)去掉虛擬內(nèi)存相關(guān)功能等
???Redis2.8
1)完善主從復(fù)制功能,實(shí)現(xiàn)增量復(fù)制
2)Redis設(shè)置明顯的進(jìn)程名,在系統(tǒng)中ps命令即可查看
3)發(fā)布/訂閱添加pub/sub命令
4)Redis Sentinel第二版發(fā)布,較Redis 2.6更加完善,可以線上使用
5)可以通過(guò)config set命令設(shè)置maxclients等
???Redis3.0
1)推出Redis的分布式集群 Redis Cluster
2)全新的embedded string對(duì)象編碼結(jié)果,優(yōu)化小對(duì)象的內(nèi)存訪問(wèn),在特定的工作負(fù)載下能大幅度提升性能
3)LRU算法提升
4)config set 設(shè)置maxmemory的時(shí)候可以設(shè)置不用的單位
5)新的Client pause命令,在指定時(shí)間內(nèi)停止處理客戶端請(qǐng)求等
???Redis3.2
1)添加GEO功能
2)新的List編碼類型quicklist?
3)SDS在速度和節(jié)省空間上都做了優(yōu)化
4)Lua腳本功能增強(qiáng)
5)新的RDB格式,仍兼容舊版RDB,同時(shí)加載速度上也有提升
6)Cluster nodes命令加速等
?
在Redis4.0版本上,我認(rèn)為最核心的功能應(yīng)該是支持了module,這極大的豐富的Redis的功能,使得許多Redis本身不具有的,第三方開(kāi)發(fā)者拓展的功能也能加載到Redis中當(dāng)一個(gè)功能進(jìn)行使用,比如RediSearch、ReJSON、Redis-ML等。除此之外,還看到有很多新特性:
1)psync2.0,優(yōu)化了之前版本主從節(jié)點(diǎn)切換必然引起全量復(fù)制的問(wèn)題
2)提供全新的緩存剔除算法LFU,并對(duì)已有算法進(jìn)行了優(yōu)化
3)提供了非阻塞del和flushall和flushdb功能,有效解決了刪除bigkey可能造成的Redis阻塞
4)提供了RDB-AOF混合持久化格式
5)提供memory命令,實(shí)現(xiàn)對(duì)內(nèi)存的更為全面的監(jiān)控統(tǒng)計(jì)
6)Redis Cluster 兼容NAT和Docker
7)引入Jemalloc庫(kù),優(yōu)化內(nèi)存訪問(wèn)等等
?
您能介紹一下Redis中的數(shù)據(jù)類型和它們的使用場(chǎng)景嗎?
4Redis之所以能夠被廣泛的應(yīng)用于企業(yè)的架構(gòu)中,而且是不可或缺的重要組成部分,也可以說(shuō)是標(biāo)配吧,其中很重要的一點(diǎn)就是得益于它具有豐富的數(shù)據(jù)結(jié)構(gòu),這也是它逐漸替代Memcached,備受青睞的重要原因。那么Redis都提供哪些數(shù)據(jù)類型呢?
相信對(duì)Redis有了解過(guò)的同學(xué)都知道,它的數(shù)據(jù)類型有:String、Hash、List、Set、Zset、Bitmaps、HyperLogLog、GEO等。
?
隨著互聯(lián)網(wǎng)的興起和Redis技術(shù)的不斷完善和發(fā)展,它已經(jīng)被廣泛應(yīng)用于各行各業(yè)中,應(yīng)用場(chǎng)景也是百花齊放。比如:會(huì)話緩存(Session cache)、全頁(yè)緩存(FPC)、手機(jī)驗(yàn)證碼、訪問(wèn)頻率限制/黑白名單、消息隊(duì)列、發(fā)布與訂閱、消息通知、排名/排行榜/最新列表、計(jì)數(shù)器(比如微博的轉(zhuǎn)評(píng)贊計(jì)數(shù)、閱讀數(shù)(瀏覽數(shù),視頻播放計(jì)數(shù))、博文數(shù)(發(fā)帖數(shù))、粉絲數(shù)、關(guān)注數(shù)(喜歡商品數(shù))、未讀數(shù)(動(dòng)態(tài)數(shù)))、共同好友/喜好/標(biāo)簽、推送、下拉刷新、私信、商品庫(kù)存管理(限時(shí)的優(yōu)惠活動(dòng)信息)、證券指標(biāo)實(shí)時(shí)計(jì)算,發(fā)號(hào)器/UUID、以及隨著LBS(基于位置服務(wù))的發(fā)展,加入的GEO(地理信息定位)的功能和基于Lua自定義命令或功能等等。大家在使用過(guò)程中,需要結(jié)合自己的業(yè)務(wù)場(chǎng)景,選擇正確的數(shù)據(jù)類型。
?
Redis數(shù)據(jù)庫(kù)有哪些主要的特點(diǎn)和優(yōu)勢(shì)?使用時(shí)有什么需要關(guān)注的點(diǎn),可能會(huì)帶來(lái)哪些問(wèn)題,可否通過(guò)實(shí)踐案例詳細(xì)描述一下?
5Redis作為基于K-V的NoSQL數(shù)據(jù)庫(kù),具有高性能、豐富的數(shù)據(jù)結(jié)構(gòu)、持久化、高可用、分布式、支持復(fù)制等特性。從09年至今,經(jīng)歷8年多的錘煉,已經(jīng)非常穩(wěn)定,并且得到業(yè)界的廣泛認(rèn)可和使用,同時(shí)社區(qū)非常活躍,開(kāi)發(fā)者又很嚴(yán)謹(jǐn),這使得Redis版本非常精簡(jiǎn),bug fix非常高效。根據(jù)similarweb.com的統(tǒng)計(jì),中國(guó)Redis用戶占全球Redis用戶的40.96%,所以我們?cè)谑褂玫倪^(guò)程中遇到的問(wèn)題,大部分可能都有解決方案。
需要關(guān)注的點(diǎn)比較多,之前在CRUG深圳站活動(dòng)的分享中也提到過(guò)一些,下面舉一些例子吧:
1)安全問(wèn)題:Redis用非root用戶啟動(dòng),并且運(yùn)行在內(nèi)網(wǎng),盡可能不要暴露在外網(wǎng),配置認(rèn)證requirepass xxx,減少被攻擊的風(fēng)險(xiǎn);開(kāi)啟危險(xiǎn)命令認(rèn)證(keys-need-auth yes ??rename-command KEYS MY_KEYS)
2)容量問(wèn)題:合理評(píng)估;合理使用內(nèi)存分配策略(no-enviction、allkeys-random、allkeys-lru、volatile-random、volatile-ttl、volatile-lru);檢查是否有內(nèi)存碎片;選擇合適的服務(wù)類型(Redis cluster或者pika);水平拆分;性能滿足的條件下選擇諸如ziplist類的內(nèi)部編碼
3)big-key問(wèn)題:可能會(huì)引起慢查或者帶寬瓶頸,按照業(yè)務(wù)邏輯拆成小key或者業(yè)務(wù)解耦剝離big-key或直接改用其他存儲(chǔ)方式
4)hot-key問(wèn)題:Redis是單進(jìn)程,節(jié)點(diǎn)實(shí)例很容易成為系統(tǒng)的短板,垂直擴(kuò)容;增加local cache;如果只是簡(jiǎn)單的k-v結(jié)構(gòu),可以考慮使用Memcached
5)使用姿勢(shì)問(wèn)題:避免使用阻塞操作(如:flushall、flushdb、keys *等);盡量使用Pipeline,減少syscall帶來(lái)的網(wǎng)絡(luò)IO,但要注意限制數(shù)據(jù)量大小;對(duì)多個(gè)元素操作時(shí),像使用SORT、LREM、SUNION,計(jì)算復(fù)雜度為O(N), 避免線上亂用;盡可能使用最新的版本
6)Key過(guò)期問(wèn)題:合理設(shè)置過(guò)期時(shí)間;如果存在許多該過(guò)期的key而沒(méi)被及時(shí)刪除,可以通過(guò)命令scan、hscan、sscan、zscan、keys *遍歷一遍key的方式實(shí)現(xiàn)
7)配置上:建議開(kāi)啟tcp-keepalive,tcp-backlog,從庫(kù)設(shè)置readonly yes
8)系統(tǒng)設(shè)置:關(guān)閉NUMA;關(guān)閉transparent?_hugepage; 關(guān)閉swap
等等,大家有問(wèn)題的時(shí)候可以相互交流。
?
Redis如何做消息隊(duì)列?
6Redis做消息隊(duì)列,有兩種實(shí)現(xiàn)方式:
第一種:通過(guò)數(shù)據(jù)結(jié)構(gòu)List來(lái)實(shí)現(xiàn)
優(yōu)點(diǎn):能夠?qū)崿F(xiàn)持久化;支持集群;接口使用簡(jiǎn)單
缺點(diǎn):
如上圖所示,一條消息只會(huì)被一個(gè)消費(fèi)者消費(fèi),所以不存在有多個(gè)消費(fèi)者消費(fèi)一條消息
生產(chǎn)者和消費(fèi)者的高可用或崩潰后的處理機(jī)制需要自己實(shí)現(xiàn)
當(dāng)生產(chǎn)者消息寫(xiě)入太快,消費(fèi)者消費(fèi)太慢,則有可能會(huì)導(dǎo)致內(nèi)存溢出問(wèn)題,導(dǎo)致進(jìn)程crash
第二種:通過(guò)pub/sub來(lái)實(shí)現(xiàn)
優(yōu)點(diǎn):
一個(gè)生產(chǎn)者可以對(duì)應(yīng)多個(gè)消費(fèi)者,但是必須保證消息發(fā)布者和消息的訂閱者同時(shí)在線,否則,否則一旦消息訂閱者由于各種異常情況而被迫斷開(kāi)連接,在其重新連接后,其離線期間的消息是無(wú)法被重新通知的(即發(fā)即棄)。當(dāng)然,生產(chǎn)者不需要關(guān)心有多少的訂閱者,也不用關(guān)心訂閱者的具體信息,而訂閱者可以根據(jù)需要自由選擇訂閱哪些頻道:支持集群;接口使用簡(jiǎn)單等。
缺點(diǎn):
沒(méi)有持久化機(jī)制,屬于即發(fā)即棄模式,因此也不需要制定消息的備份和恢復(fù)機(jī)制
Redis沒(méi)有提供保證pub/sub消息性能的方案
當(dāng)大量的消息到達(dá)Redis服務(wù)時(shí),如果訂閱者不能及時(shí)完成消費(fèi),則就會(huì)導(dǎo)致消息堆積,引發(fā)上面一樣的內(nèi)存問(wèn)題??????
您可以介紹下當(dāng)前Redis的集群功能和實(shí)現(xiàn)嗎?
7要了解Redis的集群功能,可以從數(shù)據(jù)分片、數(shù)據(jù)遷移、集群通訊、故障檢測(cè)以及故障轉(zhuǎn)移等方面進(jìn)行了解,Cluster相關(guān)的代碼也不是很多,注釋也很詳細(xì),可自行查看,地址是:https://github.com/antirez/redis/blob/unstable/src/cluster.c。
這里由于篇幅的原因,主要從數(shù)據(jù)分片和數(shù)據(jù)遷移兩方面進(jìn)行詳細(xì)介紹:
數(shù)據(jù)分片
Redis cluster在設(shè)計(jì)中沒(méi)有使用一致性哈希(consistency hashing),而是使用數(shù)據(jù)分片(sharding),引入哈希槽(hash slot)來(lái)實(shí)現(xiàn);一個(gè) redis cluster包含16384(0~16383)個(gè)哈希槽,存儲(chǔ)在redis cluster中的所有的鍵都會(huì)被映射到這些slot中,集群中的每個(gè)鍵都屬于這16384個(gè)哈希槽的其中一個(gè),集群使用公式slot=CRC16(key)/16384來(lái)計(jì)算key屬于哪個(gè)槽,其中CRC16(key)語(yǔ)句用于計(jì)算key的CRC16 校驗(yàn)和。
集群中的每個(gè)主節(jié)點(diǎn)(Master)都負(fù)責(zé)處理16384個(gè)哈希槽中的一部分,當(dāng)集群處于穩(wěn)定狀態(tài)時(shí),每個(gè)哈希槽都只由一個(gè)主節(jié)點(diǎn)進(jìn)行處理,每個(gè)主節(jié)點(diǎn)可以有一個(gè)到N個(gè)從節(jié)點(diǎn)(Slave),當(dāng)主節(jié)點(diǎn)出現(xiàn)宕機(jī)或網(wǎng)絡(luò)斷線等不可用時(shí),從節(jié)點(diǎn)能自動(dòng)提升為主節(jié)點(diǎn)進(jìn)行處理。
如上,clusterNode數(shù)據(jù)結(jié)構(gòu)中的slots和numslots屬性記錄了節(jié)點(diǎn)負(fù)責(zé)處理哪些槽。其中,slot屬性是一個(gè)二進(jìn)制位數(shù)組(bitarray),其長(zhǎng)度為16384/8=2048 Byte,共包含16384個(gè)二進(jìn)制位。集群中的master節(jié)點(diǎn)用bit(0和1)來(lái)標(biāo)識(shí)對(duì)于某個(gè)槽是否擁有。比如,對(duì)于編號(hào)為1的槽,master只要判斷序列的第二位(索引從0開(kāi)始)的值是不是1即可,時(shí)間復(fù)雜度為O(1)。
集群中所有槽的分配信息都保存在clusterState數(shù)據(jù)結(jié)構(gòu)的slots數(shù)組中,程序要檢查槽i是否已經(jīng)被分配或者找出處理槽i的節(jié)點(diǎn),只需要訪問(wèn)clusterState.slots[i]的值即可,復(fù)雜度也為O(1)。clusterState數(shù)據(jù)結(jié)構(gòu)如下所示:
查找關(guān)系如下圖:
數(shù)據(jù)遷移
數(shù)據(jù)遷移可以理解為slot和key的遷移,這個(gè)功能很重要,極大的方便了集群做線性擴(kuò)展,實(shí)現(xiàn)平滑的擴(kuò)容或縮容。
那么它是一個(gè)怎樣的實(shí)現(xiàn)過(guò)程呢?
下面舉個(gè)例子:現(xiàn)在要將Master A節(jié)點(diǎn)中的編號(hào)為1、2、3的slot遷移到Master B節(jié)點(diǎn)中,在slot遷移的中間狀態(tài)下,slot 1、2、3在Master A節(jié)點(diǎn)的狀態(tài)表現(xiàn)為MIGRATING,在Master B節(jié)點(diǎn)的狀態(tài)表現(xiàn)為IMPORTING。
MIGRATING狀態(tài)
這個(gè)狀態(tài)如上圖所示是被遷移slot在當(dāng)前所在Master A節(jié)點(diǎn)中出現(xiàn)的一種狀態(tài),預(yù)備遷移slot從Mater A到Master B的時(shí)候,被遷移slot的狀態(tài)首先變?yōu)镸IGRATING狀態(tài),當(dāng)客戶端請(qǐng)求的某個(gè)key所屬的slot的狀態(tài)處于MIGRATING狀態(tài)的時(shí)候,可能會(huì)出現(xiàn)以下幾種情況:
1)如果key存在則成功處理
2)如果key不存在,則返回客戶端ASK,客戶端根據(jù)ASK首先發(fā)送ASKING命令到目標(biāo)節(jié)點(diǎn),然后發(fā)送請(qǐng)求的命令到目標(biāo)節(jié)點(diǎn)
3)當(dāng)key包含多個(gè)命令時(shí):
如果都存在則成功處理
如果都不存在,則返回客戶端ASK
如果一部分存在,則返回客戶端TRYAGAIN,通知客戶端稍后重試,這樣當(dāng)所有的key都??? 遷移完畢的時(shí)候客戶端重試請(qǐng)求的時(shí)候回得到ASK,然后經(jīng)過(guò)一次重定向就可以獲取這批鍵
此時(shí)并不刷新客戶端中node的映射關(guān)系
IMPORTING狀態(tài)
這個(gè)狀態(tài)如上圖所示是被遷移slot在目標(biāo)Master B節(jié)點(diǎn)中出現(xiàn)的一種狀態(tài),預(yù)備遷移slot從Mater A到Master B的時(shí)候,被遷移slot的狀態(tài)首先變?yōu)镮MPORTING狀態(tài)。在這種狀態(tài)下的slot對(duì)客戶端的請(qǐng)求可能會(huì)有下面幾種影響:
1)如果key不存在則新建
2)如果key不在該節(jié)點(diǎn)上,命令會(huì)被MOVED重定向,刷新客戶端中node的映射關(guān)系
如果是ASKING命令則命令會(huì)被執(zhí)行,從而key沒(méi)在被遷移的節(jié)點(diǎn),已經(jīng)被遷移到目標(biāo)節(jié)點(diǎn)的情況命令可以被順利執(zhí)行。
鍵空間遷移
這是完成數(shù)據(jù)遷移重要的一步,鍵空間遷移是指當(dāng)滿足了slot遷移前提的情況下,通過(guò)相關(guān)命令將slot 1、2、3中的鍵空間從Master A節(jié)點(diǎn)轉(zhuǎn)移到Master B節(jié)點(diǎn),這個(gè)過(guò)程由MIGRATE命令經(jīng)過(guò)3步真正完成數(shù)據(jù)轉(zhuǎn)移。步驟示意如下:
經(jīng)過(guò)上面三步可以完成鍵空間數(shù)據(jù)遷移,然后再將處于MIGRATING和IMPORTING狀態(tài)的槽變?yōu)槌B(tài)即可,從而完成整個(gè)重新分片的過(guò)程。
?
請(qǐng)您簡(jiǎn)單介紹下Redis的高可用方案,如果可以,結(jié)合您的實(shí)踐經(jīng)驗(yàn)和案例進(jìn)行分析
8根據(jù)業(yè)務(wù)的規(guī)模以及Redis使用環(huán)境的不同,Redis的高可用方案也比較多。這里舉一些例子說(shuō)明一下業(yè)界比較常用的一些方案吧。需要說(shuō)明一下的是下面的這些方案不涉及到同城多活或異地多活的場(chǎng)景,但是部分方案能夠做到跨數(shù)據(jù)中心的災(zāi)備。
?Keepalive + Redis
?
?
?
?Redis Sentinel
?Twemproxy + Redis Sentinel + Redis
?
?Redis Cluster
?Redis Sentinel + Proxy + Zookeeper + Redis
?Zookeeper + MySQL + Redis + DNS
Redis數(shù)據(jù)庫(kù)在向著自動(dòng)化運(yùn)維的方向發(fā)展的過(guò)程中,面臨的最大的挑戰(zhàn)是什么?如何克服?
9如果不強(qiáng)調(diào)“最大的”話,我知道有不少的挑戰(zhàn),哈哈。
我想最大的挑戰(zhàn)應(yīng)該是“智能化”吧。現(xiàn)在業(yè)界都在追捧DevOps、AIOps,那么在Redis的自動(dòng)化運(yùn)維過(guò)程中,也需要學(xué)習(xí)行業(yè)的先進(jìn)思想,結(jié)合部門自身的實(shí)際穩(wěn)扎穩(wěn)打,逐一突破。
首先在智能化實(shí)現(xiàn)之前,我們要盡力實(shí)現(xiàn)下面的一些需求:
1)數(shù)據(jù)庫(kù)運(yùn)維自動(dòng)化平臺(tái)的建設(shè),為RD和DBA提供較全面的自助服務(wù)和數(shù)據(jù)庫(kù)管理功能
2)工單事件關(guān)聯(lián)任務(wù)系統(tǒng),一鍵完成自動(dòng)安裝部署,添加產(chǎn)品線和報(bào)警
3)海量報(bào)警智能分類(比如按產(chǎn)品線或按DBA分類),實(shí)現(xiàn)部分報(bào)警故障自愈?(比如:從庫(kù)readonly設(shè)置、內(nèi)存使用率超過(guò)95%自動(dòng)擴(kuò)容)
4)基于隊(duì)列分布式批量部署,可橫向擴(kuò)展,任務(wù)異步調(diào)度,滿足大規(guī)模部署、擴(kuò)容的需求
5)日志實(shí)時(shí)展示,監(jiān)控?cái)?shù)據(jù)實(shí)時(shí)采集,圖形化多維度展示,滿足可視化的需求
6)RedisHA支持秒級(jí)響應(yīng),實(shí)現(xiàn)故障無(wú)縫切換,滿足高可用的需求
7)緩存彈性擴(kuò)縮容(利用私有云和公有云,結(jié)合Docker容器化技術(shù)實(shí)現(xiàn)),滿足對(duì)熱點(diǎn)的快速應(yīng)對(duì)
8)內(nèi)部開(kāi)發(fā)了各種通用的管理和運(yùn)維腳本,化繁為簡(jiǎn),提高工作效率
9)根據(jù)歷史/晚高峰資源的性能指標(biāo)設(shè)置水位線,和報(bào)警閾值,提供決策支持
10)在Redis集群、容災(zāi)、異地多活(跨數(shù)據(jù)中心數(shù)據(jù)同步)、微服務(wù)等等方面還需要花很大的力氣去建設(shè),目前依舊比較欠缺
智能化的實(shí)現(xiàn)還需要持續(xù)的投入和迭代。
?
近幾年隨著大數(shù)據(jù)時(shí)代的到來(lái),NoSQL數(shù)據(jù)庫(kù)在處理海量數(shù)據(jù)上表現(xiàn)出越來(lái)越多的優(yōu)勢(shì),請(qǐng)問(wèn)您如何看待數(shù)據(jù)庫(kù)的未來(lái),會(huì)朝著什么樣的方向發(fā)展?
10是的,這幾年從運(yùn)維的角度看,明顯能感覺(jué)到數(shù)據(jù)體量上的膨脹,一個(gè)實(shí)例動(dòng)不動(dòng)就幾十G,一個(gè)集群動(dòng)不動(dòng)幾百G、幾T,甚至更多。以Redis為代表的NoSQL數(shù)據(jù)庫(kù)在處理這方面的表現(xiàn)還是令人非常滿意的。它的高性能表現(xiàn)得淋漓盡致,從微博的業(yè)務(wù)來(lái)看,Redis實(shí)例每天承載著千億級(jí)的寫(xiě)QPS、萬(wàn)億級(jí)的讀QPS,數(shù)據(jù)量TB級(jí),確實(shí)沒(méi)有Redis,且不說(shuō)能不能用關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ),單是硬件成本就幾何倍增長(zhǎng)了吧。
未來(lái),隨著硬件成本的降低,硬件性能優(yōu)化的極致,比如PCIE、25GE網(wǎng)絡(luò)的升級(jí),一定是軟硬結(jié)合,會(huì)出現(xiàn)更多的Redis的相關(guān)產(chǎn)品和服務(wù)。包括收費(fèi)的Redis Enterprise,Cloud Redis等,也包括開(kāi)源的Pika、TiDB等NewSQL。正如阿里云的同學(xué)所說(shuō),“數(shù)據(jù)庫(kù)終極是九九歸一 -- 量子數(shù)據(jù)庫(kù)”,一起期待吧。
對(duì)于初學(xué)Redis的同學(xué),您有什么好的學(xué)習(xí)方法和技巧給他們嗎?
11首先當(dāng)然還是需要多看官方文檔,多看看業(yè)界大牛的技術(shù)博客。其次可以買幾本書(shū)對(duì)比著學(xué)習(xí)下,目前市面上的相關(guān)書(shū)籍也就4,5本的樣子。然后主要的還是要多動(dòng)手,實(shí)踐出真知,在使用的過(guò)程中,還是要結(jié)合具體的業(yè)務(wù)場(chǎng)景,靈活使用。有能力的時(shí)候,看看源碼,了解底層的實(shí)現(xiàn)原理。最后,多思考多總結(jié),好記性不如爛筆頭,每一次踩坑都是一次成長(zhǎng),遇到解決不了的問(wèn)題的時(shí)候多向業(yè)界大牛們請(qǐng)教學(xué)習(xí),平時(shí)多關(guān)注一些業(yè)界相關(guān)技術(shù)的最新動(dòng)態(tài)。
您如何看待Redis的未來(lái)?從技術(shù)和非技術(shù)的多個(gè)維度,您如何看待Redis的發(fā)展方向
12縱觀Redis的發(fā)展,無(wú)獨(dú)有偶的與互聯(lián)網(wǎng)的發(fā)展浪潮緊緊相隨,從web1.0到web2.0的轉(zhuǎn)變,從博客、貼吧、論壇到社交媒體,從文本到圖文再到短視頻的興起,從互聯(lián)網(wǎng)到移動(dòng)互聯(lián)網(wǎng),從3G到4G到即將普及的5G,從異軍突起的新興產(chǎn)業(yè),如:團(tuán)購(gòu)、電商、外賣、旅游、游戲、互聯(lián)網(wǎng)金融和證券、出行和直播等等,商業(yè)模式在不斷的改變,不斷的在刷新人們的生活方式。
但是在這些變化的背后,不變的是Redis作為基礎(chǔ)服務(wù)為企業(yè)的高可用架構(gòu)保駕護(hù)航,變化的是Redis的使用案例越來(lái)越豐富、服務(wù)體驗(yàn)越來(lái)越好。在Redis的發(fā)展過(guò)程中,由于企業(yè)需求的多樣化,對(duì)Redis的要求越來(lái)越高,許多場(chǎng)景Redis的功能顯得相形見(jiàn)絀,因此出現(xiàn)了諸如Codis、Pika、CounterService、ApsaraCache、CacheCloud、smartClient(Redisson)等產(chǎn)品,它們是對(duì)Redis的有益補(bǔ)充。
隨著4.0版本module功能的推出,使得Redis擁有更多的想象和發(fā)展空間,在全文索引(RediSearch),AI(Redis-ML)、云計(jì)算、大數(shù)據(jù)、物聯(lián)網(wǎng)、人工智能、BlockChain等領(lǐng)域,模塊化的融合能力將極大的豐富Redis的功能,從而為企業(yè)構(gòu)建更為多元化、立體化的數(shù)據(jù)庫(kù)使用方式。
您還有什么想要分享的嗎?
13在使用Redis的過(guò)程中,還需要保持關(guān)注官方的動(dòng)態(tài),多看看github上的changelog和issue,因?yàn)殡S著Redis的用戶群體的增多,使用場(chǎng)景的復(fù)雜化,Redis自身隱藏的問(wèn)題或瓶頸也會(huì)暴露出來(lái),這樣有助于我們避免踩一些不必要的坑,及早規(guī)避一些風(fēng)險(xiǎn)。
不僅僅是Redis,學(xué)習(xí)其他的數(shù)據(jù)庫(kù)也是一樣的。另外,我們?cè)陉P(guān)注Redis本身以外,還需要關(guān)注一些其他的Redis的替代產(chǎn)品(比如:SSDB、Pika、Codis、ApsaraCache、TiDB等),Redis的周邊工具(如:redis-migrate-tool、redis-faina、redis-audit、redis-rdb-tools、RedisMyAdmin等)、中間件(如:twemproxy、corvus、redis-cerberus)等。如果你想要從事Redis的開(kāi)發(fā),那么你可能需要關(guān)注的更多,比如各種鎖的實(shí)現(xiàn)。
跨界與融合、機(jī)遇與挑戰(zhàn)、個(gè)人與企業(yè)、現(xiàn)在與未來(lái)。讓各行業(yè)、企業(yè),以及每一個(gè)向未來(lái)而努力的人,聽(tīng)見(jiàn)時(shí)代最前沿的聲音,見(jiàn)證成長(zhǎng)!
推薦閱讀:
遇見(jiàn)未來(lái)|DB舞臺(tái)誰(shuí)是王者之PostgreSQL專訪
遇見(jiàn)未來(lái) | 軟件定義數(shù)據(jù)中心:人類文明運(yùn)行在軟件之上
遇見(jiàn)未來(lái) | 超融合如何兼顧企業(yè)的“敏態(tài)”和“穩(wěn)態(tài)”的業(yè)務(wù)需求
資源下載
關(guān)注公眾號(hào):數(shù)據(jù)和云(OraNews)回復(fù)關(guān)鍵字獲取
‘2017DTC’,2017DTC大會(huì)PPT
‘DBALIFE’,“DBA的一天”海報(bào)
‘DBA04’,DBA手記4經(jīng)典篇章電子書(shū)
‘RACV1’,?RAC系列課程視頻及ppt
‘122ARCH’,Oracle 12.2體系結(jié)構(gòu)圖
‘2017OOW’,Oracle OpenWorld資料
‘PRELECTION’,大講堂講師課程資料
總結(jié)
以上是生活随笔為你收集整理的对话张冬洪 | 全面解读NoSQL数据库Redis的核心技术与应用实践的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 一月英语
- 下一篇: SQL子查询和关联子查询