在全球經濟一(yī)體(tǐ)化(huà)的趨勢下(xià),企業建立了(le)越來(lái)越多的網站(zhàn),運營商(shāng)提供了(le)越來(lái)越多的服務(wù)器(qì)租賃服務(wù),雲上(shàng)的也(yě)有華為(wèi)雲主機等,無論是哪一(yī)種服務(wù)器(qì),服務(wù)器(qì)的性能(néng)都是不容忽視(shì)的。為(wèi)了(le)達到利益最大化(huà),提高服務(wù)器(qì)的性能(néng),最大限度地利用服務(wù)器(qì),這(zhè)是許多企業的訴求,可見,對服務(wù)器(qì)進行性能(néng)優化(huà),是一(yī)項非常重要和必要的工作(zuò)。
微子(zǐ)網絡認為(wèi)想要提服務(wù)器(qì)性能(néng)是非常簡單的,但(dàn)卻難以看到真正的效果。進行優化(huà)之前,首先要弄清楚服務(wù)器(qì)的具體(tǐ)業務(wù)需求是什(shén)麽,并根據這(zhè)些(xiē)需求對其進行優化(huà),所以說(shuō)主要有以下(xià)幾點:
1.内存數據庫的使用
存儲器(qì)數據庫,實際上(shàng)是把數據放(fàng)在存儲器(qì)上(shàng)直接操作(zuò)的數據庫。與磁盤相比,存儲器(qì)的數據讀寫速度要快(kuài)好(hǎo)(hǎo)幾個(gè)數量級,将數據保存在存儲器(qì)中可以大大提高應用程序的性能(néng)。存儲器(qì)數據庫抛棄了(le)傳統的磁盤數據管理(lǐ)方式,基于所有數據在存儲器(qì)中的存儲,重新(xīn)設計了(le)系統結構,并在數據緩存、快(kuài)速算(suàn)法、并行操作(zuò)等方面做了(le)相應的改進,使數據處理(lǐ)速度大大高于傳統數據庫。
但(dàn)安全問題可以說(shuō)是内存數據庫的最大硬傷。由于存儲器(qì)本身(shēn)存在掉電損失這(zhè)一(yī)自然缺陷,所以我們在使用存儲器(qì)數據庫時(shí),通常會提前采取一(yī)些(xiē)保護機制來(lái)保護存儲器(qì)中的數據,如(rú)備份、記錄日志、熱備份或集群、與磁盤數據庫同步等等。有些(xiē)數據雖然不太重要,但(dàn)想對用戶的請求做出快(kuài)速響應,可以考慮使用内存數據庫進行存儲,同時(shí)定期将數據存儲在磁盤上(shàng)。
2. RDD的使用
Spark在大數據雲計算(suàn)相關(guān)領域的應用中,可用于加速數據處理(lǐ)。Spark的核心是 RDD,它是由 Berkeley實驗室發表的一(yī)篇論文《Resilient Distributed Datasets: AFault-Tolerant分(fēn)析框架基礎基礎》的最初來(lái)源。
已有數據流系統無法有效地處理(lǐ)兩種應用:一(yī)是在圖形應用和機器(qì)學習領域普遍存在的疊代式算(suàn)法,二是交互數據挖掘工具。無論哪種情況,将數據保存在内存中都能(néng)大大提高性能(néng)。
3.緩存增加
許多 web應用程序都有大量的靜态内容,其中大部分(fēn)都是小文件,而且會被頻繁讀取,采用 Apache和 nginx作(zuò)為(wèi)“web服務(wù)器(qì)”。當 web訪問量不大時(shí),這(zhè)兩台 http服務(wù)器(qì)可以說(shuō)是非常快(kuài)速和高效的,如(rú)果負載量很大,我們可以采用在前端構建一(yī)個(gè)緩存服務(wù)器(qì),将服務(wù)器(qì)上(shàng)的靜态資源文件緩存到操作(zuò)系統内存中直接讀取,因為(wèi)直接從内存讀取比從硬盤讀取更快(kuài)。這(zhè)實際上(shàng)也(yě)是增加内存成本,以減少訪問磁盤所需的時(shí)間(jiān)。
4. SSD的使用
除優化(huà)内存外,您還可以優化(huà)磁盤這(zhè)一(yī)面。與傳統的機械硬盤相比,固态硬盤具有讀寫速度快(kuài),質量輕,能(néng)耗低(dī),體(tǐ)積小等優點。但(dàn) ssd的價格比傳統的機械硬盤要高,有條件的可以用 ssd替代機械硬盤。
5.數據庫優化(huà)
大多數服務(wù)器(qì)請求最終都會落在數據庫中,而且随着數據量的增加,訪問數據庫的速度會變慢(màn)。為(wèi)了(le)提高請求處理(lǐ)速度,必須對原始單表進行切削。當前的主流 Linux服務(wù)器(qì)使用的數據庫是 mysql,如(rú)果我們用 mysql存儲一(yī)個(gè)單獨的數據表,那麽查詢速度将會變慢(màn)。基于适當的業務(wù)規則對數據庫進行分(fēn)區分(fēn)表,能(néng)有效地提高數據庫的訪問速度,提高服務(wù)器(qì)的整體(tǐ)性能(néng)。此外對于業務(wù)上(shàng)的查詢請求,可以在建表時(shí)根據相關(guān)要求設置索引等,以提高查詢速度。
6.選擇适當的 IO模式
輸入輸出模型分(fēn)為(wèi):
(1)阻塞 I/O模型:在數據未到達之前, I/O一(yī)直處于阻塞狀态,并在到達時(shí)返回。通常是 recvfrom,默認情況下(xià)是阻塞的。
(2).非阻塞 I/O模型:與阻塞相反,隻要 I/O不返回,則立即返回。當前線程不被阻塞。
IO重用模式:即自己學習的一(yī)部分(fēn)。多路(lù)複用是指将多路(lù)信号合并到一(yī)條線路(lù)上(shàng)進行處理(lǐ),就(jiù)像多條管道彙合成一(yī)條,而多路(lù)信号則相反。
IO複用模型主要是 select, poll, epoll;對于一(yī)個(gè) IO端口,兩次調用,兩次返回,與阻塞 IO相比沒有什(shén)麽優勢;關(guān)鍵在于能(néng)夠實現(xiàn)同時(shí)監聽(tīng)多個(gè) IO端口;該函數還會阻塞進程,但(dàn)與阻塞 I/O不同,它可以同時(shí)阻塞多個(gè) I/O操作(zuò)。同時(shí)對多個(gè)讀操作(zuò)、多個(gè)寫操作(zuò)的 I/O函數進行檢測,直到有數據可讀或可寫時(shí),才會真正調用 I/O操作(zuò)函數。
信号燈驅動:先打開套件接口信号燈驅動功能(néng),然後通過系統調用信号燈控制功能(néng)。在準備讀取數據報(bào)的時(shí)候,會為(wèi)這(zhè)個(gè)過程産生(shēng)一(yī)個(gè) SIGIO信号。随後可調用 recvfrom在信号處理(lǐ)程序中讀取數據報(bào),并通知井,主循環數據已準備好(hǎo)(hǎo)進行處理(lǐ)。還可以通知主循環讓其讀取數據報(bào)。
一(yī)個(gè)異步 IO模型:告訴内核開始一(yī)個(gè)操作(zuò),并在整個(gè)操作(zuò)完成之後(包括将内核的數據拷貝到用戶自己的緩沖區中)通知内核。此處并不意味着必須使用某種模型,而且在所有情況下(xià), epoll也(yě)不會比 select性能(néng)更好(hǎo)(hǎo),在做出選擇時(shí)還是與業務(wù)需求相結合。
7.多核處理(lǐ)戰略的使用
主流運行服務(wù)器(qì)的機器(qì)配置都是多核 CPU,在設計服務(wù)器(qì)時(shí)可以充分(fēn)利用多核的特性,采用多進程或多線程框架。對于多線程或多進程的選擇,可根據實際需要,結合各自的優缺點加以選擇。在處理(lǐ)多線程時(shí),尤其是使用線程池時(shí),可以通過測試不同線程池服務(wù)器(qì)的性能(néng)來(lái)設置适當的線程池。
8.分(fēn)布式部署工具
在單機服務(wù)器(qì)已無法找到适當的優化(huà)點的情況下(xià),可以通過分(fēn)布式部署提高服務(wù)器(qì)的響應速度。出色的服務(wù)器(qì)開發人(rén)員(yuán)都會針對服務(wù)器(qì)的擴展、容災提供一(yī)些(xiē)解決方案。個(gè)别服務(wù)器(qì)在設計時(shí)覺得簡單一(yī)點比較好(hǎo)(hǎo),以便後期擴展時(shí)會很方便。
微子(zǐ)網絡的服務(wù)器(qì)租用、快(kuài)速部署、多種線路(lù)可選、支持分(fēn)片專用線、 T級帶寬,可為(wèi)各類客戶提供更優質的 IDC服務(wù)。微子(zǐ)網絡是一(yī)家專注于服務(wù)器(qì)租用托管的IDC服務(wù)供應商(shāng),十餘年行業經驗積澱,安全穩定、可靠放(fàng)心,是國内IDC行業的領軍企業,協助萬千企業達成網絡信息化(huà),7*24小時(shí)人(rén)工服務(wù),售後無憂,有口皆碑。