后端架构高可用可伸缩讲解之高可用
去年參加了一個(gè)技術(shù)分享活動(dòng),七牛的一個(gè)技術(shù)大牛給簡(jiǎn)要的介紹了一些高可用可伸縮的一些最佳實(shí)踐,雖然只是一次簡(jiǎn)短的介紹,但是依然從中學(xué)到了很多東西,PPT內(nèi)容主要分以下幾個(gè)部分:
入口層高可用
業(yè)務(wù)層高可用
緩存層高可用
數(shù)據(jù)庫(kù)高可用
入口層可伸縮
業(yè)務(wù)層可伸縮
緩存層可伸縮
數(shù)據(jù)庫(kù)可伸縮
打算分兩次把參加的技術(shù)活動(dòng)日內(nèi)容歸類整理,
第一次主要講下高可用,第二次講一下可伸縮
下面來分層介紹實(shí)踐方法。
入口層高可用
nigix兩個(gè) keeplive保活 心跳做好。
使用心跳技術(shù):keeplive提供這個(gè)技術(shù)
比如機(jī)器A IP是1.2.3.4,機(jī)器B IP是1.2.3.5,那么再申請(qǐng)一個(gè)IP (1.2.3.6)我們稱之為心跳IP,平時(shí)綁定再A上面,如果A宕機(jī),那么IP會(huì)自動(dòng)綁定到B上面
DNS 層面綁定到心跳IP即可
兩臺(tái)機(jī)器必須在同一網(wǎng)段
服務(wù)監(jiān)聽必須監(jiān)聽所有IP,如果僅僅監(jiān)聽心跳IP,那么從機(jī)上的服務(wù)(不持有心跳IP的機(jī)器)會(huì)啟動(dòng)失敗
服務(wù)器利用率下降(混合部署可以改善這一點(diǎn))
考慮一個(gè)問題,兩臺(tái)機(jī)器,兩個(gè)公網(wǎng)IP,DNS把域名同時(shí)定位到兩個(gè)IP,這算高可用嗎
不算,客戶端(比如瀏覽器) 解析完后會(huì)隨機(jī)選一個(gè) IP訪問 , 而不是一個(gè)失敗后就去另一個(gè) 。 所以如果一臺(tái)機(jī)器當(dāng)機(jī) ,那么就有一半左右的用戶無法訪問 。
業(yè)務(wù)層高可用
業(yè)務(wù)層不要有狀態(tài) , 狀態(tài)分散到緩存層和數(shù)據(jù)庫(kù)層 。 只要沒有狀態(tài),業(yè)務(wù)層的服務(wù)死掉后,前面的nginx會(huì)自動(dòng)把流量打到剩下的服務(wù) 。 所以,業(yè)務(wù)層無狀態(tài)是一個(gè)重點(diǎn)。
友情提醒:不要因?yàn)橄胱尫?wù)無狀態(tài)就直接用cookie session, 里邊的坑有點(diǎn)大,考察清楚后再用比較好。比如重放攻擊 。
緩存層高可用
緩存層分得細(xì)一點(diǎn),保證單臺(tái)緩存宕機(jī)后數(shù)據(jù)庫(kù)還能撐得住 。
中小模下緩存層和業(yè)務(wù)層可以混合部署, 這樣可以節(jié)省機(jī)器
大型規(guī)模網(wǎng)站,業(yè)務(wù)層和緩存層分開部署。
緩存層高可用,緩存可以啟用主從兩臺(tái),主緩存活著的時(shí)候,主緩存讀,主從緩存都寫,主緩存宕機(jī)后,從變主,主恢復(fù)后, 變成新的從。這樣可以保證數(shù)據(jù)完整性,實(shí)現(xiàn)高可用
數(shù)據(jù)庫(kù)高可用
MySQL有主從模式, 還有主主模式都能滿足你的需求
MongoDB也有ReplicaSet的概念,基本都能滿足大家的需求。
這里就不做詳細(xì)介紹了,有興趣的同學(xué)可以自行百度。
高可用小結(jié)
原文鏈接:http://www.cnblogs.com/liuroy/p/6536630.html
.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺(tái)或掃描二維碼關(guān)注
總結(jié)
以上是生活随笔為你收集整理的后端架构高可用可伸缩讲解之高可用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [干货来袭]C#7.0新特性(VS201
- 下一篇: 分布式一致性算法:Raft 算法