久久精品中文字幕人妻熟女-中文字幕水蜜桃4免费高清视频-亚洲蜜臀av最新地址-一区二区不卡99精品日韩-亚洲国产日韩一区二区三区-亚洲欧洲中文字幕日韩天堂-成年人免费视频亚洲专区-视频免费观看网站不卡-国产精品久久久久久岛国欧美

行業(yè)動態(tài)

了解最新公司動態(tài)及行業(yè)資訊

當前位置:首頁>新聞中心>行業(yè)動態(tài)
全部 4217 公司動態(tài) 1081 行業(yè)動態(tài) 3136

云服務器服務器運維實戰(zhàn):如何高效處理多個客戶端連接?

時間:2022-05-01   訪問量:2462

1 服務器簡介

服務器是提供計算服務的設備。高性能Linux服務器運維。由于服務器需要響應用戶請求,因此在處理能力、穩(wěn)定性、安全性、可擴展性、可管理性等方面提出了更高的要求。隨著虛擬化技術的進步,云服務器(ECS)在國內迅速普及服務器運維技術,其管理方式比物理服務器更簡單、更高效。用戶可以快速創(chuàng)建或發(fā)布任意數(shù)量的云服務器,幫助企業(yè)降低開發(fā)、運維難度和整體IT成本,讓整個研發(fā)周期專注于核心業(yè)務創(chuàng)新。在網絡環(huán)境中,根據(jù)服務器提供的服務類型不同,分為文件服務器、

高性能linux服務器運維實戰(zhàn)

本次學習總結的主要內容是高性能linux服務器的運維:

如何處理多個客戶端連接。探索面對數(shù)百萬客戶端連接的性能優(yōu)化。服務器處理并發(fā)數(shù)據(jù)的效率。深入分析大數(shù)據(jù)通信時的 Linux 內核瓶頸。如何克服瓶頸 2 I/O 多路復用技術

2.1 循環(huán)模式

當服務器有多個網絡連接需要處理時,它會循環(huán)打開網絡連接列表以確定是否有數(shù)據(jù)要讀取。缺點:

慢(必須遍歷所有網絡連接)低效(可能在處理一個連接時阻塞,阻止檢查和處理其他網絡連接)示例:{int; ;};// std::deque ;// queue 1std::deque;// queue 2 void ::(std::deque *){char data[1024] = {0};int len ??= 0;for(int i = 0; i size( ); ++i){//當沒有數(shù)據(jù)要讀取時,發(fā)生阻塞 len = read(->at(i)., data, data); //處理數(shù)據(jù) bzero(data, data);//清空緩存 }}

2.2 種方式

首先,將第二、三、四參數(shù)所指向的點復制到內核,輪詢每個SET描述符,并記錄在臨時結果(fdset)中。如果發(fā)生事件,臨時結果將被寫入用戶空間并返回。

缺點:

返回后,需要一一檢查描述符是否為SET(事件是否發(fā)生)。(支持的

文件描述符數(shù)量太少,默認為1024)。

例子:

無效 ::(std::deque *){char 數(shù)據(jù)[1024] = {0}; input;// fdset 記錄輪詢結果 int len = 0; 整數(shù) = 0; (&input);// 清除記錄 for(int i = 0; i size(); ++i){(->at(i)., &input); = (->at(i). + 1, &input, NULL, NULL, NULL);//檢測事件是否發(fā)生 if(> 0 && (->at(i)., &input)){//讀取數(shù)據(jù)len = read(->at(i)., data, data);//處理數(shù)據(jù) bzero(data, data);}//處理其他事情}}

2.3 輪詢方式

與 poll 不同的是,需要注意的事件通過數(shù)組傳遞給內核,因此描述符的數(shù)量沒有限制。和 中的字段用于表示感興趣的事件和發(fā)生的事件,因此數(shù)組只需要初始化一次。poll的實現(xiàn)機制類似。它對應于內核,只是 poll 將一個數(shù)組傳遞給內核,然后輪詢 poll 中的每個描述符。與處理 fdset 相比,poll 效率更高。

缺點:

poll 需要檢查其中每個元素的值,以了解是否發(fā)生了事件。

例子:

std:: ;void ::(std::deque *){int = 0;int len ???= 0;char data[1024] = {0};//初始化容器 for(int i = 0; i size (); ++i){ pfd;pfd.fd = ->at(i).;//設置。= ;//設置事件 pfd. = 0;//設置無事件返回,設置為零。(pfd); }while(1){ = poll(&*.begin(), .size(), -1);//負數(shù)表示無限等待,直到有事件發(fā)生并返回for(::it = .begin(); it != .end() && > 0; ++it){ // 遍歷查看fd產生的事件 if (it-> & ){len = read(it->fd, buf , data); //處理數(shù)據(jù) bzero(data, data);}}//處理其他東西}}

相關視頻推薦

linux下epoll的秘密——支撐億級IO的底層基石

90分鐘了解Linux內存架構,numa的優(yōu)勢,slab的實現(xiàn),原理

為什么dpdk越來越火,看完讓人豁然開朗

學習地址:C/C++ Linux服務器開發(fā)/后端架構師【零語音教育】-學習視頻教程-騰訊課堂

C/C++ Linux服務器架構師需要學習資料和獲?。ㄙY料包括C/C++、Linux、技術、Nginx、MySQL、Redis、ZK、流媒體、CDN、P2P、K8S、TCP/IP、協(xié)程、DPDK等.),免費分享

高性能linux服務器運維實戰(zhàn)

2.4 epoll方法

與 epoll 和 poll 不同的是,它不需要每次調用時都將事件描述信息復制到內核中。第一次調用后,事件信息會與對應的 epoll 描述符相關聯(lián)。其次,epoll不是通過輪詢,而是在等待描述符上注冊一個回調函數(shù)。當事件發(fā)生時,回調函數(shù)負責將發(fā)生的事件存儲到就緒事件列表中,最后寫入用戶空間。

epoll返回后,這個參數(shù)指向的緩沖區(qū)就是發(fā)生的事件,緩沖區(qū)中的每個元素都可以被處理,不需要像poll一樣輪詢和檢查。

例子:

void ::(std::deque *){int ;//事件個數(shù) int i = 0;int len ??= 0;char data[1024] = {0};int = (1024); //(i = 0; i size(); ++i){ ev;ev. = | ;//設置觸發(fā)事件的類型 ev.data.fd = ->at(i).;//到epoll add( ( , , ->at(i)., &ev )

多線程技術還可以處理高并發(fā)客戶端連接,因為可以在服務器中創(chuàng)建大量線程來監(jiān)視連接。缺點:多線程技術不適合處理長連接,因為在linux中建立線程會消耗棧空間,并且在產生大量連接時會耗盡系統(tǒng)內存。例子:

{int; pid;bool ;};std::deque ;//客戶端隊列 void ::(){int i = 0;//創(chuàng)建多線程連接 for(i = 0; i , data, data); //處理數(shù)據(jù) bzero(data, data);//清空緩存}(NULL);}

多線程+I/O多路復用技術,用一個線程監(jiān)控一個端口和描述符是否有讀寫事件,然后將事件分發(fā)給其他工作線程處理數(shù)據(jù)。模型架構:

高性能linux服務器運維實戰(zhàn)

該架構主要基于單線程I/O復用(/poll/epoll),實現(xiàn)了高并發(fā),避免了多線程I/O來回切換的各種開銷。線程進一步提高業(yè)務處理能力,避免產生過多線程。

4 CPU多核并行計算

程序的線程是指可以同時并發(fā)執(zhí)行的邏輯單元數(shù),通過時間片分配算法實現(xiàn);

CPU的線程是指使CPU的指令執(zhí)行過程(取指、解釋、執(zhí)行、內存訪問、寫入數(shù)據(jù))流水線化以提高并發(fā)性的方法。

并行計算和多線程的區(qū)別:

并行計算的 CPU 利用率比多線程高,因此相對來說效率更高。并行計算是使用多個 CPU 內核進行計算,而多線程是使用一個 CPU 內核在不同的時間段進行計算。并行計算是在多核 CPU 上運行多個線程,多線程是在單核 CPU 上運行多個線程。

綜上所述,可以得出結論,多線程并不能真正提升數(shù)據(jù)處理能力,受限于單核CPU的性能。當服務器需要執(zhí)行大量數(shù)據(jù)操作(如圖形處理、復雜算法)時,可以考慮多核并行計算。

5 深入分析內核性能

5.1 中斷處理

當大量數(shù)據(jù)包到達網絡時,會產生頻繁的硬件中斷請求。這些硬件中斷可以中斷較低優(yōu)先級的軟中斷或系統(tǒng)調用的執(zhí)行。高性能開銷。

5.2 內存拷貝

一般情況下,一個網絡數(shù)據(jù)包從網卡到應用程序需要經過以下過程:數(shù)據(jù)從網卡通過DMA(直接內存訪問)等方式傳輸?shù)絻群舜蜷_的緩沖區(qū),以及然后從內核空間復制到用戶空間。在 Linux 內核協(xié)議棧中,這個耗時的操作甚至占到整個數(shù)據(jù)包處理流程的 57.1%。

5.3 上下文切換

頻繁到達的硬件中斷和軟中斷隨時可能搶占系統(tǒng)調用的執(zhí)行,會產生大量的上下文切換開銷。此外,在基于多線程的服務器設計框架中,線程間的調度也會產生頻繁的上下文切換開銷。同樣,鎖競爭的能耗也是一個很嚴重的問題。

5.4 本地故障

現(xiàn)在的主流處理器都是多核的,也就是說一個數(shù)據(jù)包的處理可能會跨越多個CPU核。例如服務器運維技術,一個數(shù)據(jù)包可能在cpu0上被中斷,在cpu1上以內核態(tài)處理,在cpu2上以用戶態(tài)處理。多核很容易導致CPU緩存失效和本地失效。

5.5 內存管理

傳統(tǒng)的服務器內存頁是 4K。為了提高內存訪問速度,避免緩存未命中,可以增加緩存中映射表的條目,但這會影響CPU的檢索效率。結合以上問題,可以看出內核本身就是一個非常大的瓶頸,解決辦法就是想辦法繞過內核。

6 高性能網絡框架DPDK

DPDK 提供庫函數(shù)和驅動程序支持,以在 Intel 處理器架構下的用戶空間中進行高效的數(shù)據(jù)包處理。它不同于為通用目的而設計的Linux系統(tǒng),而是專注于對網絡應用程序中的數(shù)據(jù)包進行高性能處理。

DPDK官網:

DPDK架構圖:

高性能linux服務器運維實戰(zhàn)

Linux內核網絡數(shù)據(jù)流:

硬件中斷--->獲取包分發(fā)給內核線程--->軟件中斷--->內核線程處理協(xié)議棧中的包--->通知用戶層和用戶層接收封裝-->網絡層--->邏輯層-->業(yè)務層

DPDK網絡數(shù)據(jù)流:

硬件中斷--->放棄中斷過程,用戶層通過設備映射取包--->進入用戶層協(xié)議棧--->邏輯層--->業(yè)務層

一起來看看dpdk取得了哪些突破?

在UIO(用戶空間I/O技術)的支持下,dpdk可以繞過內核協(xié)議棧,這本質上要歸功于UIO技術。UIO可以攔截中斷并重置中斷回調行為,從而繞過后續(xù)的內核協(xié)議棧。工藝流程。

本站為粉絲站,提供全網最新優(yōu)惠碼和最全優(yōu)惠券。本站優(yōu)惠碼只能在中文站使用,香港主機、藝術主機、美國VPS均可使用。

不同時間段,官方會給渠道不同的優(yōu)惠,優(yōu)惠30%~70%,祝你好運??!

如果您有任何問題,請加入我們的粉絲群。

馬上去中文官網選擇合適的虛擬主機,活動期間還贈送1個國際域名?。?/p>

上一篇:越來越多的企業(yè)把IT部門的職責交第三方公司來做

下一篇:it運維 保證系統(tǒng)完好運行,做好系統(tǒng)運行維護的管理工作,關鍵角色主要職責

發(fā)表評論:

評論記錄:

未查詢到任何數(shù)據(jù)!

在線咨詢

點擊這里給我發(fā)消息 售前咨詢專員

點擊這里給我發(fā)消息 售后服務專員

在線咨詢

免費通話

24小時免費咨詢

請輸入您的聯(lián)系電話,座機請加區(qū)號

免費通話

微信掃一掃

微信聯(lián)系
返回頂部