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

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


咨詢
建站咨詢
