前幾天,在我們的技術交流群里看到有小伙伴問:有沒有練手搭建Redis集群的方式推薦: 這裡不禁讓我想到,對於各種集群和分散式基礎設施的搭建,其實是每個開發者進階時候都要經歷的一個成長過程。但是,這裡對於不少開發者來說,卻又面臨著一個現實問題:我沒有足夠的資源(主機或配置)去嘗試和練習。 最近,DD剛 ...
前幾天,在我們的技術交流群里看到有小伙伴問:有沒有練手搭建Redis集群的方式推薦:
這裡不禁讓我想到,對於各種集群和分散式基礎設施的搭建,其實是每個開發者進階時候都要經歷的一個成長過程。但是,這裡對於不少開發者來說,卻又面臨著一個現實問題:我沒有足夠的資源(主機或配置)去嘗試和練習。
最近,DD剛好看到阿裡雲有個可以免費領機器的活動,還挺適合正在學習這方面技術內容的小伙伴來領取做練手資源的。
如何領取
這個免費領機器的機會,其實是阿裡雲ECS面向學生和個人開發者的免費試用活動。它的規則是每個月提供280元的抵扣額度(實例部分200元,公網流量80元),在此額度內,可在5個地域試用1-4台。
劃重點!!!這次的免費試用跟以前不一樣了,是可以領多台的!
所以,我們只需要在免費額度之內,選擇儘可能多的機器,就能滿足我們練習搭建各種集群的需求了。
領取入口:https://click.aliyun.com/m/1000380445/
進入免費試用頁面之後,按如圖操作:
當然了,如果你不是想要搭建集群練手的話,也可以選擇其他配置,只要符合控制每個月ECS的費用在200元、公網費用80元以內,就可以免費使用。
另外,這裡告訴大家一個小秘籍:那就是不用的時候開啟停機模式!!!能省則省,榨乾每一分額度 _
練手推薦
如果您還是學生,或者平時參與的項目架構沒那麼複雜,不知道現階段有哪些東西可以去學習,或者不知道應該按什麼順序去練手。那麼,DD這裡給大家一些建議,您可以跟著我下麵的思路來嘗試一下,這些內容都是後端開發推薦掌握的必備技能。
下麵推薦的內容,我將以一個應用演進式發展的角度,來給大家梳理要學習的內容順序,也讓大家瞭解到每個技術的基本應用場景和引入時機。大家可以根據自己的情況選擇性的去選擇內容練手。
從0到1階段
通常來說,從0到1階段,作為一個初創應用,沒有什麼處理上的壓力,所以往往架構是非常簡單的。一臺伺服器 + 一臺資料庫,基本就搞定了。如果你從來沒有過這個體驗,那麼可以嘗試一下下麵的部署架構:
- 一臺機器搭建Nginx
- 兩台台機器部署應用(雙實例)
- 一臺機器部署資料庫。
這裡一個關鍵點在於Nginx的負載均衡配置,實現一個基礎且有一定高可用雛形的部署架構。得益於兩台伺服器部署應用,又有Nginx做負載均衡,還能實現滾動發佈,上線升級不影響用戶使用。
從1到100階段
如果發展順利,用戶增長還不錯,那麼你們在做的產品需要進一波推廣了。此時往往會碰到兩個問題:
一個是應用伺服器的負載增大,需要擴容應對更多請求。這個可以通過增加應用部署,配合Nginx負載均衡來擴容,如果你沒有像從0到1階段的那種結構來部署的話,這個時候這一步就一定要補上了。
其次,影響性能處理最大的瓶頸大概率出現在資料庫。所以,很多時候,我們將在這個階段引入資料庫的一些高級用法,比如:
從100到10000階段
隨著業務的繼續加速發展,數據訪問層面的壓力會越來越大。這個時候,我們往往都會開始引入緩存系統,來加速用戶請求的響應。減少熱點數據頻繁的訪問資料庫,減少資料庫的負載。所以,這個時候Redis往往就要登場了。緩存作為一個重要中間件,在上線的時候集群化部署肯定是需要的,所以下麵這些,也建議大家可以嘗試一下:
- 主從模式:主從模式是Redis三種集群模式中最簡單的,在主從複製中,資料庫分為兩類:主資料庫(master)和從資料庫(slave)。其中,主從複製有如下特點:
- 主資料庫可以進行讀寫操作,當讀寫操作導致數據變化時會自動將數據同步給從資料庫;
- 從資料庫一般是只讀的,並且接收主資料庫同步過來的數據;
- 一個master可以擁有多個slave,但是一個slave只能對應一個master;
- slave掛了不影響其他slave的讀和master的讀和寫,重新啟動後會將數據從master同步過來;
- master掛了以後,不影響slave的讀,但redis不再提供寫服務,master重啟後redis將重新對外提供寫服務;
- master掛了以後,不會在slave節點中重新選一個master;
- 哨兵模式:主從模式的弊端就是不具備高可用性,當master掛掉以後,Redis將不能再對外提供寫入操作,因此sentinel模式應運而生。sentinel中文含義為哨兵,顧名思義,它的作用就是監控redis集群的運行狀況,此模式具有如下一些特點:
- sentinel模式是建立在主從模式的基礎上,如果只有一個Redis節點,sentinel就沒有任何意義;
- 當master掛了以後,sentinel會在slave中選擇一個做為master,並修改它們的配置文件,其他slave的配置文件也會被修改,比如slaveof屬性會指向新的master;
- 當master重新啟動後,它將不再是master,而是做為slave接收新的master的同步數據;
- sentinel因為也是一個進程,所以有掛掉的可能,所以sentinel也會啟動多個形成一個sentinel集群;
- 多sentinel配置的時候,sentinel之間也會自動監控;
- 當主從模式配置密碼時,sentinel也會同步將配置信息修改到配置文件中;
- 一個sentinel或sentinel集群可以管理多個主從Redis,多個sentinel也可以監控同一個redis;
- sentinel最好不要和Redis部署在同一臺機器,不然Redis的伺服器掛了以後,sentinel也可能會掛掉。
- 集群模式:Redis的哨兵模式基本已經可以實現高可用,讀寫分離 ,但是在這種模式下每台 Redis 伺服器都存儲相同的數據,很浪費記憶體,所以在 redis3.0上加入了Cluster 集群模式,實現了 Redis 的分散式存儲,也就是說每台 Redis 節點上存儲不同的內容。下麵是Cluster 集群模式的一些特點:
- Sentinel模式基本可以滿足一般生產的需求,具備高可用性。但是當數據量過大到一臺伺服器存放不下的情況時,主從模式或sentinel模式就不能滿足需求了,這個時候需要對存儲的數據進行分片,將數據存儲到多個Redis實例中。cluster模式的出現就是為瞭解決單機Redis容量有限的問題,將Redis的數據根據一定的規則分配到多台機器。
- Cluster可以說是sentinel+主從模式的結合體,通過cluster可以實現主從和master重選功能,所以如果配置兩個副本三個分片的話,就需要六個Redis實例。因為Redis的數據是根據一定規則分配到cluster的不同機器的,當數據量過大時,可以新增機器進行擴容。
- 使用集群,只需要將redis配置文件中的cluster-enable配置打開即可,每個集群中至少需要三個主資料庫才能正常運行,新增節點非常方便。
野蠻發展階段
接下來,如果業務發展一切順利。這個時候,數據越來越多,業務需求也越來越多,參與的開發人員也越來越多。這個時候,上面的架構已經很難滿足各類需求的快速迭代。於是又將引入各種有用的東西。所以,下麵的東西也一樣推薦掌握。
數據異構
現在的資料庫世界,是一個百花齊放的階段。沒有一個資料庫可以完美的解決所有問題,所以隨著業務的發展,我們往往都需要引入各種不同的資料庫來解決不同的業務需求。比如:引入Elasticsearch來解決搜索,引入InfluxDB解決時序類的統計等等。所以,對這方面感興趣的話,可以嘗試一下:
基礎設施
隨著團隊的壯大,服務和系統越來越多。運維壓力就會很大,所以一些分散式、微服務治理的工具也都可以引入來簡化開發和運維。對這方面感興趣的讀者,也可以玩一下下麵的搭建:
隨著服務和系統的增多,它們之間的通信有不少場景是不需要同步實現的。很多時候,系統間通過非同步來實現會更加可靠。所以,消息中間件的引入也是必須的。目前最常用的有下麵這些,如果您沒有練過手,也是非常推薦要掌握一下的:
上面DD主要介紹了一些我接觸過的比較常用的內容。特定的業務還會有很多技術組件引入,如果上面沒有包含的話,您也可以前往阿裡雲開發者社區搜索文章來嘗試練手。如果您有什麼集群搭建的內容推薦,也歡迎留言區補充~
歡迎關註我的公眾號:程式猿DD。第一時間瞭解前沿行業消息、分享深度技術乾貨、獲取優質學習資源