1秒1000併發 高併發需要什麼樣的伺服器?

時間 2021-05-11 00:28:47

1樓:網易數帆

題主的兩個問題可以理解成高併發下對MongoDB的技術優化需求,可以從兩個層面出發考慮:

首先我們知道幾個概念:

MongoDB是NoSQL面向文件型儲存資料庫,屬於重記憶體的型別,特別是在MongoDB 3.2預設的 WiredTiger引擎下,缺省會占用大量的記憶體來保證自身效能。

因此MongoDB所需要的伺服器,以題主使用的雲主機為例,選型思路主要是重儲存型雲主機,為了保證Mongo集群的讀寫效能,需要以SSD雲盤前提下盡可能大記憶體的主機,同時vCPU也不能太低會影響壓縮儲存效率。

如果技術儲備不夠,在引數調優、版本公升級、資料遷移中有問題怕踩坑,可以採用一些成熟的雲服務提供商的基於容器的雲原生Mongo Operator產品,這樣可以少踩許多坑。

參考網易輕舟這類商業化中介軟體

簡單介紹下我在MongoDB優化中的思路:

MongoDB主要包括mongod和mongo兩個程序。

mongod是處理MongoDB系統的主要程序。它處理資料請求,管理資料儲存,和執行後台管理操作。當我們執行mongod命令意味著正在啟動MongoDB程序,並且在後台執行。

mongo則是乙個命令列工具用於連線乙個特定的mongod例項。當我們沒有帶引數執行mongo命令它將使用預設的埠號和localhost連線

1、引數調優

作業系統OS層面連線數優化

要提供高併發的響應能力,首先要考慮提公升MongoDB本身的服務能力,mongod程序的連線數主要是受到作業系統的預設檔案描述符和程序/執行緒數限制。

以centos為例,需要通過ulimit -a 檢視open files是否夠大,如果太小可以通過以下命令設定使用者/程序允許開啟的檔案控制代碼數。

ulimit -n 1048576

ulimit -u 524288

具體可以參考:https://www.

2、更換MongoDB儲存引擎

更新MongoDB版本更換儲存引擎: 將 MMAPv1 替換為3.2官方推薦的 WiredTrigger,根據官方資料,WT引擎在寫效能上提高7-10倍,經過我的實際使用中在記憶體占用以及儲存資料占用空間上來說都有很大的優化。

3、讀寫分離,合理使用Mongo副本集和分片

很多人線上環境還是用單機版,雖然部署快但是很多mongo自然提供的功能都沒有用到像自動故障轉移、讀寫分離,這些對後續系統擴容及效能優化太重要了。我想會使用mongo的應該是資料量達到一定級別,查詢效能會非常重要,所以強烈建議上線時直接使用副本集高可用。

另外增加讀寫效能MongoDB官方推薦的做法是分片shard,可以有效的將寫入分配到多台伺服器提高寫入速度,使系統實現水平擴容。

參考https://www.

四、雲原生的Mongo PaaS中介軟體

如果技術儲備不夠,在引數調優、版本公升級、資料遷移中有問題怕踩坑,可以採用一些成熟的雲服務提供商的基於容器的雲原生Mongo Operator產品,這樣可以少踩許多坑。

參考網易輕舟這類商業化產品

2樓:馬馳

.看上去你們的瓶頸在資料庫。mongdb我不太了解,但是四台機器才能勉強達到九百ops太低了。

同為文件資料庫,我們正在做的產品的目標是支援2000op/s/core.

建議你先熟悉下mongdb的配置。比如你們的replication是非同步的還是同步的,一致性是不是配置過高,有沒有充分利用記憶體。

3樓:艾姆·凱丁

如果只是讀請求就簡單多了,MongoDB RS架構完全夠用。我們目前的業務場景,業務用MongoDB唯讀,每分鐘幾百萬的請求完全跟伺服器數量是線形增長的。

至於寫的話,假設你們很有錢,就買SSD吧,簡單粗暴。

通用的做法是:快取+資料庫(redis+mongodb),自己實現快取中的任務佇列並用某個固定服務flush/merge這些佇列。這個佇列就複雜到業務邏輯了,快取是永遠避免不了的。

此外,可以從業務邏輯方面考慮優化。(是的,我又一次提到了業務邏輯)或許你們可以將業務分離,解藕資料之間的關聯。

我們學到的乙個教訓是分離資料庫,提高單台伺服器的處理能力。

4樓:

這個與架構有關係,目前我所用過的框架基本是採用事件輪詢解決接入的數量,至於說處理,要看你的業務邏輯,C10k說的應該也是接入.

5樓:

滿足1000併發,每個檔案快取30KB,頻寬大概37.5Mb。至於伺服器主流dellr420和dell720各一台,一台web一台資料庫,具體配置就不說了。

6樓:The Who

首先,伺服器硬體條件要達到要求。網絡卡頻寬是否夠;是否有寫磁碟,若有,讀寫速度是否超過磁碟IO頻寬;是否有耗時計算,CPU是否會稱為瓶頸。

其次,硬體都滿足的情況下。你需要使你的軟體系統充分利用硬體效能。這個時候就需要合理設計方案,實現。

然後,再你達到了預定的併發量後。再想想能否優化,在更少的資源下完成同樣的事情,或者現有資源下完成更多的事情。

最後,還有乙個重中之重就是,是否易運維,易擴充套件。這個是很值得你投入精力去做的。

7樓:RoverTang

第一名的回答比較靠譜。

雖然我也不懂,但我也來插兩句:

1、資料庫操作本身不快,不像只是http訪問。所以1秒4K資料庫訪問還是挺可怕的。

2、快取應該是比較好的解決辦法。所以改進程式吧,不要去想資料庫啦。

8樓:

如果資料要立即處理的話:(併發數*單個連線的平均傳輸的資料大小=關口頻寬)+(減少IO頻率+低延時+快取併發情況下的資料=做個快取)+高效能伺服器

留守兒童需要什麼樣的幫助?

我一直在思考能不能自發建立乙個組織,召集志願者每週固定的時間給留守兒童講故事,並結合故事和他們說說話。這個方案能實現固定陪伴的效果,比起聽故事錄音而言小朋友能從互動中得到關注和陪伴,也能鍛鍊表達能力。但是對志願者要求很高,尤其如果技術上做不到內容同步審核,組織管理者難以控制每乙個志願者和小朋友交流的...

註冊商標需要什麼樣的流程?

乙隻尤物 辦理流程 商標起名 1 中文商標註冊風險相對低 2 避免使用商標法限制的詞句 3 可以簡單不要複雜。4 可以另類也不要通用。 Nelus 如果是自有小品牌的話註冊商標時間會偏長 容易被駁回等各方面原因會比較複雜,這種情況使用別人的授權商標會比較合適,如果是做電商,可以先使用授權商標入駐,入...

人類究竟需要什麼樣的能量?

胡說的山東海鮮 太陽輻射到地球上的能量大約是人類今天生產能量的5000倍。包括發射火箭去月球,核電,水電,火電,風電,甚至你在戶外劈材燒木頭,放火燒山開墾土地都包括在內所有能量。這意味著什麼呢?太陽照射地球1.752個小時的能量就夠今天全人類使用了。人類能生產的能量其實非常渺小,別以為我們有多偉大。...