什么是 Cluster 集群 Redis 集群是一種分布式數(shù)據(jù)庫(kù)方案,集群通過(guò)分片(sharding)來(lái)進(jìn)行數(shù)據(jù)管理(「分治思想」的一種實(shí)踐),并提供復(fù)制和故障轉(zhuǎn)移功能。 將...
什么是 Cluster 集群 Redis 集群是一種分布式數(shù)據(jù)庫(kù)方案,集群通過(guò)分片(sharding)來(lái)進(jìn)行數(shù)據(jù)管理(「分治思想」的一種實(shí)踐),并提供復(fù)制和故障轉(zhuǎn)移功能。 將...
我們知道主從復(fù)制是高可用的基石,從庫(kù)宕機(jī)依然可以將請(qǐng)求發(fā)送給主庫(kù)或者其他從庫(kù),但是 Master 宕機(jī),只能響應(yīng)讀操作,寫(xiě)請(qǐng)求無(wú)法再執(zhí)行。 所以主從復(fù)制架構(gòu)面臨一個(gè)嚴(yán)峻問(wèn)題,...
主從復(fù)制概述 有了 RDB 和 AOF 再也不怕宕機(jī)丟失數(shù)據(jù)了,但是 Redis 實(shí)例宕機(jī)了怎么實(shí)現(xiàn)高可用呢?既然一臺(tái)宕機(jī)了無(wú)法提供服務(wù),那多臺(tái)呢?是不是就可以解決了。Red...
我們通常將 Redis 作為緩存使用,提高讀取響應(yīng)性能,一旦 Redis 宕機(jī),內(nèi)存中的數(shù)據(jù)全部丟失,假如現(xiàn)在直接訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)大量流量打到 MySQL 可能會(huì)帶來(lái)更加嚴(yán)重的問(wèn)題...
到底有多快 根據(jù)官方數(shù)據(jù),Redis 的 QPS 可以達(dá)到約 100000(每秒請(qǐng)求數(shù)),有興趣的可以參考官方的基準(zhǔn)程序測(cè)試《How fast is Redis?》,地址:h...
Redis 作為目前通用的緩存選型,因其高性能而倍受歡迎。Redis 的 2.x 版本僅支持單機(jī)模式,從 3.0 版本開(kāi)始引入集群模式。 Redis 的 Java 生態(tài)的客戶(hù)...
拉模式(點(diǎn)對(duì)點(diǎn)消息) 如果沒(méi)有消費(fèi)者在監(jiān)聽(tīng)隊(duì)列,消息將保留在隊(duì)列中,直至消息消費(fèi)者連接到隊(duì)列為止。在這種模型中,消息不是自動(dòng)推動(dòng)給消息消費(fèi)者的,而是要由消息消費(fèi)者從隊(duì)列中請(qǐng)求...
所謂的降級(jí)設(shè)計(jì)(Degradation),本質(zhì)是為了解決資源不足和訪(fǎng)問(wèn)量過(guò)大的問(wèn)題。當(dāng)資源和訪(fǎng)問(wèn)量出現(xiàn)矛盾的時(shí)候,在有限的資源下,為了能夠扛住大量的請(qǐng)求,我們就需要對(duì)系統(tǒng)進(jìn)行...
保護(hù)系統(tǒng)不會(huì)在過(guò)載的情況下出現(xiàn)問(wèn)題,我們就需要限流。 我們?cè)谝恍┫到y(tǒng)中都可以看到這樣的設(shè)計(jì),比如,我們的數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)的連接池,還有我們的線(xiàn)程池,還有 Nginx 下的用于限制瞬...
熔斷機(jī)制這個(gè)詞肯定不陌生,它的靈感來(lái)源于我們電閘上的“保險(xiǎn)絲”,當(dāng)電壓有問(wèn)題時(shí)(比如短路),自動(dòng)跳閘,此時(shí)電路就會(huì)斷開(kāi),我們的電器就會(huì)受到保護(hù)。不然,會(huì)導(dǎo)致電器被燒壞,如果人...
關(guān)于重試,這個(gè)模式應(yīng)該是一個(gè)很普遍的設(shè)計(jì)模式了。當(dāng)我們把單體應(yīng)用服務(wù)化,尤其是微服務(wù)化,本來(lái)在一個(gè)進(jìn)程內(nèi)的函數(shù)調(diào)用就成了遠(yuǎn)程調(diào)用,這樣就會(huì)涉及到網(wǎng)絡(luò)上的問(wèn)題。 網(wǎng)絡(luò)上有很多的...
所謂冪等性設(shè)計(jì),就是說(shuō),一次和多次請(qǐng)求某一個(gè)資源應(yīng)該具有同樣的副作用。用數(shù)學(xué)的語(yǔ)言來(lái)表達(dá)就是:f(x) = f(f(x))。 比如,求絕對(duì)值的函數(shù),abs(x) = abs(...
前面所說(shuō)的隔離設(shè)計(jì)通常都需要對(duì)系統(tǒng)做解耦設(shè)計(jì),而把一個(gè)單體系統(tǒng)解耦,不單單是把業(yè)務(wù)功能拆分出來(lái),正如上面所說(shuō),拆分完后還會(huì)面對(duì)很多的問(wèn)題。其中一個(gè)重要的問(wèn)題就是這些系統(tǒng)間的通...
隔離設(shè)計(jì)對(duì)應(yīng)的單詞是 Bulkheads,中文翻譯為隔板。但其實(shí),這個(gè)術(shù)語(yǔ)是用在造船上的,也就是船艙里防漏水的隔板。一般的船無(wú)論大小都會(huì)有這個(gè)東西,大一點(diǎn)的船都會(huì)把船艙隔成若...
彈力設(shè)計(jì)又叫容錯(cuò)設(shè)計(jì),其中著眼于分布式系統(tǒng)的各種“容忍”能力,包括容錯(cuò)能力(服務(wù)隔離、異步調(diào)用、請(qǐng)求冪等性)、可伸縮性(有 / 無(wú)狀態(tài)的服務(wù))、一致性(補(bǔ)償事務(wù)、重試)、應(yīng)對(duì)...
首先,我們需要全棧系統(tǒng)監(jiān)控,它就像是我們的眼睛,沒(méi)有它,我們就不知道系統(tǒng)到底發(fā)生了什么,我們將無(wú)法管理或是運(yùn)維整個(gè)分布式系統(tǒng)。所以,這個(gè)系統(tǒng)是非常非常關(guān)鍵的。 而在分布式或 ...
構(gòu)建分布式系統(tǒng)的目的是增加系統(tǒng)容量,提高系統(tǒng)的可用性,轉(zhuǎn)換成技術(shù)方面,也就是完成下面兩件事。 大流量處理。通過(guò)集群技術(shù)把大規(guī)模并發(fā)請(qǐng)求的負(fù)載分散到不同的機(jī)器上。關(guān)鍵業(yè)務(wù)保護(hù)。...
最近幾年,我們一直在談?wù)摳魇礁鳂拥募軜?gòu),如高并發(fā)架構(gòu)、異地多活架構(gòu)、容器化架構(gòu)、微服務(wù)架構(gòu)、高可用架構(gòu)、彈性化架構(gòu)等。還有和這些架構(gòu)相關(guān)的管理型的技術(shù)方法,如 DevOps、...
SQL 的存儲(chǔ)過(guò)程,它是 SQL 中另一個(gè)重要應(yīng)用,和視圖一樣,都是對(duì) SQL 代碼進(jìn)行封裝,可以反復(fù)利用。它和視圖有著同樣的優(yōu)點(diǎn),清晰、安全,還可以減少網(wǎng)絡(luò)傳輸量。不過(guò)它和...