去年參加技術(shù)分享活動,七牛的一個技術(shù)簡要的介紹了一些高可用可伸縮的一些經(jīng)驗之談,聽完之后受益匪淺,整理一下,主要分以下幾個部分:
入口層高可用
業(yè)務(wù)層高可用
緩存層高可用
數(shù)據(jù)庫高可用
入口層可伸縮
業(yè)務(wù)層可伸縮
緩存層可伸縮
數(shù)據(jù)庫可伸縮
下面來分層介紹實踐方法。
入口層高可用
nigix兩個 keeplive保活 心跳做好。
使用心跳技術(shù):keeplive提供這個技術(shù)
比如機器A IP是1.2.3.4,機器B IP是1.2.3.5,那么再申請一個IP (1.2.3.6)我們稱之為心跳IP,平時綁定再A上面,如果A宕機,那么IP會自動綁定到B上面
DNS 層面綁定到心跳IP即可
兩臺機器必須在同一網(wǎng)段
服務(wù)監(jiān)聽必須監(jiān)聽所有IP,如果僅僅監(jiān)聽心跳IP,那么從機上的服務(wù)(不持有心跳IP的機器)會啟動失敗
服務(wù)器利用率下降(混合部署可以改善這一點)
考慮一個問題,兩臺機器,兩個公網(wǎng)IP,DNS把域名同時定位到兩個IP,這算高可用嗎
不算,客戶端(比如瀏覽器) 解析完后會隨機選一個 IP訪問 , 而不是一個失敗后就去另一個 。 所以如果一臺機器當機 ,那么就有一半左右的用戶無法訪問 。
業(yè)務(wù)層高可用
業(yè)務(wù)層不要有狀態(tài) , 狀態(tài)分散到緩存層和數(shù)據(jù)庫層 。 只要沒有狀態(tài),業(yè)務(wù)層的服務(wù)死掉后,前面的nginx會自動把流量打到剩下的服務(wù) 。 所以,業(yè)務(wù)層無狀態(tài)是一個重點。
友情提醒:不要因為想讓服務(wù)無狀態(tài)就直接用cookie session, 里邊的坑有點大,考察清楚后再用比較好。比如重放攻擊 。
緩存層高可用