1秒1000并發(fā),高并發(fā)需要什么樣的服務(wù)器?
目前使用的是MongoDB數(shù)據(jù)庫(kù),需要4天的豪華云主機(jī)才勉強(qiáng)達(dá)到每秒8900并發(fā)。
如果需要根據(jù)數(shù)據(jù)量和業(yè)務(wù)復(fù)雜程度綜合評(píng)估硬件水平,建議購(gòu)買兩臺(tái)云主機(jī)(4核8g內(nèi)存)搭建集群環(huán)境。然后根據(jù)實(shí)際需要進(jìn)行擴(kuò)展。
軟件級(jí)別:
首先,如果是寫操作,它應(yīng)該:
1.1使用消息隊(duì)列進(jìn)行異步處理(如activemq等。)以避免消息擁塞。
1.2使用MongoDB的批量寫功能,比如每1000條數(shù)據(jù)寫一次。
第二,MongoDB采用集群模式部署,可以分散壓力。
第三,如果是讀操作,可以考慮添加redis,一級(jí)緩存熱點(diǎn)數(shù)據(jù)。
每秒1000的并發(fā)不算太高,簡(jiǎn)單優(yōu)化一下就行了,現(xiàn)在一般服務(wù)器應(yīng)該可以支持。首先看一下linux系統(tǒng)的線程池分配和io限制。
當(dāng)然不建議讓數(shù)據(jù)庫(kù)抗頻繁高并發(fā)。應(yīng)該在整體架構(gòu)上優(yōu)化,架構(gòu)緩存服務(wù)器是否可以考慮在數(shù)據(jù)庫(kù)上層,針對(duì)具體業(yè)務(wù)做一些優(yōu)化。
多讀還是多寫,索引是怎么建立的?什么是慢速sql?單次訪問(wèn)的數(shù)據(jù)量是多少?
從正常的角度來(lái)看,還遠(yuǎn)遠(yuǎn)談不上數(shù)據(jù)庫(kù)的性能瓶頸,具體問(wèn)題具體分析。
硬件似乎夠用,程序優(yōu)化更重要。
一般情況下,一個(gè)人站幾千是沒問(wèn)題的。根據(jù)你的情況,問(wèn)題可能在兩個(gè)方面:web服務(wù)的io或者DB。
影響web服務(wù)性能的關(guān)鍵因素是io和線程模型。web框架的性能(netty,mina等。)的nio用epoll系列會(huì)比bio高很多。
其次是DB、索引、os頁(yè)面緩存等等。
一個(gè)1000塊錢的程序員,可以寫出每秒1000個(gè)訂單的服務(wù)器。
寬帶肯定是幾十兆,硬件其實(shí)也沒問(wèn)題。現(xiàn)在你可以用一臺(tái)非常便宜的pc來(lái)做一個(gè)分布式架構(gòu)。至于內(nèi)存和硬盤的大小,主要是根據(jù)數(shù)據(jù)和存儲(chǔ)的大小來(lái)決定的。希望我的回答能幫到你!
epoll模型的原理?
原則是
創(chuàng)建一個(gè)epoll模型實(shí)際上就是打開一個(gè)文件,epoll_create返回一個(gè)文件描述符。創(chuàng)建紅黑樹和就緒隊(duì)列。