www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 公眾號(hào)精選 > 架構(gòu)師社區(qū)
[導(dǎo)讀]1. 開(kāi)場(chǎng)白 在開(kāi)始今天的文章之前,先拋一個(gè)面試題出來(lái): 你接觸過(guò)的單機(jī)最大并發(fā)數(shù)是多少? 你認(rèn)為當(dāng)前正常配置的服務(wù)器物理機(jī)最大并發(fā)數(shù)可以到多少? 說(shuō)說(shuō)你的理解和分析。 思考幾分鐘,如果你可以有理有據(jù)地說(shuō)出答案,那確實(shí)就不用再往下看了,關(guān)上手機(jī)去陪

Linux服務(wù)端最大并發(fā)數(shù)是多少?

1. 開(kāi)場(chǎng)白

在開(kāi)始今天的文章之前,先拋一個(gè)面試題出來(lái):

你接觸過(guò)的單機(jī)最大并發(fā)數(shù)是多少?
你認(rèn)為當(dāng)前正常配置的服務(wù)器物理機(jī)最大并發(fā)數(shù)可以到多少?
說(shuō)說(shuō)你的理解和分析。

思考幾分鐘,如果你可以有理有據(jù)地說(shuō)出答案,那確實(shí)就不用再往下看了,關(guān)上手機(jī)去陪陪家人是個(gè)不錯(cuò)的選擇。

思考幾分鐘,如果你沒(méi)有頭緒或者對(duì)答案不確定,那么你先不用著急關(guān)閉頁(yè)面去玩耍,你應(yīng)該繼續(xù)往下看,因?yàn)檫@個(gè)問(wèn)題很不錯(cuò)。

Linux服務(wù)端最大并發(fā)數(shù)是多少?

對(duì)于后端開(kāi)發(fā)人員來(lái)說(shuō),并發(fā)數(shù)往往和技術(shù)難度是呈正相關(guān)的,實(shí)際上也確實(shí)如此:體量決定架構(gòu)

服務(wù)端根據(jù)不同業(yè)務(wù)場(chǎng)景會(huì)有不同的側(cè)重點(diǎn),單純追求高并發(fā)其實(shí)并不是根本目的,高可用&穩(wěn)定性更重要。

所以最終我們的目的是:保證高可用高穩(wěn)定的基礎(chǔ)上追求高并發(fā),降本增效。

高可用&高并發(fā)是我們直觀感受到的,本質(zhì)上這是個(gè)復(fù)雜的系統(tǒng)工程,每個(gè)環(huán)節(jié)都會(huì)影響結(jié)果,每一塊都值得研究和深入。

Linux服務(wù)端最大并發(fā)數(shù)是多少?

2. C10K問(wèn)題和C10M問(wèn)題

在2000年初的時(shí)候,全球互聯(lián)網(wǎng)的規(guī)模并不大,但是當(dāng)時(shí)就已經(jīng)提出了C10K問(wèn)題,所謂C10K就是單機(jī)1w并發(fā)問(wèn)題,雖然現(xiàn)在不覺(jué)得是個(gè)難題了,但是這在當(dāng)初是很有遠(yuǎn)見(jiàn)和挑戰(zhàn)的問(wèn)題。

Linux服務(wù)端最大并發(fā)數(shù)是多少?

C10K問(wèn)題最早由Dan Kegel發(fā)布于其個(gè)人站點(diǎn),原文鏈接如下:

http://www.kegel.com/c10k.html

相關(guān)資料顯示Dan Kegel目前工作于Google,從1978年起開(kāi)始接觸計(jì)算機(jī)編程,是Winetricks和Crosstool的作者,大佬年輕時(shí)的照片:

Linux服務(wù)端最大并發(fā)數(shù)是多少?

Dan Kegel這篇文章閱讀難度并不大,大白建議從事服務(wù)端開(kāi)發(fā)或者對(duì)高性能網(wǎng)絡(luò)開(kāi)發(fā)有興趣的讀者嘗試讀一讀。

在APUE第三版都沒(méi)有提到epoll,所以我們解決C10K問(wèn)題的時(shí)間并不長(zhǎng),其中IO復(fù)用epoll/kqueue/iocp等技術(shù)對(duì)于C10k問(wèn)題的解決起到了非常重要的作用。

開(kāi)源大神們基于epoll/kqueue等開(kāi)發(fā)了諸如libevent/libuv等網(wǎng)絡(luò)庫(kù),從而大幅提高了高并發(fā)網(wǎng)絡(luò)的開(kāi)發(fā)效率,對(duì)于C/C++程序員來(lái)說(shuō)并不陌生。

Linux服務(wù)端最大并發(fā)數(shù)是多少?

這里簡(jiǎn)單提一下針對(duì)下一個(gè)10年的展望和挑戰(zhàn):C10M問(wèn)題。

站在浪尖的那一批人早就開(kāi)始思考讓單機(jī)達(dá)到1000w并發(fā),現(xiàn)在聽(tīng)起來(lái)感覺(jué)不可思議,但是要達(dá)到這個(gè)目標(biāo),除了硬件上的提升,更重要的是對(duì)系統(tǒng)軟件和協(xié)議棧的改造。

Linux服務(wù)端最大并發(fā)數(shù)是多少?

Errata Security的CEO Robert Graham在Shmoocon 2013大會(huì)上的演講,大佬重要的觀點(diǎn)是:

不要讓OS內(nèi)核執(zhí)行所有繁重的任務(wù):將數(shù)據(jù)包處理、內(nèi)存管理、處理器調(diào)度等任務(wù)從內(nèi)核轉(zhuǎn)移到應(yīng)用程序高效地完成,讓諸如Linux這樣的OS只處理控制層,數(shù)據(jù)層完全交給應(yīng)用程序來(lái)處理。

確實(shí)也是如此,難道你不覺(jué)得Linux內(nèi)核做了太多不該自己做的事情了嗎?

近幾年出現(xiàn)的DPDK、PFRING、NETMAP等技術(shù)也是類似的思想,現(xiàn)在流行的協(xié)處理器+CPU的架構(gòu)也是這樣的:

Linux服務(wù)端最大并發(fā)數(shù)是多少?

3. 服務(wù)器最大并發(fā)數(shù)分析

前面提到的C10K和C10M問(wèn)題都是圍繞著提升服務(wù)器并發(fā)能力展開(kāi)的,但是難免要問(wèn):服務(wù)器最大的并發(fā)上限是多少

Linux服務(wù)端最大并發(fā)數(shù)是多少?

3.1 五元組

做過(guò)通信的盆友們一定聽(tīng)過(guò)五元組這個(gè)概念,一個(gè)五元組可以唯一標(biāo)記一個(gè)網(wǎng)絡(luò)連接,所以要理解和分析最大并發(fā)數(shù),就必須理解五元組:

Linux服務(wù)端最大并發(fā)數(shù)是多少?

這樣的話,就可以基本認(rèn)為:理論最大并發(fā)數(shù) = 服務(wù)端唯一五元組數(shù)。

3.2 端口&IP組合數(shù)

那么對(duì)于服務(wù)器來(lái)說(shuō),服務(wù)端唯一五元組數(shù)最大是多少呢?

有人說(shuō)是65535,顯然不是,但是之所以會(huì)有這類答案是因?yàn)楫?dāng)前Linux的端口號(hào)是2字節(jié)大小的short類型,總計(jì)2^16個(gè)端口,除去一些系統(tǒng)占用的端口,可用端口確實(shí)只剩下64000多了。

對(duì)于服務(wù)端本身來(lái)說(shuō),DestPort數(shù)量確實(shí)有限,假定有多張網(wǎng)卡,每個(gè)網(wǎng)卡綁定多個(gè)IP,服務(wù)端的Port端口數(shù)和IP數(shù)的組合類型也是有限的。

對(duì)于客戶端來(lái)說(shuō),本身的端口和IP也是一樣有限的,雖然這是個(gè)組合問(wèn)題,但是數(shù)量還是有限的:

Linux服務(wù)端最大并發(fā)數(shù)是多少?

3.3 并發(fā)數(shù)理論極限

看了前面的端口&IP的組合數(shù)計(jì)算,好像并發(fā)數(shù)并不會(huì)特別大。

錯(cuò)了,是真的會(huì)很大。

分析一下,前面的計(jì)算都是針對(duì)單個(gè)服務(wù)器或者客戶端的,但是實(shí)際上每個(gè)服務(wù)器會(huì)應(yīng)對(duì)全網(wǎng)的所有客戶端,那么從服務(wù)端看,源IP和源Port的數(shù)量是非常大的。

理論上服務(wù)端可以接受的客戶端IP是2^32(按照IPv4計(jì)算),端口數(shù)是2^16,目前端口號(hào)仍然是16bit的,所有這個(gè)理論最大值是2^48,果然很大!

Linux服務(wù)端最大并發(fā)數(shù)是多少?

3.4 實(shí)際情況

天下沒(méi)有免費(fèi)的午餐。

每一條連接都是要消耗系統(tǒng)資源的,所以實(shí)際中可能會(huì)設(shè)置最大并發(fā)數(shù)來(lái)保證服務(wù)器的安全和穩(wěn)定,所以這個(gè)理論最大并發(fā)數(shù)是不可能達(dá)到的。

實(shí)際中并發(fā)數(shù)和業(yè)務(wù)是直接相關(guān)的,像Redis這種內(nèi)存型的服務(wù)端并發(fā)十幾萬(wàn)都是沒(méi)問(wèn)題的,大部分來(lái)講幾十/幾百/幾千/幾萬(wàn)等是存在的。

4. 客戶端最大連接數(shù)

理解了服務(wù)器的最大并發(fā)數(shù)是2^48,那么客戶端最多可以連接多少服務(wù)器呢?

Linux服務(wù)端最大并發(fā)數(shù)是多少?

對(duì)于客戶端來(lái)說(shuō),當(dāng)然可以借助于多網(wǎng)卡多IP來(lái)增加連接能力,我們?nèi)匀患俣蛻舳酥挥?張網(wǎng)卡1個(gè)IP,由于端口數(shù)的限制到2^16,再去掉系統(tǒng)占用的端口,剩下可用的差不多64000。

Linux服務(wù)端最大并發(fā)數(shù)是多少?

也就是說(shuō),客戶端雖然可以連接任意的目的IP和目的端口,但是客戶端自身端口是有限的,所以客戶端的理論最大連接數(shù)是2^16,含系統(tǒng)占用端口。

5. NAT環(huán)境下的客戶端

解決前面的兩個(gè)問(wèn)題之后,來(lái)看另外一個(gè)問(wèn)題:

一個(gè)公網(wǎng)出口NAT服務(wù)設(shè)備最多可同時(shí)支持多少內(nèi)網(wǎng)IP并發(fā)訪問(wèn)外網(wǎng)服務(wù)?

畢竟公網(wǎng)IP都是有限并且要花錢的,我們大部分機(jī)器都是在局域網(wǎng)中結(jié)合NAT來(lái)進(jìn)行外網(wǎng)訪問(wèn)的,所以這個(gè)場(chǎng)景還是很熟悉的。

來(lái)看下內(nèi)網(wǎng)機(jī)器訪問(wèn)外網(wǎng)時(shí)的IP&端口替換和映射還原的過(guò)程,就明白了:

Linux服務(wù)端最大并發(fā)數(shù)是多少?


因?yàn)檫@時(shí)的客戶端是NAT設(shè)備,所以NAT環(huán)境下最多支持65535個(gè)并發(fā)訪問(wèn)外網(wǎng)。

6.小結(jié)

本文通過(guò)一道面試題切入,先描述了C10K和C10M問(wèn)題,進(jìn)而詳細(xì)說(shuō)明了客戶端的最大訪問(wèn)數(shù)和服務(wù)端的最大并發(fā)數(shù)計(jì)算和原理,最后描述了NAT場(chǎng)景下的訪問(wèn)并發(fā)數(shù)。

雖然理論服務(wù)端并發(fā)數(shù)非常大,但是我們也沒(méi)有必要覺(jué)得并發(fā)數(shù)高就厲害,服務(wù)復(fù)雜程度不一樣,切忌唯并發(fā)數(shù)來(lái)判斷業(yè)務(wù)和開(kāi)發(fā)者水平

試想echo服務(wù)和訂單交易服務(wù)顯然是不一樣的,我們應(yīng)該做的是在服務(wù)穩(wěn)定和高可用的前提下去從緩存/網(wǎng)絡(luò)/數(shù)據(jù)庫(kù)等多個(gè)角度來(lái)優(yōu)化提高性能。

特別推薦一個(gè)分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒(méi)關(guān)注的小伙伴,可以長(zhǎng)按關(guān)注一下:

Linux服務(wù)端最大并發(fā)數(shù)是多少?

長(zhǎng)按訂閱更多精彩▼

Linux服務(wù)端最大并發(fā)數(shù)是多少?

如有收獲,點(diǎn)個(gè)在看,誠(chéng)摯感謝

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
關(guān)閉
關(guān)閉