0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何理解服務(wù)器的高性能

454398 ? 來源: Chinaunix ? 作者:Moonecho ? 2020-09-25 14:53 ? 次閱讀

對(duì)于大部分應(yīng)用來說,想要高性能,主要是要做到盡可能的減少網(wǎng)絡(luò)請(qǐng)求(含DB、Redis、MongoDB、MQ)等。幾乎所有的應(yīng)用,性能瓶頸永遠(yuǎn)是在帶寬那里;關(guān)于各個(gè)組件到CPU的時(shí)間周期,文字描述如下:L1>L2>memory>disk>internet。

大家都知道IP是逐跳協(xié)議,也就是說我只能從一個(gè)路由器,到下一個(gè)路由器,再到下一個(gè)路由器,如果你的電腦到服務(wù)器,中途要經(jīng)過很多個(gè)路由器,那時(shí)間周期就會(huì)長很多很多很多。為什么要做CDN、P2P等也是這個(gè)考慮,縮短網(wǎng)絡(luò)的路徑(降低帶寬承載也是一方面)。

就像是我有一個(gè)游戲服務(wù)器,在線人數(shù)約4000,里面是一個(gè)狀態(tài)機(jī)在跑,需要不斷的去檢測各種狀態(tài)、經(jīng)驗(yàn)、星座、任務(wù)開放、技能開放等。一個(gè)玩家大約10個(gè)狀態(tài)的判定,4000個(gè)玩家必須在200ms之內(nèi)檢測完畢,不然延遲會(huì)很嚴(yán)重,那1s就是大約執(zhí)行5次,如果每一次數(shù)據(jù)都去Redis去取,大約是5*10*4000 = 200k次,別說Redis,再牛的服務(wù)器都頂不??!

遇到這種情況,建議把數(shù)據(jù)放在內(nèi)存里面,直接從內(nèi)存取,然后foreach。大部分的應(yīng)用優(yōu)化到這里,基本上應(yīng)付所謂的日pv百萬,就不是什么問題了。

到了這一步,那么問題來了,對(duì)于內(nèi)部應(yīng)用,比如分布式文件存儲(chǔ)、數(shù)據(jù)分析、任務(wù)調(diào)度,咋整?

對(duì)于大數(shù)據(jù),其實(shí)一直是一個(gè)偽命題,數(shù)據(jù)量太大屬于硬傷。所有的做大數(shù)據(jù)處理的,都是把數(shù)據(jù)分成小數(shù)據(jù),然后分塊來處理,最后再合并。其實(shí)從MySQL、Oracle、msSQL等一系列人RMDB的分區(qū),分庫上的處理就可以看出來。想要提高性能,必須要做到,每個(gè)模塊處理的數(shù)據(jù)量,都是細(xì)分到了一定粒度的。這個(gè)時(shí)候index、group、hash等的重要性,在這里就體現(xiàn)出來了。

若我有一個(gè)業(yè)務(wù)系統(tǒng),每天的日志大約是10個(gè)G,一個(gè)月就大約是300G,一季度大約1T,我需要看每小時(shí)/每天/每周/每月/每季度的各種報(bào)表,每次都去數(shù)T里面去找,肯定是不可能的。

一般按業(yè)務(wù)分析每分鐘的數(shù)據(jù),10G/24/60大約7M,然后生成一個(gè)分析后的結(jié)果文件,大約幾K,1小時(shí)就是60個(gè)文件,需要查看每小時(shí)的數(shù)據(jù),則將60個(gè)文件的結(jié)果合并。

那我需要查看某一個(gè)用戶,最近10天來的所有操作/訂單,那原分組方式,已經(jīng)無法滿足,這個(gè)時(shí)候怎么辦呢?

在插入用戶數(shù)據(jù)的時(shí)候,可以按照一定規(guī)則,比如用戶編號(hào)的后兩位取摸,去存儲(chǔ)在某一個(gè)文件里面,10G的數(shù)據(jù),則可以相對(duì)平均的分配到100個(gè)文件里面去,需要查看某用戶時(shí),則可以針對(duì)用戶編號(hào)取摸,直接定位到那個(gè)文件,然后再去里面查詢數(shù)據(jù)。這個(gè)是比較簡單的gourp+index。這一塊想明白以后,你就可以在這個(gè)基礎(chǔ)上面,寫個(gè)定制化的簡單的fs了

經(jīng)常聽到有人說,多線程的程序還不如單線程的程序性能高。那如何編寫一個(gè)能合理利用CPU資源的多線程程序?

大家都知道,線程切換是需要額外的開銷,所以在編寫多線程程序的時(shí)候,就需要盡可能的避免共享式資源,這樣就可以在保證數(shù)據(jù)一致性的同時(shí),而又避開線程等待的時(shí)間。

舉個(gè)簡單的例子:

我有個(gè)大的字典(Dictionary/Map)存放用戶的會(huì)話數(shù)據(jù),每個(gè)線程,去這個(gè)字典里面去讀/寫數(shù)據(jù)的時(shí)候,都需要去上鎖,才能保證數(shù)據(jù)的一致性,如果兩個(gè)(更多)線程同時(shí)去讀/寫數(shù)據(jù),其他的線程就需要去等待當(dāng)前線程釋放資源,線程越多,則等待的幾率越大,性能則越差,多線程處理變成了單線程處理,且等待完了以后,能否再切換回來這個(gè)線程繼續(xù)執(zhí)行,又是另外一個(gè)開銷,這一部分屬于系統(tǒng)拖托管,屬于不可控的。

那么問題來了:怎么解決呢?

根據(jù)硬件和實(shí)際測試數(shù)據(jù),合理分配線程資源,比如,我初始化了8個(gè)線程,每個(gè)用戶的請(qǐng)求,對(duì)于線程總數(shù)取模,保證每個(gè)用戶的請(qǐng)求,同一個(gè)線程處理,則可以在每個(gè)線程內(nèi)部,存放這些用戶數(shù)據(jù),每個(gè)線程在自己內(nèi)部進(jìn)行存取,避開了lock,也避開了線程等待/切換帶來的資源開銷。不取模,隨機(jī)分配線程,然后用一個(gè)hash表來存放,也可。讓每個(gè)線程,專注于做自己的事情,任務(wù)調(diào)度作業(yè),也是基于這個(gè)處理。把線程處理機(jī)制,放大到虛擬機(jī)/物理機(jī)之間的消息分發(fā),也是如此。

總體來說,避開網(wǎng)絡(luò)開銷,避開海量數(shù)據(jù),避開資源爭奪 是所有高性能的幾個(gè)基本要素。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10702

    瀏覽量

    209376
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    8701

    瀏覽量

    84552
  • 路由器
    +關(guān)注

    關(guān)注

    22

    文章

    3641

    瀏覽量

    112808
  • 數(shù)據(jù)分析
    +關(guān)注

    關(guān)注

    2

    文章

    1393

    瀏覽量

    33909
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    linux服務(wù)器和windows服務(wù)器

    較為熟悉,需要高性能和穩(wěn)定性,并且希望能夠進(jìn)行自定義配置和更好的安全性,那 么Linux服務(wù)器是一個(gè)不錯(cuò)的選擇。 而如果你對(duì)服務(wù)器操作系統(tǒng)不太熟悉,需要廣泛的應(yīng)用支持和易用的管理工具,并且在商業(yè)
    發(fā)表于 02-22 15:46

    海單路高性能服務(wù)器主板

    服務(wù)器
    jf_10805031
    發(fā)布于 :2024年04月26日 14:23:58

    服務(wù)器技術(shù)基礎(chǔ)

    中國高性能計(jì)算機(jī)標(biāo)準(zhǔn)1.1 什么是服務(wù)器服務(wù)器Server從功能上說,它負(fù)責(zé)偵聽網(wǎng)絡(luò)上其它客戶機(jī)(Client)提交的服務(wù)請(qǐng)求,并提供相應(yīng)的
    發(fā)表于 09-12 22:55

    華為服務(wù)器為什么可以保持高性能和高可靠性

    通過第三方調(diào)研機(jī)構(gòu)數(shù)據(jù)可以看出,華為服務(wù)器出貨量不斷攀升,得益于其持續(xù)通過高強(qiáng)度的研發(fā)投入和聚焦創(chuàng)新,從而為用戶提供高可靠、高性能、簡單易用的計(jì)算平臺(tái)。
    發(fā)表于 08-02 07:19

    高性能服務(wù)器開發(fā)2018年的原創(chuàng)匯總

    高性能服務(wù)器開發(fā) 2018 年原創(chuàng)匯總
    發(fā)表于 06-10 12:33

    什么是服務(wù)器

    大數(shù)據(jù)_02【大數(shù)據(jù)基礎(chǔ)知識(shí)】01 什么是服務(wù)器02 服務(wù)器類型03 存儲(chǔ)磁盤(硬盤)01 什么是服務(wù)器服務(wù)器: 也稱伺服,是一種
    發(fā)表于 07-16 07:35

    高性能高并發(fā)服務(wù)器架構(gòu)分享

    由于自己正在做一個(gè)高性能大用戶量的論壇程序,對(duì)高性能高并發(fā)服務(wù)器架構(gòu)比較感興趣,于是在網(wǎng)上收集了不少這方面的資料和大家分享。希望能和大家交流 msn: ——————————————————————————————————————
    發(fā)表于 09-16 06:45

    如何正確的理解使用WEB服務(wù)器和應(yīng)用程序服務(wù)器及HTTP服務(wù)器

    WEB服務(wù)器、應(yīng)用程序服務(wù)器、HTTP服務(wù)器有何區(qū)別?IIS、Apache、Tomcat、Weblogic、WebSphere都各屬于哪種服務(wù)器,這些問題困惑了很久,今天終于梳理清楚了
    發(fā)表于 05-27 08:00 ?0次下載
    如何正確的<b class='flag-5'>理解</b>使用WEB<b class='flag-5'>服務(wù)器</b>和應(yīng)用程序<b class='flag-5'>服務(wù)器</b>及HTTP<b class='flag-5'>服務(wù)器</b>

    詳解Nginx高性能的HTTP和反向代理服務(wù)器

    Nginx 是一個(gè)高性能的 HTTP 和反向代理服務(wù)器,特點(diǎn)是占用內(nèi)存少,并發(fā)能力強(qiáng),事實(shí)上 Nginx 的并發(fā)能力確實(shí)在同類型的網(wǎng)頁服務(wù)器中表現(xiàn)較好。
    的頭像 發(fā)表于 03-16 11:23 ?2303次閱讀

    如何監(jiān)控服務(wù)器性能?

    無論您的服務(wù)器是在Windows還是Unix上運(yùn)行,這些關(guān)鍵性能領(lǐng)域都可以作為任何服務(wù)器監(jiān)控策略的良好起點(diǎn),跟蹤這些性能指標(biāo)作為性能瓶頸的指
    的頭像 發(fā)表于 07-19 16:01 ?6119次閱讀

    如何理解高性能服務(wù)器高性能、高并發(fā)?

    當(dāng)前,隨著“東數(shù)西算”政策的落地,算力時(shí)代正在全面開啟。隨著機(jī)器學(xué)習(xí)、深度學(xué)習(xí)的快速發(fā)展,人們對(duì)高性能服務(wù)器這一概念不再陌生。伴隨著數(shù)據(jù)分析、數(shù)據(jù)挖掘數(shù)目的不斷增大,傳統(tǒng)的風(fēng)冷散熱方式已經(jīng)不足以滿足散熱需要,這就需要新興的液冷散熱技術(shù)以此滿足節(jié)能減排、靜音高效的需求。
    的頭像 發(fā)表于 01-13 09:45 ?2142次閱讀
    如何<b class='flag-5'>理解</b><b class='flag-5'>高性能</b><b class='flag-5'>服務(wù)器</b>的<b class='flag-5'>高性能</b>、高并發(fā)?

    高性能整流顯著提高服務(wù)器供電效率

    電子發(fā)燒友網(wǎng)站提供《高性能整流顯著提高服務(wù)器供電效率.pdf》資料免費(fèi)下載
    發(fā)表于 07-26 09:46 ?0次下載
    <b class='flag-5'>高性能</b>整流<b class='flag-5'>器</b>顯著提高<b class='flag-5'>服務(wù)器</b>供電效率

    gpu服務(wù)器是干什么的 gpu服務(wù)器與cpu服務(wù)器的區(qū)別

     相比于傳統(tǒng)的CPU服務(wù)器,GPU服務(wù)器支持同時(shí)計(jì)算大量相似的計(jì)算操作,可以實(shí)現(xiàn)更強(qiáng)的并行計(jì)算性能。GPU服務(wù)器通常配備多個(gè)高性能的GPU,
    的頭像 發(fā)表于 12-02 17:20 ?1718次閱讀

    人工智能服務(wù)器高性能計(jì)算需求

    人工智能(AI)服務(wù)器是一種專門為了運(yùn)行人工智能應(yīng)用和提供大數(shù)據(jù)處理能力而設(shè)計(jì)的高性能計(jì)算機(jī)。它既可以支持本地應(yīng)用程序和網(wǎng)頁,也可以為云和本地服務(wù)器提供復(fù)雜的AI模型和服務(wù)。
    的頭像 發(fā)表于 12-08 09:44 ?394次閱讀

    國產(chǎn)高性能溫補(bǔ)晶振用于服務(wù)器光模塊,替換SiTime

    國產(chǎn)高性能溫補(bǔ)晶振用于服務(wù)器光模塊,替換SiTime
    的頭像 發(fā)表于 08-09 09:41 ?192次閱讀
    國產(chǎn)<b class='flag-5'>高性能</b>溫補(bǔ)晶振用于<b class='flag-5'>服務(wù)器</b>光模塊,替換SiTime