成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

你的系統(tǒng)如果要支持百萬連接,架構(gòu)應(yīng)該如何設(shè)計?

開發(fā) 架構(gòu)
這篇文章,給大家聊聊:如果你設(shè)計一個系統(tǒng)需要支撐百萬用戶連接,應(yīng)該如何來設(shè)計其高并發(fā)請求處理架構(gòu)?

1、到底什么是連接?

假如說現(xiàn)在你有一個系統(tǒng),他需要連接很多很多的硬件設(shè)備,這些硬件設(shè)備都要跟你的系統(tǒng)來通信。

那么,怎么跟你的系統(tǒng)通信呢?

首先,他一定會跟你的系統(tǒng)建立連接,然后會基于那個連接發(fā)送請求給你的系統(tǒng)。

接著你的系統(tǒng)會返回響應(yīng)給那個系統(tǒng),最后是大家一起把連接給斷開,釋放掉網(wǎng)絡(luò)資源。

所以我們來看一下下面的那個圖,感受一下這個所謂的連接到底是個什么概念。

2、為什么每次發(fā)送請求都要建立連接?

但是大家看著上面的那個圖,是不是感覺有一個很大的問題。

什么問題呢?那就是為啥每次發(fā)送請求,都必須要建立一個連接,然后再斷開一個連接?

要知道,網(wǎng)絡(luò)連接的建立和連接涉及到多次網(wǎng)絡(luò)通信,本質(zhì)是一個比較耗費資源的過程。

所以說咱們完全沒必要每次發(fā)送請求都要建立一次連接,斷開一次連接。

我們完全可以建立好一個連接,然后設(shè)備就不停的發(fā)送請求過來,系統(tǒng)就通過那個連接返回響應(yīng)。

大家完全可以多次通過一個連接發(fā)送請求和返回響應(yīng),這就是所謂的長連接。

也就是說,如果你一個連接建立之后,然后發(fā)送請求,接著就斷開,那這個連接維持的時間是很短的,這個就是所謂的短連接。

那如果一個設(shè)備跟你的系統(tǒng)建立好一個連接,然后接著就不停的通過這個連接發(fā)送請求接收響應(yīng),就可以避免不停的創(chuàng)建連接和斷開連接的開銷了。

大家看下面的圖,體驗一下這個過程。在圖里面,兩次連接之間,有很多次發(fā)送請求和接收響應(yīng)的過程,這樣就可以利用一個連接但是進行多次通信了。

3、長連接模式下需要耗費大量線程資源

但是現(xiàn)在問題又來了,長連接的模式確實是不錯的,但是如果說每個設(shè)備都要跟系統(tǒng)長期維持一個連接,那么對于系統(tǒng)來說就需要搞一個線程,這個線程需要去維護一個設(shè)備的長連接,然后通過這個連接跟一個設(shè)備不停的通信,接收人家發(fā)送過來的請求,返回響應(yīng)給人家。

大家看下面的圖,每個設(shè)備都要跟系統(tǒng)維持一個連接,那么對于每個設(shè)備的連接,系統(tǒng)都會有一個獨立的線程來維護這個連接。

因為你必須要有一個線程不停的嘗試從網(wǎng)絡(luò)連接中讀取請求,接著要處理請求,最后還要返回響應(yīng)給設(shè)備。

那么這種模式有什么缺點呢?

缺點是很顯而易見的,假如說此時你有上百萬個設(shè)備要跟你的系統(tǒng)進行連接,假設(shè)你的系統(tǒng)做了集群部署一共有100個服務(wù)實例,難道每個服務(wù)實例要維持1萬個連接支撐跟1萬個設(shè)備的通信?

如果這樣的話,每個服務(wù)實例不就是要維持1萬個線程來維持1萬個連接了嗎?大家覺得這個事兒靠譜嗎?

根據(jù)線上的生產(chǎn)經(jīng)驗,一般4核8G的標準服務(wù)用的虛擬機,自己開辟的工作線程在一兩百個就會讓CPU負載很高了,最佳的建議就是在幾十個工作線程就差不多。

所以要是期望每個服務(wù)實例來維持上萬個線程,那幾乎是不可能的,所以這種模式最大的問題就在于這里,沒法支撐大量連接。

4、Kafka遇到的問題:應(yīng)對大量客戶端連接

實際上,對于大名鼎鼎的消息系統(tǒng)Kafka來說,他也是會面對同樣的問題,因為他需要應(yīng)對大量的客戶端連接。

有很多生產(chǎn)者和消費者都要跟Kafka建立類似上面的長連接,然后基于一個連接,一直不停的通信。

舉個例子,比如生產(chǎn)者需要通過一個連接,不停的發(fā)送數(shù)據(jù)給Kafka。然后Kafka也要通過這個連接不停的返回響應(yīng)給生產(chǎn)者。

消費者也需要通過一個連接不停的從Kafka獲取數(shù)據(jù),Kafka需要通過這個連接不停的返回數(shù)據(jù)給消費者。

大家看下面的圖,感受一下Kafka的生產(chǎn)現(xiàn)場。

那假如Kafka就簡單的按照這個架構(gòu)來處理,如果你的公司里有幾萬幾十萬個的生產(chǎn)者或者消費者的服務(wù)實例,難道Kafka集群就要為了幾萬幾十萬個連接來維護這么多的線程嗎?

同樣,這是不現(xiàn)實的,因為線程是昂貴的資源,不可能在集群里使用那么多的線程。

5、Kafka的架構(gòu)實踐:Reactor多路復(fù)用

針對這個問題,大名鼎鼎的Kafka采用的架構(gòu)策略是Reactor多路復(fù)用模型。

簡單來說,就是搞一個acceptor線程,基于底層操作系統(tǒng)的支持,實現(xiàn)連接請求監(jiān)聽。

如果有某個設(shè)備發(fā)送了建立連接的請求過來,那么那個線程就把這個建立好的連接交給processor線程。

每個processor線程會被分配N多個連接,一個線程就可以負責(zé)維持N多個連接,他同樣會基于底層操作系統(tǒng)的支持監(jiān)聽N多連接的請求。

如果某個連接發(fā)送了請求過來,那么這個processor線程就會把請求放到一個請求隊列里去。

接著后臺有一個線程池,這個線程池里有工作線程,會從請求隊列里獲取請求,處理請求,接著將請求對應(yīng)的響應(yīng)放到每個processor線程對應(yīng)的一個響應(yīng)隊列里去。

最后,processor線程會把自己的響應(yīng)隊列里的響應(yīng)發(fā)送回給客戶端。

說了這么多,還是來一張圖,大家看下面的圖,就可以理解上述整個過程了。

6、優(yōu)化后的架構(gòu)是如何支撐大量連接的?

那么上面優(yōu)化后的那套架構(gòu),是如何支撐大量連接的呢?

其實很簡單。這里最關(guān)鍵的一個因素,就是processor線程是一個人維持N個線程,基于底層操作系統(tǒng)的特殊機制的支持,一個人可以監(jiān)聽N個連接的請求。

這是極為關(guān)鍵的一個步驟,就僅此一個步驟就可以讓一個線程支持多個連接了,不需要一個連接一個線程來支持。

而且那個processor線程僅僅是接收請求和發(fā)送響應(yīng),所有的請求都會入隊列排隊,交給后臺線程池來處理。

比如說按照100萬連接來計算,如果有100臺機器來處理,按照老的模式,每臺機器需要維持1萬個線程來處理1萬個連接。

但是如果按照這種多路復(fù)用的模式,可能就比如10個processor + 40個線程的線程池,一共50個線程就可以上萬連接。

在這種模式下,每臺機器有限的線程數(shù)量可以抗住大量的連接。

因此實際上我們在設(shè)計這種支撐大量連接的系統(tǒng)的時候,完全可以參考這種架構(gòu),設(shè)計成多路復(fù)用的模式,用幾十個線程處理成千上萬個連接,最終實現(xiàn)百萬連接的處理架構(gòu)。

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2022-10-28 17:35:57

架構(gòu)網(wǎng)絡(luò)拓撲

2023-09-02 21:22:36

Airbnb系統(tǒng)

2023-01-18 17:50:35

系統(tǒng)架構(gòu)Kafka

2022-08-19 06:42:11

數(shù)據(jù)庫高并系統(tǒng)

2020-02-06 08:03:53

疫情設(shè)計IM系統(tǒng)

2019-02-27 09:46:05

數(shù)據(jù)庫架構(gòu)并發(fā)

2010-03-30 13:24:41

2020-01-13 10:20:30

架構(gòu)聊天架構(gòu)百萬并發(fā)量

2022-10-08 00:04:00

緩存架構(gòu)限流

2011-09-05 17:12:17

2020-09-16 09:08:49

訂單微服務(wù)架構(gòu)

2024-08-28 08:38:51

2023-12-22 09:03:31

2024-03-29 12:50:00

項目分層模型

2022-11-06 18:17:43

Java核心系統(tǒng)鏈路

2020-11-18 08:15:39

TypeScript設(shè)計模式

2024-07-04 09:27:57

2025-06-27 09:18:00

2021-07-07 17:26:20

云原生云原生架構(gòu)阿里云

2016-09-19 13:52:26

Javascript跨域前端
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 电影午夜精品一区二区三区 | 男女视频网站 | 中文字幕一区在线观看视频 | 国产三级大片 | 性国产丰满麻豆videosex | 欧美午夜视频 | 亚洲午夜精品视频 | 亚洲美乳中文字幕 | 91美女在线观看 | 中文字幕在线一区 | 中文字幕第90页 | 欧美九九| 国产视频一区二区 | 福利社午夜影院 | 在线一级片 | 99re视频精品 | 日韩精品在线一区 | 日韩在线不卡 | 亚洲一区二区视频 | 日韩在线不卡视频 | 久久91精品国产一区二区 | 免费激情av | 国产午夜视频 | 我爱操 | 成人精品一区二区三区中文字幕 | 亚洲精品综合一区二区 | 亚洲成人免费网址 | 国产91一区 | 人人干人人艹 | 欧美一区在线视频 | 欧美狠狠操 | 久久久青草婷婷精品综合日韩 | 亚洲综合区| 中文字幕亚洲免费 | 免费毛片网站在线观看 | 日韩视频免费看 | 99精品国产一区二区三区 | 亚洲欧美一区二区三区国产精品 | 中文字幕91| 91免费电影| 日本亚洲精品 |