在優(yōu)化之前,先要搞清楚服務(wù)器的具體業(yè)務(wù)需求是什么,據(jù)此來優(yōu)化其中的短板。
4.1. 存儲(chǔ)的優(yōu)化
IO相對(duì)來說比較耗時(shí),我們都知道越靠近CPU的存儲(chǔ),其訪問速度越快,但是其價(jià)格越貴。下圖來展示了不同存儲(chǔ)的容量以及訪問時(shí)間。
目前很多同學(xué)在優(yōu)化服務(wù)器性能的時(shí)候都會(huì)從存儲(chǔ)這方面入手。
儲(chǔ)存的容量以及訪問時(shí)間
4.1.1. 用內(nèi)存換時(shí)間
很多web應(yīng)用是有大量的靜態(tài)內(nèi)容,這些靜態(tài)內(nèi)容主要都是一些小文件,并且會(huì)被頻繁的讀,采用Apache以及nginx作為web服務(wù)器。在web訪問量不大的時(shí)候,這兩個(gè)http服務(wù)器可以說是非常的迅速和高效,如果負(fù)載量很大的時(shí)候,我們可以采用在前端搭建cache服務(wù)器,將服務(wù)器中的靜態(tài)資源文件緩存到操作系統(tǒng)內(nèi)存中直接進(jìn)行讀操作,因?yàn)橹苯訌膬?nèi)存讀取數(shù)據(jù)的速度要遠(yuǎn)大于從硬盤讀取。這個(gè)其實(shí)也是增加內(nèi)存的成本來降低訪問磁盤帶來的時(shí)間消耗。
對(duì)于一些重要性不高但是又想要快速響應(yīng)用戶請(qǐng)求的部分?jǐn)?shù)據(jù)可以考慮內(nèi)存數(shù)據(jù)庫來存儲(chǔ),同時(shí)可以定期把數(shù)據(jù)固化到磁盤。
這里圖個(gè)新鮮,說說內(nèi)存換時(shí)間在大數(shù)據(jù)云計(jì)算相關(guān)領(lǐng)域的一些應(yīng)用。Spark最近很火,它的核心要數(shù)RDD了,RDD最早來源與Berkeley實(shí)驗(yàn)室的一篇論文《Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing》?,F(xiàn)有的數(shù)據(jù)流系統(tǒng)對(duì)兩種應(yīng)用的處理并不高效:一是迭代式算法,這在圖應(yīng)用和機(jī)器學(xué)習(xí)領(lǐng)域很常見;二是交互式數(shù)據(jù)挖掘工具。這兩種情況下,將數(shù)據(jù)保存在內(nèi)存中能夠極大地提高性能。這里不詳細(xì)說RDD了,只是想說程序員一直是覬覦內(nèi)存的讀取速度的。
除了對(duì)內(nèi)存方面的優(yōu)化,還可以對(duì)磁盤這邊進(jìn)行優(yōu)化。跟傳統(tǒng)機(jī)械硬盤相比,固態(tài)硬盤具有快速讀寫、質(zhì)量輕、能耗低以及體積小等特點(diǎn)。但是ssd的價(jià)格相比傳統(tǒng)機(jī)械硬盤要貴,有條件的可以使用ssd來代替機(jī)械硬盤。
另外對(duì)于業(yè)務(wù)上查詢請(qǐng)求,在建表的時(shí)候可以根據(jù)相關(guān)需求設(shè)置索引等,以提高查詢速度。
4.3. 利用多核優(yōu)勢(shì)
現(xiàn)在運(yùn)行服務(wù)器的主流機(jī)器配置都是多核CPU的,我們?cè)谠O(shè)計(jì)服務(wù)器的時(shí)候可以利用多核心的特點(diǎn),采用多進(jìn)程或者多線程的框架。
對(duì)于多線程的使用,特別是使用線程池的時(shí)候可以通過測(cè)試不同線程池服務(wù)器的性能來設(shè)置合適的線程池。
4.4. 選擇合適的IO模型
《UNIX網(wǎng)絡(luò)編程卷1:套接字聯(lián)網(wǎng)API》中有一幅圖比較經(jīng)典。
IO模型
這里并不是說一定要用某個(gè)模型,epoll也并不是在所有情況下都比select性能要好的,在選擇的時(shí)候還是要結(jié)合業(yè)務(wù)需求來。
4.5. 分布式部署程序
當(dāng)單機(jī)服務(wù)器已經(jīng)找不到合適的優(yōu)化點(diǎn)時(shí),我們可以通過分布式部署來提高服務(wù)器的響應(yīng)能力。優(yōu)秀的服務(wù)器開發(fā)都會(huì)為自己的服務(wù)器的擴(kuò)容,容災(zāi)提出一些解決方案。個(gè)人覺得服務(wù)器設(shè)計(jì)的時(shí)候簡(jiǎn)單點(diǎn)比較好,這樣后期擴(kuò)容的時(shí)候會(huì)很方便。
服務(wù)器性能測(cè)試是一項(xiàng)比較繁瑣的事情,作為沒有做過性能測(cè)試的同學(xué)需要事先了解服務(wù)器的協(xié)議是如何定義的,建立框架管理機(jī)器人、統(tǒng)計(jì)測(cè)試中機(jī)器人收到回包的結(jié)果以及壓測(cè)過程中各項(xiàng)性能數(shù)據(jù)的變化。在完成了測(cè)試的過程后,可以從硬件、操作系統(tǒng)以及應(yīng)用程序等多個(gè)方面進(jìn)行對(duì)性能結(jié)果進(jìn)行定位。最后在明確業(yè)務(wù)需求的前提下,通過存儲(chǔ)優(yōu)化、數(shù)據(jù)庫優(yōu)化以及分布式部署程序等手段完成服務(wù)器的性能優(yōu)化。
聯(lián)系客服