新聞中心
如何提高服務(wù)器并發(fā)處理能力?
什么是服務(wù)器并發(fā)處理能力

一臺(tái)服務(wù)器在單位時(shí)間里能處理的請(qǐng)求越多,服務(wù)器的能力越高,也就是服務(wù)器并發(fā)處理能力越強(qiáng)。
服務(wù)器的本質(zhì)工作就是,爭(zhēng)取以最快的速度將內(nèi)核緩沖區(qū)中的用戶(hù)請(qǐng)求數(shù)據(jù)一個(gè)不剩地都拿出來(lái),然后盡快處理,再將響應(yīng)數(shù)據(jù)放到一塊又能夠與發(fā)送數(shù)據(jù)的緩沖區(qū)中,接著處理下一撥請(qǐng)求。
而服務(wù)器并發(fā)處理能力,可以通過(guò)吞吐率來(lái)觀(guān)察,吞吐率,單位時(shí)間里服務(wù)器處理的最大請(qǐng)求數(shù),單位req/s。可以利用Jmeter工具進(jìn)行測(cè)試服務(wù)器服務(wù)器并發(fā)處理能力。
例如服務(wù)器的性能,web程序的并發(fā)能力,代碼,數(shù)據(jù)庫(kù)等等,這里以一個(gè)Web程序?yàn)槔?,說(shuō)明一下提高服務(wù)器處理并發(fā)能力的
服務(wù)器之所以可以同時(shí)處理多個(gè)請(qǐng)求,在于操作系統(tǒng)通過(guò)多執(zhí)行流體系設(shè)計(jì)使得多個(gè)任務(wù)可以輪流使用系統(tǒng)資源,這些資源包括CPU,內(nèi)存以及I/O. 這里的I/O主要指磁盤(pán)I/O, 和網(wǎng)絡(luò)I/O。
任何一臺(tái)服務(wù)器,都是有性能上限的。服務(wù)器處理請(qǐng)求需要消耗服務(wù)器端的資源,比如說(shuō):CPU、內(nèi)存、網(wǎng)絡(luò)連接數(shù)、磁盤(pán)I/O等,由于服務(wù)器端的資源是有限的,所以它能同時(shí)處理的請(qǐng)求也是有限的。
不同運(yùn)維人員管理的服務(wù)器性能上也是會(huì)有差異的,我們可以通過(guò)一系列的技術(shù)手段來(lái)提升服務(wù)器的并發(fā)處理能力。
服務(wù)器在一段時(shí)間內(nèi)能處理的請(qǐng)求數(shù)越多,就代表此服務(wù)器性能越好,我們就說(shuō)此服務(wù)器并發(fā)能力越高。
服務(wù)器并發(fā)能力的提升不光光要從服務(wù)端優(yōu)化,客戶(hù)端的優(yōu)化也是不可缺少的。這里列舉了一些方案供大家參考:
1、服務(wù)器端優(yōu)化
硬件升級(jí):不同業(yè)務(wù)類(lèi)型對(duì)服務(wù)器硬件要求不同,比如數(shù)據(jù)庫(kù)服務(wù)器對(duì)硬盤(pán)和CPU要求較高,NoSQL服務(wù)器對(duì)內(nèi)存要求高;
帶寬升級(jí):服務(wù)器帶寬也會(huì)限制網(wǎng)絡(luò)請(qǐng)求連接數(shù),帶寬小請(qǐng)求也會(huì)越慢;
請(qǐng)求分流:通過(guò)負(fù)載均衡、集群、分布式架構(gòu)將請(qǐng)求分?jǐn)偟蕉嗯_(tái)服務(wù)器上,減少單一服務(wù)器的負(fù)載壓力;
應(yīng)用優(yōu)化:代碼里避免死循環(huán)、對(duì)于網(wǎng)絡(luò)請(qǐng)求要控制好超時(shí)時(shí)間;能異步處理的邏輯則異步化處理;
數(shù)據(jù)庫(kù)優(yōu)化:SQL優(yōu)化以提升SQL執(zhí)行效率;數(shù)據(jù)庫(kù)讀寫(xiě)分離避免讀、寫(xiě)鎖帶來(lái)的性能開(kāi)銷(xiāo);避免不必要的鎖;
如果是指硬件處理并發(fā)能力的話(huà): 選擇更多核心的CPU,更大的CPU緩存,選擇更大的內(nèi)存,選擇更快的外設(shè)等等。
如果是指軟件處理能力的話(huà),這就涉及到軟件架構(gòu)設(shè)計(jì)了。一般來(lái)說(shuō),多線(xiàn)程多進(jìn)程能夠提供并行處理能力,但是不是越多越好。一般來(lái)說(shuō)進(jìn)程/線(xiàn)程數(shù)應(yīng)該等于CPU核心數(shù),這樣盡量發(fā)揮硬件優(yōu)勢(shì)。而且盡量避免使用鎖導(dǎo)致使線(xiàn)程們互相等待,這個(gè)非常重要。
1.評(píng)估你的業(yè)務(wù)復(fù)雜度,預(yù)估用戶(hù)并發(fā)量
2.基于你的評(píng)估,拆分模塊,可以按照CQRS模型拆分,比如拆分出讀和寫(xiě),隔離核心接口。
3.考慮你的業(yè)務(wù)模型中,哪些可以異步化,可以使用多線(xiàn)程(線(xiàn)程池)或者mq形式分發(fā)給子模塊或者子系統(tǒng)進(jìn)行處理
4.利用io多路復(fù)用模型,并調(diào)整你服務(wù)器的文件描述符、tcp鏈接等參數(shù)達(dá)到最佳
5.讀多用緩存,構(gòu)建多級(jí)緩存,應(yīng)用內(nèi)緩存作為一級(jí)緩存,redis作為二級(jí)緩存。同時(shí)避免出現(xiàn)慢sql,大事務(wù)。
6.寫(xiě)多嘗試mq異步化,消峰填谷。選擇合適的數(shù)據(jù)存儲(chǔ)方式(數(shù)據(jù)庫(kù)的存儲(chǔ)引擎,文件的分布式存儲(chǔ)),io是最大的瓶頸,要進(jìn)行優(yōu)化。同時(shí)減少鎖的競(jìng)爭(zhēng),可使用樂(lè)觀(guān)鎖形式。
7.對(duì)你的編程語(yǔ)言進(jìn)行優(yōu)化,比如java的jvm gc也會(huì)影響性能的。
8.可嘗試跨語(yǔ)言編程,或者直接使用擅長(zhǎng)高并發(fā)的語(yǔ)言,golang erlang rust等
9.根據(jù)你的評(píng)估選擇合適的硬件資源,性能不是硬件砸出來(lái)的,要做資源評(píng)估,對(duì)接口進(jìn)行壓測(cè)。可以使用cdn,數(shù)據(jù)庫(kù),緩存等使用物理機(jī),應(yīng)用使用容器技術(shù)。確定你的接口是io密集還是cpu密集,io密集區(qū)分硬盤(pán)io還是網(wǎng)絡(luò)io,分別采用ssd或高速網(wǎng)絡(luò)。對(duì)于cpu密集要提高cpu和內(nèi)存。對(duì)于數(shù)據(jù)庫(kù)和緩存,cpu,內(nèi)存和網(wǎng)絡(luò)都要求資源高,網(wǎng)絡(luò)要保證萬(wàn)兆光模塊。
10.對(duì)于你的數(shù)據(jù)庫(kù),緩存等與應(yīng)用的之間的網(wǎng)絡(luò)建議距離越近越好,甚至是同一機(jī)房。
到此,以上就是小編對(duì)于數(shù)據(jù)中心提供服務(wù)的問(wèn)題就介紹到這了,希望這1點(diǎn)解答對(duì)大家有用。
當(dāng)前文章:以數(shù)據(jù)中心為主題的文章標(biāo)題:優(yōu)化服務(wù)器數(shù)據(jù),提升效率
當(dāng)前地址:http://m.5511xx.com/article/dpcgjos.html


咨詢(xún)
建站咨詢(xún)
