新聞中心
去年參加技術(shù)分享活動,七牛的一個技術(shù)簡要的介紹了一些高可用可伸縮的一些經(jīng)驗之談,聽完之后受益匪淺,整理一下,主要分以下幾個部分:
創(chuàng)新互聯(lián)公司自2013年起,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都網(wǎng)站建設(shè)、成都做網(wǎng)站網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元連江做網(wǎng)站,已為上家服務(wù),為連江各地企業(yè)和個人服務(wù),聯(lián)系電話:18980820575入口層高可用
業(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, 里邊的坑有點大,考察清楚后再用比較好。比如重放*** 。
緩存層高可用
緩存層分得細一點,保證單臺緩存宕機后數(shù)據(jù)庫還能撐得住 。
中小模下緩存層和業(yè)務(wù)層可以混合部署, 這樣可以節(jié)省機器
大型規(guī)模網(wǎng)站,業(yè)務(wù)層和緩存層分開部署。
緩存層高可用,緩存可以啟用主從兩臺,主緩存活著的時候,主緩存讀,主從緩存都寫,主緩存宕機后,從變主,主恢復(fù)后, 變成新的從。這樣可以保證數(shù)據(jù)完整性,實現(xiàn)高可用
數(shù)據(jù)庫高可用
MySQL有主從模式, 還有主主模式都能滿足你的需求
MongoDB也有ReplicaSet的概念,基本都能滿足大家的需求。
高可用小結(jié)
入口層可伸縮
入囗層如何提供伸縮性?直接鋪機器 ?然后DNS加IP就可以了吧?
可以,但也有需要注意的地方
盡管一個域名解析到幾十個IP沒有問題,但是很瀏覽器客戶端只會使用前面幾個IP,部分域名供應(yīng)商對此有優(yōu)化(比如每次返回的IP順序隨機 ), 但是這個優(yōu)化效果不穩(wěn)定。推薦的做法是使用少量的nginx機 器作為入囗,業(yè)務(wù)服務(wù)器隱藏在內(nèi)網(wǎng)(HTTP類型的業(yè)務(wù)這種方式居多)
業(yè)務(wù)層可伸縮
跟應(yīng)付高可用一樣,保證無狀態(tài)是很好的手段。加機器繼續(xù)水平部署即可。
緩存層可伸縮
直接用 codis或者redis 3.0 即可
如果低峰期間數(shù)據(jù)庫能抗的住 ,那么直接下線存然后上新緩存就是最簡單有效的辦法
緩存類型
強一致性緩存: 無法接受從緩存中讀取錯誤的數(shù)據(jù)(比如用戶余額)
弱一致性緩存:可以接受一段時間內(nèi)的錯誤數(shù)據(jù),例如微博轉(zhuǎn)發(fā)數(shù)
不變型緩存:緩存key對應(yīng)的value不會變更
弱一致性和不變型緩存擴容很方便,用一致性HASH即可一致性HASH
在分布式集群中,對機器的添加刪除,或者機器故障后自動脫離集群這些操作是分布式集群管理最基本的功能。如果采用常用的hash(object)%N算法,那么在有機器添加或者刪除后,很多原有的數(shù)據(jù)就無法找到了,這樣嚴重的違反了單調(diào)性原則
一致性HASH可以有效解決這個問題,一致性哈希算法在保持了單調(diào)性的同時,還是數(shù)據(jù)的遷移達到了最小,這樣的算法對分布式集群來說是非常合適的,避免了大量數(shù)據(jù)遷移,減小了服務(wù)器的的壓力。
舉個例子
如果緩存從9臺擴容到10臺, 簡單Hash況下90%的緩存會馬上失效,而一致性Hash 情況下,只有10%的緩存會失效。
強一致緩存問題
1.緩存客戶端的配置更新時間會有微小的差異,在這個時間窗內(nèi)有可能會拿到過期的數(shù)據(jù)。
2.如果在擴充節(jié)點之后裁撤節(jié)點,會拿到臟數(shù)據(jù)。比如a這個key之前在機器1, 擴容后在機器2,數(shù)據(jù)更新了, 但裁撤節(jié)點后key回到機器1 這樣就會有臟數(shù)據(jù)的問題
問題二解決方法:要么保持永不減少節(jié)點,要么節(jié)點調(diào)整間隔大于數(shù)據(jù)有效時間。
問題一解決方法:
- 兩套hash配置都更新到客戶端,但仍使用舊的配置
- 兩個個客戶端改為只有兩套hash結(jié)果一致的情況下會使用緩存,其余情況從數(shù)據(jù)庫讀,但寫入緩存。
- 逐個客戶端通知使用新配置。
數(shù)據(jù)庫可伸縮
水平拆分
垂直拆分
定期滾動
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
當前文章:后端架構(gòu)高可用可伸縮-創(chuàng)新互聯(lián)
本文來源:http://www.dlmjj.cn/article/cdsdsj.html