官术网_书友最值得收藏!

5.3 緩存集群升級(jí)場(chǎng)景

很多初創(chuàng)團(tuán)隊(duì)的蠻荒期,并沒(méi)有完整的底層服務(wù)。

團(tuán)隊(duì)在初建時(shí)業(yè)務(wù)體量不大,在預(yù)估的系統(tǒng)服務(wù) QPS 較低、系統(tǒng)壓力較小、并發(fā)訪(fǎng)問(wèn)量少、近一年沒(méi)有大動(dòng)作等條件下,結(jié)合快速起步、時(shí)間緊迫、成本投入的因素,并不會(huì)投入特別多的研發(fā)資源構(gòu)建出非常完善的系統(tǒng)架構(gòu)。如圖5-3所示,就像對(duì)Redis的使用,可能最開(kāi)始只需要一個(gè)單機(jī)就可以滿(mǎn)足現(xiàn)狀。但隨著業(yè)務(wù)超預(yù)期的快速發(fā)展,系統(tǒng)的負(fù)載能力也要隨之跟上,原有的單機(jī)Redis已經(jīng)無(wú)法滿(mǎn)足系統(tǒng)的需要。這時(shí)就需要建設(shè)或者更換更為健壯的Redis集群服務(wù),在這個(gè)升級(jí)的過(guò)程中是不能停系統(tǒng)的,并且需要平滑過(guò)渡。

圖5-3

隨著系統(tǒng)的升級(jí),可以預(yù)見(jiàn)的問(wèn)題有如下幾種:

·很多服務(wù)用到了Redis,需要一起升級(jí)到集群。

·需要兼容集群A和集群B,便于后續(xù)的災(zāi)備,并及時(shí)切換集群。

·兩套集群提供的接口和方法各有差異,需要進(jìn)行適配。

·不能影響目前正常運(yùn)行的系統(tǒng)。

雖然升級(jí)是必須要做的,但怎樣執(zhí)行卻顯得非常重要。

5.3.1 場(chǎng)景模擬工程

在以上的場(chǎng)景模擬工程中,包括了如下信息。

·在業(yè)務(wù)初期,單機(jī)Redis服務(wù)工具類(lèi)RedisUtils主要負(fù)責(zé)的是提供早期 Redis的使用。

·在業(yè)務(wù)初期,單機(jī) Redis 服務(wù)功能類(lèi) CacheService 接口以及它對(duì)應(yīng)的實(shí)現(xiàn)類(lèi)CacheServiceImpl。

·隨著后續(xù)業(yè)務(wù)的發(fā)展,新增加兩套R(shí)edis集群EGM、IIR,作為互備使用。

接下來(lái)分別介紹三個(gè)Redis服務(wù)提供的緩存功能,以及初期的使用方法。同時(shí)需要注意這三套R(shí)edis服務(wù)在使用上會(huì)有一些不同,包括:接口的名稱(chēng)、入?yún)⒌男畔ⅲ@些也是在使用設(shè)計(jì)模式時(shí)需要優(yōu)化處理的要點(diǎn)。

5.3.2 Redis單機(jī)服務(wù)RedisUtils

首先需要注意一點(diǎn),我們是使用Map模擬Redis的相關(guān)功能,這樣比較方便測(cè)試。這里把關(guān)注點(diǎn)放在架構(gòu)設(shè)計(jì)上。

5.3.3 Redis集群服務(wù)EGM

這里模擬第一個(gè)Redis集群服務(wù),需要注意觀察這里的方法名稱(chēng)及入?yún)⑿畔ⅲc使用單體Redis服務(wù)時(shí)是不同的。有點(diǎn)像A用mac系統(tǒng),B用Windows系統(tǒng),雖然可以做一樣的事,但操作方法不同。

5.3.4 Redis集群服務(wù)IIR

這是另一套R(shí)edis集群服務(wù),有時(shí)在企業(yè)開(kāi)發(fā)中可能有兩套服務(wù)做互相備份。這里也是為了模擬,所以添加兩套實(shí)現(xiàn)同樣功能的不同服務(wù),主要體現(xiàn)抽象工廠(chǎng)模式在這里發(fā)揮的作用。

綜上可以看到,目前的系統(tǒng)中已經(jīng)在大量地使用Redis服務(wù),但是因?yàn)橄到y(tǒng)不能滿(mǎn)足業(yè)務(wù)的快速發(fā)展,因此需要遷移到集群服務(wù)中。而這時(shí)有兩套集群服務(wù)需要兼容使用,又要滿(mǎn)足所有的業(yè)務(wù)系統(tǒng)改造且不能影響線(xiàn)上使用。

5.3.5 模擬早期單體Redis使用

接下來(lái)介紹在模擬的案例中,對(duì)單體Redis服務(wù)的使用方式。后續(xù)會(huì)通過(guò)兩種方式將這部分代碼擴(kuò)展為使用Redis集群服務(wù)。

1.定義Redis使用接口

2.實(shí)現(xiàn)Redis使用接口

目前,Redis使用的代碼比較簡(jiǎn)單,在一些體量不大的業(yè)務(wù)場(chǎng)景中不會(huì)有什么問(wèn)題。但如果體量增加,改造升級(jí)的過(guò)程就會(huì)比較麻煩。因?yàn)榇藭r(shí)所有的業(yè)務(wù)系統(tǒng)都有同樣的使用方式,所以如果每一個(gè)系統(tǒng)都需要通過(guò)硬編碼的方式進(jìn)行改造就不那么容易了。此時(shí),可以先思考怎樣從單體Redis的使用升級(jí)到 Redis 集群的使用。

主站蜘蛛池模板: 天长市| 洛川县| 建德市| 太谷县| 剑川县| 武宣县| 富宁县| 富裕县| 旺苍县| 西吉县| 静海县| 乳山市| 汝南县| 丹寨县| 容城县| 延长县| 保靖县| 邵阳县| 乐山市| 扶绥县| 依兰县| 建瓯市| 泗阳县| 金山区| 宝丰县| 佳木斯市| 通榆县| 佛冈县| 郴州市| 安西县| 扎鲁特旗| 虹口区| 巴青县| 沙洋县| 呼玛县| 车致| 汉源县| 镇平县| 石景山区| 沙坪坝区| 鄂尔多斯市|