前幾天,在我們的技術(shù)交流群里看到有小伙伴問(wèn):有沒(méi)有練手搭建Redis集群的方式推薦:
不禁讓我想到,對(duì)于各種集群和分布式基礎(chǔ)設(shè)施的搭建,其實(shí)是每個(gè)開(kāi)發(fā)者進(jìn)階時(shí)候都要經(jīng)歷的一個(gè)成長(zhǎng)過(guò)程。但是,這里對(duì)于不少開(kāi)發(fā)者來(lái)說(shuō),卻又面臨著一個(gè)現(xiàn)實(shí)問(wèn)題:我沒(méi)有足夠的資源(主機(jī)或配置)去嘗試和練習(xí)。
最近,DD剛好看到阿里云有個(gè)可以免費(fèi)領(lǐng)機(jī)器的活動(dòng),還挺適合正在學(xué)習(xí)這方面技術(shù)內(nèi)容的小伙伴來(lái)領(lǐng)取做練手資源的。
#如何領(lǐng)取
這個(gè)免費(fèi)領(lǐng)機(jī)器的機(jī)會(huì),其實(shí)是阿里云ECS面向?qū)W生和個(gè)人開(kāi)發(fā)者的免費(fèi)試用活動(dòng)。它的規(guī)則是每個(gè)月提供280元的抵扣額度(實(shí)例部分200元,公網(wǎng)流量80元),在此額度內(nèi),可在5個(gè)地域試用1-4臺(tái)。
劃重點(diǎn)?。?!這次的免費(fèi)試用跟以前不一樣了,是可以領(lǐng)多臺(tái)的!
所以,我們只需要在免費(fèi)額度之內(nèi),選擇盡可能多的機(jī)器,就能滿(mǎn)足我們練習(xí)搭建各種集群的需求了。
領(lǐng)取入口:https://click.aliyun.com/m/1000380445/open in new window
進(jìn)入免費(fèi)試用頁(yè)面之后,按如圖操作:
當(dāng)然了,如果你不是想要搭建集群練手的話(huà),也可以選擇其他配置,只要符合控制每個(gè)月ECS的費(fèi)用在200元、公網(wǎng)費(fèi)用80元以?xún)?nèi),就可以免費(fèi)使用。
另外,這里告訴大家一個(gè)小秘籍:那就是不用的時(shí)候開(kāi)啟停機(jī)模式!??!能省則省,榨干每一分額度 ^_^
#練手推薦
如果您還是學(xué)生,或者平時(shí)參與的項(xiàng)目架構(gòu)沒(méi)那么復(fù)雜,不知道現(xiàn)階段有哪些東西可以去學(xué)習(xí),或者不知道應(yīng)該按什么順序去練手。那么,DD這里給大家一些建議,您可以跟著我下面的思路來(lái)嘗試一下,這些內(nèi)容都是后端開(kāi)發(fā)推薦掌握的必備技能。
下面推薦的內(nèi)容,我將以一個(gè)應(yīng)用演進(jìn)式發(fā)展的角度,來(lái)給大家梳理要學(xué)習(xí)的內(nèi)容順序,也讓大家了解到每個(gè)技術(shù)的基本應(yīng)用場(chǎng)景和引入時(shí)機(jī)。大家可以根據(jù)自己的情況選擇性的去選擇內(nèi)容練手。
#從0到1階段
通常來(lái)說(shuō),從0到1階段,作為一個(gè)初創(chuàng)應(yīng)用,沒(méi)有什么處理上的壓力,所以往往架構(gòu)是非常簡(jiǎn)單的。一臺(tái)服務(wù)器 + 一臺(tái)數(shù)據(jù)庫(kù),基本就搞定了。如果你從來(lái)沒(méi)有過(guò)這個(gè)體驗(yàn),那么可以嘗試一下下面的部署架構(gòu):
- 一臺(tái)機(jī)器搭建Nginx
- 兩臺(tái)臺(tái)機(jī)器部署應(yīng)用(雙實(shí)例)
- 一臺(tái)機(jī)器部署數(shù)據(jù)庫(kù)。
這里一個(gè)關(guān)鍵點(diǎn)在于Nginx的負(fù)載均衡配置,實(shí)現(xiàn)一個(gè)基礎(chǔ)且有一定高可用雛形的部署架構(gòu)。得益于兩臺(tái)服務(wù)器部署應(yīng)用,又有Nginx做負(fù)載均衡,還能實(shí)現(xiàn)滾動(dòng)發(fā)布,上線升級(jí)不影響用戶(hù)使用。
#從1到100階段
如果發(fā)展順利,用戶(hù)增長(zhǎng)還不錯(cuò),那么你們?cè)谧龅漠a(chǎn)品需要進(jìn)一波推廣了。此時(shí)往往會(huì)碰到兩個(gè)問(wèn)題:
一個(gè)是應(yīng)用服務(wù)器的負(fù)載增大,需要擴(kuò)容應(yīng)對(duì)更多請(qǐng)求。這個(gè)可以通過(guò)增加應(yīng)用部署,配合Nginx負(fù)載均衡來(lái)擴(kuò)容,如果你沒(méi)有像從0到1階段的那種結(jié)構(gòu)來(lái)部署的話(huà),這個(gè)時(shí)候這一步就一定要補(bǔ)上了。
其次,影響性能處理最大的瓶頸大概率出現(xiàn)在數(shù)據(jù)庫(kù)。所以,很多時(shí)候,我們將在這個(gè)階段引入數(shù)據(jù)庫(kù)的一些高級(jí)用法,比如:
- 一主多從集群open in new window:通過(guò)一主多從結(jié)構(gòu),實(shí)現(xiàn)讀寫(xiě)分離,用更多的機(jī)器來(lái)分?jǐn)倲?shù)據(jù)庫(kù)的負(fù)載。
- 多主多從集群open in new window:通過(guò)多主多從結(jié)構(gòu),將業(yè)務(wù)數(shù)據(jù)分庫(kù)處理。配合一些分庫(kù)框架和中間件,實(shí)現(xiàn)更大量級(jí)的數(shù)據(jù)存儲(chǔ)需求。
#從100到10000階段
隨著業(yè)務(wù)的繼續(xù)加速發(fā)展,數(shù)據(jù)訪問(wèn)層面的壓力會(huì)越來(lái)越大。這個(gè)時(shí)候,我們往往都會(huì)開(kāi)始引入緩存系統(tǒng),來(lái)加速用戶(hù)請(qǐng)求的響應(yīng)。減少熱點(diǎn)數(shù)據(jù)頻繁的訪問(wèn)數(shù)據(jù)庫(kù),減少數(shù)據(jù)庫(kù)的負(fù)載。所以,這個(gè)時(shí)候Redis往往就要登場(chǎng)了。緩存作為一個(gè)重要中間件,在上線的時(shí)候集群化部署肯定是需要的,所以下面這些,也建議大家可以嘗試一下:
- 主從模式open in new window:主從模式是Redis三種集群模式中最簡(jiǎn)單的,在主從復(fù)制中,數(shù)據(jù)庫(kù)分為兩類(lèi):主數(shù)據(jù)庫(kù)(master)和從數(shù)據(jù)庫(kù)(slave)。其中,主從復(fù)制有如下特點(diǎn):
- 哨兵模式open in new window:主從模式的弊端就是不具備高可用性,當(dāng)master掛掉以后,Redis將不能再對(duì)外提供寫(xiě)入操作,因此sentinel模式應(yīng)運(yùn)而生。sentinel中文含義為哨兵,顧名思義,它的作用就是監(jiān)控redis集群的運(yùn)行狀況,此模式具有如下一些特點(diǎn):
- 集群模式open in new window:Redis的哨兵模式基本已經(jīng)可以實(shí)現(xiàn)高可用,讀寫(xiě)分離 ,但是在這種模式下每臺(tái) Redis 服務(wù)器都存儲(chǔ)相同的數(shù)據(jù),很浪費(fèi)內(nèi)存,所以在 redis3.0上加入了Cluster 集群模式,實(shí)現(xiàn)了 Redis 的分布式存儲(chǔ),也就是說(shuō)每臺(tái) Redis 節(jié)點(diǎn)上存儲(chǔ)不同的內(nèi)容。下面是Cluster 集群模式的一些特點(diǎn):
#野蠻發(fā)展階段
接下來(lái),如果業(yè)務(wù)發(fā)展一切順利。這個(gè)時(shí)候,數(shù)據(jù)越來(lái)越多,業(yè)務(wù)需求也越來(lái)越多,參與的開(kāi)發(fā)人員也越來(lái)越多。這個(gè)時(shí)候,上面的架構(gòu)已經(jīng)很難滿(mǎn)足各類(lèi)需求的快速迭代。于是又將引入各種有用的東西。所以,下面的東西也一樣推薦掌握。
數(shù)據(jù)異構(gòu)
現(xiàn)在的數(shù)據(jù)庫(kù)世界,是一個(gè)百花齊放的階段。沒(méi)有一個(gè)數(shù)據(jù)庫(kù)可以完美的解決所有問(wèn)題,所以隨著業(yè)務(wù)的發(fā)展,我們往往都需要引入各種不同的數(shù)據(jù)庫(kù)來(lái)解決不同的業(yè)務(wù)需求。比如:引入Elasticsearch來(lái)解決搜索,引入InfluxDB解決時(shí)序類(lèi)的統(tǒng)計(jì)等等。所以,對(duì)這方面感興趣的話(huà),可以嘗試一下:
基礎(chǔ)設(shè)施
隨著團(tuán)隊(duì)的壯大,服務(wù)和系統(tǒng)越來(lái)越多。運(yùn)維壓力就會(huì)很大,所以一些分布式、微服務(wù)治理的工具也都可以引入來(lái)簡(jiǎn)化開(kāi)發(fā)和運(yùn)維。對(duì)這方面感興趣的讀者,也可以玩一下下面的搭建:
隨著服務(wù)和系統(tǒng)的增多,它們之間的通信有不少場(chǎng)景是不需要同步實(shí)現(xiàn)的。很多時(shí)候,系統(tǒng)間通過(guò)異步來(lái)實(shí)現(xiàn)會(huì)更加可靠。所以,消息中間件的引入也是必須的。目前最常用的有下面這些,如果您沒(méi)有練過(guò)手,也是非常推薦要掌握一下的: