去年參加技術(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, 里邊的坑有點大,考察清楚后再用比較好。比如重放攻擊 。
緩存層高可用
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍牙鎖 2017-07-26
- 消息隊列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標分割】 2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來看看(二) 2017-07-26