日活億級使用者的伺服器架構要怎麼搭?

2021-09-25 06:45:31 字數 1913 閱讀 4162

本來沒想寫這個題材的,為了某某童鞋能夠更好的茁壯成長,臨時寫一篇負載均衡的。負載均衡,大家可能聽過什麼3層負載均衡、4層負載均衡、7層負載均衡什麼的?那這是怎麼分的呢,ok,是根據osi七層網路模型來分的,例如nginx是工作在應用層,應用層剛好是在第7層,因此nginx又可以稱為7層負載均衡。

我本來想一層層慢慢講,從最基礎的網路協議開始講起,想了想又覺得這種**不適合速成。因此我改變思路,直接講負載均衡架構的演進,最後的成品就可以在面試中侃一侃,因為現在負載均衡基本都是這套架構!。

開始呢,我們的應用只有一台web-server。那麼你希望:

輸入guduyan.com就能定位該server!

那很簡單,只要在dns裡配上網域名稱和你的server對映關係,就能訪問到啦!

流程如下圖所示

好,現在呢,多了一台web-server,你就可以通過在dns裡加一條配置,以dns輪詢方式進行負載均衡。如下圖所示

現在假設,我們多了一些需求啊。你的系統按照功能模組拆成兩個系統:使用者系統和訂單系統。那麼你希望

輸入guduyan.com/user/的時候定位到使用者系統。輸入guduyan.com/order/的時候定位到訂單系統。

那這時候,光靠dns就不行了,就需要採用dns+nginx進行負載均衡!如下圖所示

ps:nginx還可以做動靜分離哦,大家應該懂的!

那如果系統的訪問壓力進一步加大,萬一nginx掛了怎麼辦?如何給nginx引入熱備?

這裡就要用keepalived了,用兩台nginx組成乙個集群,分別部署上keepalived,設定成相同的虛ip,這樣乙個節點在崩潰的情況下,另乙個節點能夠自動接替其工作,如下圖所示

接下來隨著系統規模的繼續增大,你會慢慢的發現nginx也扛不住了!nginx工作在網路的第7層,所以它可以針對http應用本身來做分流策略,比如針對網域名稱、目錄結構等。

而lvs工作在網路4層,抗負載能力強,效能高,能達到f5的60%,對記憶體和cpu資源消耗比較低,且穩定,可靠性高。它利用linux的核心進行**,不產生流量。它能撐的併發量取決於機器的記憶體大小,一般來說撐個幾十萬併發問題不大!現在基本上都是nginx+lvs的負載均衡架構!

ps:好好思考為什麼會出現nginx+lvs被同時使用,注意看我演變的過程,面試必問!注意了,如果是比較小的**(日pv<1000萬),用nginx就完全可以了。

那麼,在這種情況下的架構圖如下所示

可能有個疑問,為什麼nginx層不用keepalived做熱備?

主要原因是:

在這種架構下,nginx不是單台,如果nginx掛了,lvs會幫你**到其他可用的nginx上!

最後,為了應對億級的pv,一般會在dns端配多個lvs集群的位址。如下所示

方案擴充套件到了這一步,lvs層就沒有必要再進行擴充套件新的節點了。這套架構已經能扛得住億級的pv。當然,前提是你的應用沒問題!另外如果資金充裕,lvs可以替換為f5也是可行的。

原文連線:

origin:

百萬使用者級遊戲伺服器架構設計

伺服器結構 登入服的負載均衡 伺服器結構 簡單的世界服實現 我們來看看結構圖是怎樣的 伺服器結構 繼續世界服 伺服器結構 最終的結構 伺服器結構 一點雜談 登入服的設計 功能需求 伺服器公共元件實現 訊息佇列 伺服器公共元件實現 發包的方式 伺服器公共元件實現 狀態機 伺服器公共元件 事件與訊號 再...

伺服器公升級下,多使用者怎麼維護自己的環境

前天伺服器公升級,由cuda9.0公升級到了cuda9.2。相應地cudnn7.0.5公升級到了cudnn7.6.5。這導致了我的tensorflow1.6版本的 執行不了。首先明白系統使用者root 普通使用者的區別,它們分別對應系統環境變數 使用者環境變數。學校伺服器有多個使用者,使用者沒有作業...

藝龍十萬級伺服器監控系統開發的架構和心得

本文是根據藝龍技術架構總監王鵬程在11月21日在麥思博 msup 主辦的into100沙龍第14期 十萬級伺服器監控系統開發的架構和心得 演講中的分享內容整理而成,他認為一切應從簡潔出發,不要搞複雜的東西。經歷了許多公司,監控系統大概都是從無到有,該經歷的也都經歷了。所謂監控系統,大概的架構如下 在...