架構のHP&HA&LB

高性能集羣(Highperformance cluster,HP) 
它是利用一個集羣中的多臺機器共同完成同一件任務,使得完成任務的速度和可靠性都遠遠高於單機運行的效果。彌補了單機性能上的不足。該集羣在天氣預報、環境監控等數據量大,計算複雜的環境中應用比較多;

 

負載均衡集羣(Loadbalance cluster,LB) 
它是利用一個集羣中的多臺單機,完成許多並行的小的工作。一般情況下,如果一個應用使用的人多了,那麼用戶請求的相應時間就會增大,機器的性能也會受到影響,如果使用負載均衡集羣,那麼集羣中任意一臺機器都能相應用戶的請求,這樣集羣就會在用戶發出服務請求之後,選擇當時負載最小,能夠提供最好的服務的這臺機器來接受請求並相應,這樣就可用用集羣來增加系統的可用性和穩定性。這類集羣在網站中使用較多; 

 

高可用性集羣(Highavailability cluster,HA) 
它是利用集羣中系統 的冗餘,當系統中某臺機器發生損壞的時候,其他後備的機器可以迅速的接替它來啓動服務,等待故障機的維修和返回。最大限度的保證集羣中服務的可用性。這類系統一般在銀行,電信服務這類對系統可靠性有高的要求的領域有着廣泛的應用。 高可用性羣集的出現是爲了使羣集的整體服務儘可能可用。

負載均衡系統: 負載均衡又有DNS負載均衡(比較常用)、IP負載均衡、反向代理負載均衡等,也就是在集羣中有服務器A、B、C,它們都是互不影響,互不相干的,任何一臺的機器宕了,都不會影響其他機器的運行,當用戶來一個請求,有負載均衡器的算法決定由哪臺機器來處理

 

分佈式 & 集羣區別:

分佈式是指將不同的業務分佈在不同的地方,集羣指的是將幾臺服務器集中在一起,實現同一業務。 分佈式中的每一個節點,都可以做集羣。 而集羣並不一定就是分佈式的。 

                                                                               

Ø  高併發解決方案:

1HTML靜態化

2、圖片服務器分離

3、數據庫集羣、庫表散列

4、緩存

6、負載均衡

7CDN更智能的鏡像+緩存+流量導流,充分考慮用戶發起請求的地點和當時網絡的情況,來決定把用戶的請求定向到離用戶最近同時負載相對較輕的節點緩存服務器上

 

 

Ø  高可用性解決方案(HA):減少停止服務的時間,從而使其服務保持高度的可使用性

%availability=(TotalElapsed Time – Sum of Inoperative Times) / Total Elapsed Time

TotalElapsed Time 爲系統總時間,包括可提供服務時間+停止服務時間。 Sumof Inoperative Times 爲停止服務時間,包括宕機時間+維護時間

 

1)   入口層:主備切換(lvs+keepalived, failover(故障轉移)lvs做雙機熱備,通過keepalived模塊能夠達到故障自動轉移到備份服務器,不間斷提供服務

2)   業務層:session放在緩存中redis,原則就是業務層不要有狀態。在業務層沒有狀態時,一臺業務層服務器當掉了後,Nginx/Apache會自動將所有的請求打到另外一臺業務層的服務器上。由於沒有狀態,兩臺服務器沒有任何差異,所以用戶完全感受不到。如果把session放在業務層裏面的話,那麼面臨的問題是,這個用戶以前是登錄在一臺機器上的,這個進程死掉後,用戶就會被登出了

3)   緩存層:分佈式緩存細粒度化

4)   數據庫層:有主從模式(Master-Slave),還有主主模式(Master-Master)都能滿足需求。MongoDB也有ReplicaSet

總之,要想實現高可用,需要做到這幾點:入口層做心跳,業務層服務器無狀態,緩存層減小粒度,數據庫做一個主從模式。對於這種模式來講,我們做的高可用不需要太多服務器,這些東西都可以同時部署在兩臺服務器上。

Ø  可伸縮架構

1)   入口層

在入口層實現伸縮性,可以通過直接水平擴機器,然後DNSIP來實現。但需要注意,儘管一個域名解析到幾十個IP沒有問題,但是很多瀏覽器客戶端只會使用前幾個IP,部分域名供應商對此有優化(如每次返回的IP順序隨機),但這個優化效果不穩定。

推薦的做法是使用少量的Nginx機器作爲入口,業務服務器隱藏在內網(HTTP類型的業務這種方式居多)。另外,也可以把所有IP下發到客戶端,然後在客戶端做一些調度(特別是非HTTP型的業務,如遊戲、直播)

2)   業務層

業務層的伸縮性如何實現?與做高可用時的解決方案一樣,要實現業務層的伸縮性,保證無狀態是很好的手段。此外,加機器繼續水平部署即可。

3)  緩存層

緩存hash一致性

4)  數據庫

水平拆分、垂直拆分和定期滾動

 

總之,我們可以在入口層、業務層面、緩存層和數據庫層四個層面,使用剛纔介紹的方法和技術實現系統高可用和可伸縮性。具體爲:在入口層用心跳來做到高可用,用平行部署來伸縮;在業務層做到服務無狀態;在緩存層,可以減小一些粒度,以方便實現高可用,使用一致性Hash將有助於實現緩存層的伸縮性;數據庫層的主從模式能解決高可用問題,拆分和滾動能解決可伸縮問題

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章