同程旅行王晓波:如何改变 Redis 用不好的误区
王曉波?
同程旅行 機(jī)票事業(yè)群 CTO
讀完需要
4
分鐘速讀僅需 2 分鐘
本章和大家分享一下同程鳳凰緩存系統(tǒng)在基于 Redis 方面的設(shè)計(jì)與實(shí)踐。如何改變 Redis 不好用的誤區(qū)
? 本文節(jié)選自中生代技術(shù)社區(qū)出品圖書(shū)《深入分布式緩存》
接上文《同程旅行王曉波:同程鳳凰緩存系統(tǒng)在基于 Redis 方面的設(shè)計(jì)與實(shí)踐(上篇)》
這樣的亂象一定是不可能繼續(xù)了,最少同程這樣的使用方式不可以再繼續(xù)了,使用者也開(kāi)始從喜歡到痛苦了。怎么辦?
這是一個(gè)很沉重的事:“一個(gè)被人用亂的系統(tǒng)就像一桌燒壞的菜,讓你重新回爐,還讓人叫好,是很困難的。”
關(guān)鍵是已經(jīng)用成這樣了,總不可能讓所有系統(tǒng)都停下來(lái),等待新系統(tǒng)上線并瞬間切換吧?這是個(gè)什么活?高速公路上換輪胎!
但問(wèn)題出現(xiàn)了總是要解決的,想了再想,論了再論,總結(jié)了以下幾點(diǎn):
必須搭建完善的監(jiān)控系統(tǒng),在這之前要先預(yù)警,不能等到發(fā)生了,我們才發(fā)現(xiàn)問(wèn)題。
控制和引導(dǎo) Redis 的使用,我們需要有自己研發(fā)的 Redis 客戶端,在使用時(shí)就開(kāi)始控制和引導(dǎo)。
Redis 的部分角色要改,將 Redis 由 storage 角色降低為 cache 角色。
Redis 的持久化方案要重新做,需要自己研發(fā)一個(gè)基于 Redis 協(xié)議的持久化方案,讓使用者可以把 Redis 當(dāng) DB 用。
Redis 的高可用要按照?qǐng)鼍胺珠_(kāi),根據(jù)不同的場(chǎng)景決定采用不同的高可用方案。
留給開(kāi)發(fā)同學(xué)的時(shí)間并不多,必須兩個(gè)月的時(shí)間來(lái)完成這些事情。這其實(shí)還是很有挑戰(zhàn)的,考驗(yàn)開(kāi)發(fā)同學(xué)這個(gè)輪胎到底能不換下來(lái)的時(shí)候到了。同學(xué)們開(kāi)始研發(fā)我們自己的 Redis 緩存系統(tǒng),下面我們來(lái)看一下這個(gè)代號(hào)為鳳凰的緩存系統(tǒng)的第一版方案。
首先是監(jiān)控系統(tǒng)
原有的開(kāi)源 Redis 監(jiān)控從大面上講只一些監(jiān)控工具,不能算作一個(gè)完整的監(jiān)控系統(tǒng)。當(dāng)然這個(gè)監(jiān)控是全方位從客戶端開(kāi)始一直到返回?cái)?shù)據(jù)的全鏈路的監(jiān)控。
其次是改造 Redis 客戶端
廣泛使用的 Redis 客戶端有的太簡(jiǎn)單有的太重,總之不是我們想要的東西,比如,.Net 下的 BookSleeve 和 servicestack.Redis (同程還有一點(diǎn)老的.Net 開(kāi)發(fā)的應(yīng)用),前者已經(jīng)好久沒(méi)人維護(hù)了,后者直接收費(fèi)了。好吧,我們就開(kāi)發(fā)一個(gè)客戶端,然后督促全公司的研發(fā)用它來(lái)替換目前正在使用的客戶端。在這個(gè)客戶端里面,我們植入了日志記錄,記錄了代碼對(duì) Redis 的所有操作事件,例如耗時(shí)、key、value 大小、網(wǎng)絡(luò)斷開(kāi)等,我們將這些有問(wèn)題的事件在后臺(tái)進(jìn)行收集,由一個(gè)收集程序進(jìn)行分析和處理,同時(shí)取消了直接的 IP 端口連接方式,通過(guò)一個(gè)配置中心分配 IP 地址和端口。當(dāng) Redis 發(fā)生問(wèn)題并需要切換時(shí),直接在配置中心修改,由配置中心推送新的配置到客戶端,這樣就免去了 Redis 切換時(shí)需要運(yùn)維人員修改配置文件的麻煩。另外,把 Redis 的命令操作分拆成兩部分:安全的命令和不安全的命令。對(duì)于安全的命令可以直接使用,對(duì)于不安全的命令需要分析和審批后才能打開(kāi),這也是由配置中心控制的,這樣就解決了研發(fā)人員使用 Redis 時(shí)的規(guī)范問(wèn)題,并且將 Redis 定位為緩存角色,除非有特殊需求,否則一律以緩存角色對(duì)待。
最后,對(duì) Redis 的部署方式也進(jìn)行了修改
以前是 Keepalived 的方式,現(xiàn)在換成了主從+哨兵的模式。另外,我們自己實(shí)現(xiàn)了 Redis 的分片,如果業(yè)務(wù)需要申請(qǐng)大容量的 Redis 數(shù)據(jù)庫(kù),就會(huì)把 Redis 拆分成多片,通過(guò) Hash 算法均衡每片的大小,這樣的分片對(duì)應(yīng)用層也是無(wú)感知的。
當(dāng)然重客戶端方式不好,并且我們要做的緩存不僅僅是單純的 Redis,我們還會(huì)做一個(gè) Redis 的 Proxy,提供統(tǒng)一的人口點(diǎn),Proxy 可以多份部署,客戶端無(wú)論連接的是哪個(gè) Proxy,都能取得完整的集群數(shù)據(jù),這樣就基本完成了按場(chǎng)景選擇不同的部署方式的問(wèn)題。
這樣的一個(gè) Proxy 也解決了多種開(kāi)發(fā)語(yǔ)言的問(wèn)題,例如,運(yùn)維系統(tǒng)是使用 Python 開(kāi)發(fā)的,也需要用到 Redis,就可以直接連 Proxy,然后接到統(tǒng)一的 Redis 體系中來(lái)。做客戶端也好,做 Proxy 也好,不只是為代理請(qǐng)求而是為了統(tǒng)一治理 Redis 緩存的使用,不讓亂象出現(xiàn)。讓緩存在一個(gè)可管可控的場(chǎng)景下穩(wěn)定的運(yùn)維,讓開(kāi)發(fā)者可以安全并肆無(wú)忌憚繼續(xù)亂用 Redis,但這個(gè)“亂”是被虛擬化的亂,因?yàn)樗牡讓邮强梢灾卫淼摹O到y(tǒng)架構(gòu)如圖 15-1 所示
圖 15-1 系統(tǒng)架構(gòu)圖
當(dāng)然以上這些改造都需要在不影響業(yè)務(wù)的情況下進(jìn)行。實(shí)現(xiàn)這個(gè)其實(shí)還是有不小的挑戰(zhàn),特別是分片,將一個(gè) Redis 拆分成多個(gè),還能讓客戶端正確找到所需要的 key,這需要非常小心,因?yàn)樯杂胁簧?#xff0c;內(nèi)存的數(shù)據(jù)就全部消失了。在這段時(shí)間里,我們開(kāi)發(fā)了多種同步工具,幾乎把 Redis 的主從協(xié)議整個(gè)實(shí)現(xiàn)了一遍,終于可以將 Redis 平滑過(guò)度到新的模式上了。(未完待續(xù))
想要加入中生代架構(gòu)群的小伙伴,請(qǐng)?zhí)砑尤汉匣锶?strong>大白的微信
申請(qǐng)備注(姓名+公司+技術(shù)方向)才能通過(guò)哦!
阿里技術(shù)精彩文章推薦
往期推薦
深度:揭秘阿里巴巴的客群畫(huà)像
多隆:從工程師到阿里巴巴合伙人
阿里技術(shù)專家楚衡:架構(gòu)制圖的工具與方法論
螞蟻集團(tuán)技術(shù)專家山丘:性能優(yōu)化常見(jiàn)壓測(cè)模型及優(yōu)缺點(diǎn)
阿里文娛技術(shù)專家戰(zhàn)獒: 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)詳解之What, Why, How?
阿里專家馬飛翔:一文讀懂架構(gòu)整潔之道
阿里專家常昊:新人如何上手項(xiàng)目管理?
螞蟻集團(tuán)沈凋墨:Kubernetes-微內(nèi)核的分布式操作系統(tǒng)
阿里合伙人范禹:常掛在阿里技術(shù)人嘴邊的四句土話
阿里技術(shù)專家都鐸:一文搞懂技術(shù)債
支付寶研究員兼OceanBase總架構(gòu)師楊傳輝:我在數(shù)據(jù)庫(kù)夢(mèng)之隊(duì)的十年成長(zhǎng)路
阿里技術(shù)專家麒燁:修煉測(cè)試基本功
阿里計(jì)算平臺(tái)掌門人賈揚(yáng)清:我對(duì)人工智能方向的一點(diǎn)淺見(jiàn)
螞蟻資深算法專家周俊:從原理到落地,支付寶如何打造保護(hù)隱私的共享智能?
阿里高級(jí)技術(shù)專家簫逸:如何畫(huà)好一張架構(gòu)圖?
阿里高級(jí)技術(shù)專家張建飛:應(yīng)用架構(gòu)分離業(yè)務(wù)邏輯和技術(shù)細(xì)節(jié)之道
螞蟻科技 Service Mesh 落地實(shí)踐與挑戰(zhàn) | GIAC 實(shí)錄
阿里6年,我的技術(shù)蛻變之路!
螞蟻集團(tuán)涵暢:再啟程,Service Mesh 前路雖長(zhǎng),尤可期許
阿里P9專家右軍:大話軟件質(zhì)量穩(wěn)定性
阿里合伙人程立:阿里15年,我撕掉了身上兩個(gè)標(biāo)簽
阿里高工流生 | 云原生時(shí)代的 DevOps 之道
阿里高級(jí)技術(shù)專家邱小俠:微服務(wù)架構(gòu)的理論基礎(chǔ) - 康威定律
阿里P9專家右軍:以終為始的架構(gòu)設(shè)計(jì)
阿里P8架構(gòu)師:淘寶技術(shù)架構(gòu)從1.0到4.0的架構(gòu)變遷!12頁(yè)P(yáng)PT詳解
阿里技術(shù):如何畫(huà)出一張合格的技術(shù)架構(gòu)圖?
螞蟻資深技術(shù)專家王旭:開(kāi)源項(xiàng)目是如何讓這個(gè)世界更安全的?
阿里資深技術(shù)專家崮德:8 個(gè)影響我職業(yè)生涯的重要技能
儒梟:我看技術(shù)人的成長(zhǎng)路徑
阿里高級(jí)技術(shù)專家宋意:平凡人在阿里十年的成長(zhǎng)之旅
阿里技術(shù)專家甘盤:淺談雙十一背后的支付寶LDC架構(gòu)和其CAP分析
阿里技術(shù)專家光錐:億級(jí)長(zhǎng)連網(wǎng)關(guān)的云原生演進(jìn)之路
阿里云原生張羽辰:服務(wù)發(fā)現(xiàn)技術(shù)選型那點(diǎn)事兒
螞蟻研究員玉伯:做一個(gè)簡(jiǎn)單自由有愛(ài)的技術(shù)人
阿里高級(jí)技術(shù)專家至簡(jiǎn): Service Mesh 在超大規(guī)模場(chǎng)景下的落地挑戰(zhàn)
阿里巴巴山獵:手把手教你玩轉(zhuǎn)全鏈路監(jiān)控
阿里涉江:你真的會(huì)學(xué)習(xí)嗎?從結(jié)構(gòu)化思維說(shuō)起
螞蟻金服資深技術(shù)專家經(jīng)國(guó):云原生時(shí)代微服務(wù)的高可用架構(gòu)設(shè)計(jì)
深入分布式緩存之EVCache探秘開(kāi)局篇
? ?END ? ?? #架構(gòu)師必備#點(diǎn)分享點(diǎn)點(diǎn)贊點(diǎn)在看總結(jié)
以上是生活随笔為你收集整理的同程旅行王晓波:如何改变 Redis 用不好的误区的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: JSP简单练习-省略显示长字符串
- 下一篇: autopoi升级到4.0版本修改方法