首頁>Club>
11
回覆列表
  • 1 # manasiqi8

    1.提高伺服器效能,升級伺服器配置

    2.保障效能的前提下,提高頻寬,提高吞吐能力

    3.最佳化伺服器配置,小幅度提高伺服器處理能力

    4.將伺服器進行分割,比如資料庫不建在同一臺機器上

  • 2 # 網路圈

    任何一臺伺服器,都是有效能上限的。伺服器處理請求需要消耗伺服器端的資源,比如說:CPU、記憶體、網路連線數、磁碟I/O等,由於伺服器端的資源是有限的,所以它能同時處理的請求也是有限的。

    不同運維人員管理的伺服器效能上也是會有差異的,我們可以透過一系列的技術手段來提升伺服器的併發處理能力。

    伺服器併發能力指什麼?

    伺服器在一段時間內能處理的請求數越多,就代表此伺服器效能越好,我們就說此伺服器併發能力越高。

    如何提升伺服器併發能力?

    伺服器併發能力的提升不光光要從服務端最佳化,客戶端的最佳化也是不可缺少的。這裡列舉了一些方案供大家參考:

    1、伺服器端最佳化

    硬體升級:不同業務型別對伺服器硬體要求不同,比如資料庫伺服器對硬碟和CPU要求較高,NoSQL伺服器對記憶體要求高;

    頻寬升級:伺服器頻寬也會限制網路請求連線數,頻寬小請求也會越慢;

    請求分流:透過負載均衡、叢集、分散式架構將請求分攤到多臺伺服器上,減少單一伺服器的負載壓力;

    應用最佳化:程式碼裡避免死迴圈、對於網路請求要控制好超時時間;能非同步處理的邏輯則非同步化處理;

    資料庫最佳化:SQL最佳化以提升SQL執行效率;資料庫讀寫分離避免讀、寫鎖帶來的效能開銷;避免不必要的鎖;

    合理的快取:藉助NoSQL加快資料查詢速度;

    動靜分離:動態請求與靜態請求分離。

    2、客戶端最佳化

    減少不必要的請求:合理利用好客戶端快取及請求合併,減少不必要的請求;

    CDN快取減少回源頻率:藉助CDN來快取頁面,減少回源頻率,而CDN本身就是分散式的。

  • 3 # 會點程式碼的大叔

    既然題目中問的是提高【伺服器】併發處理能力,那麼先說說關於提高單機伺服器效能的方法;一臺伺服器在單位時間裡,能夠處理的請求越多,就說明伺服器併發處理能力越強。

    記憶體:減少記憶體的分配和釋放,這個本質上只為了記憶體分配和資料複製的時間;比如程式在啟動的時候,就申請一塊足夠大的記憶體,不需要再次分配;另外可以考慮記憶體共享。

    CPU:使用多執行緒,提高CPU的併發度;但是執行緒數不可以無限制地增加,因為程序切換也是需要花費時間的;減少使用不必要的鎖,因為當一個資源被鎖住的時候,其餘的程序會等待鎖的釋放;改進I/O模型,使I/O和CPU計算儘量重疊進行,減少CPU空閒和排程的時間。

    網路:根據應用的特點,合理地選擇使用長連結還是短連結;因為建立連線是很耗時的,但是如果要使用長連結,依然要考慮超時的問題,因為如果連線時間過長並且沒有使用,需要維持空閒連線,影響伺服器效能。

    提高硬體資源:說白了,就是花更多的錢,買更好的裝置,比如頻寬、更大的記憶體、更多的CPU、SSD等等。

    還有很多手段,可以提高整個專案的併發處理能力:

    負載均衡、叢集:一臺伺服器再怎麼最佳化,也不如十臺伺服器同時工作,透過負載均衡,把請求分發到多臺伺服器上進行處理;另外一個好處,當一臺伺服器發生故障的時候,並不會影響整個專案的執行;

    快取:其目的就是減少伺服器的計算,把資料直接返回給使用者;比如CDN、本地快取、分散式快取等等;

    分散式:如果說叢集是把相同的專案部署在多臺伺服器上,那麼分散式相當於把一個專案拆分成多個專案,每個子專案都可以獨立地叢集化部署;分散式架構意味著可以利用更多的伺服器,能過處理的併發訪問會越大。

    非同步:呼叫方不需要等待被呼叫方處理完成,可以先做其它的事情,所有的事情可以併發處理;非同步可以透過訊息佇列來實現非同步;

    冗餘、彈性擴縮容:根據訪問量,部署更多一些的伺服器;當有突發流量的時候,彈性擴容機制可以保證快速地增加機器的數量,保證系統的穩定執行;

  • 4 # kid7157887

    1.評估你的業務複雜度,預估使用者併發量

    2.基於你的評估,拆分模組,可以按照CQRS模型拆分,比如拆分出讀和寫,隔離核心介面。

    3.考慮你的業務模型中,哪些可以非同步化,可以使用多執行緒(執行緒池)或者mq形式分發給子模組或者子系統進行處理

    4.利用io多路複用模型,並調整你伺服器的檔案描述符、tcp連結等引數達到最佳

    5.讀多用快取,構建多級快取,應用內快取作為一級快取,redis作為二級快取。同時避免出現慢sql,大事務。

    6.寫多嘗試mq非同步化,消峰填谷。選擇合適的資料儲存方式(資料庫的儲存引擎,檔案的分散式儲存),io是最大的瓶頸,要進行最佳化。同時減少鎖的競爭,可使用樂觀鎖形式。

    7.對你的程式語言進行最佳化,比如java的jvm gc也會影響效能的。

    8.可嘗試跨語言程式設計,或者直接使用擅長高併發的語言,golang erlang rust等

    9.根據你的評估選擇合適的硬體資源,效能不是硬體砸出來的,要做資源評估,對介面進行壓測。可以使用cdn,資料庫,快取等使用物理機,應用使用容器技術。確定你的介面是io密集還是cpu密集,io密集區分硬碟io還是網路io,分別採用ssd或高速網路。對於cpu密集要提高cpu和記憶體。對於資料庫和快取,cpu,記憶體和網路都要求資源高,網路要保證萬兆光模組。

    10.對於你的資料庫,快取等與應用的之間的網路建議距離越近越好,甚至是同一機房。

    無論是單體應用,還是構建分散式,微服務,無論採用何種架構模式,對於效能,都要隨時關注,不斷最佳化,透過壓測、觀察生產環境,確保效能穩定。同時,追求效能是好,但是不要因為追求而追求,除了效能,還有可靠性和系統的穩定性。引入一種提高效能的手段,也增加一點系統複雜度,意味著可靠性和穩定性要下降一點,我們更應該為這些下降的穩定性和可靠性做保證。

  • 5 # 悉尼程式猿

    如果是指硬體處理併發能力的話: 選擇更多核心的CPU,更大的CPU快取,選擇更大的記憶體,選擇更快的外設等等。

    如果是指軟體處理能力的話,這就涉及到軟體架構設計了。一般來說,多執行緒多程序能夠提供並行處理能力,但是不是越多越好。一般來說程序/執行緒數應該等於CPU核心數,這樣儘量發揮硬體優勢。而且儘量避免使用鎖導致使執行緒們互相等待,這個非常重要。

  • 6 # 冰魄秋雨

    什麼是伺服器併發處理能力

    一臺伺服器在單位時間裡能處理的請求越多,伺服器的能力越高,也就是伺服器併發處理能力越強。

    伺服器的本質工作就是,爭取以最快的速度將核心緩衝區中的使用者請求資料一個不剩地都拿出來,然後儘快處理,再將響應資料放到一塊又能夠與傳送資料的緩衝區中,接著處理下一撥請求。

    而伺服器併發處理能力,可以透過吞吐率來觀察,吞吐率,單位時間裡伺服器處理的最大請求數,單位req/s。可以利用Jmeter工具進行測試伺服器伺服器併發處理能力。

    例如伺服器的效能,web程式的併發能力,程式碼,資料庫等等,這裡以一個Web程式為例,說明一下提高伺服器處理併發能力的

    服務效能提高

    伺服器之所以可以同時處理多個請求,在於作業系統透過多執行流體系設計使得多個任務可以輪流使用系統資源,這些資源包括CPU,記憶體以及I/O. 這裡的I/O主要指磁碟I/O, 和網路I/O。

    伺服器的效能也可能是效能的瓶頸,這個時候,就需要更好的伺服器。比如單核CPU提高到多核,記憶體也需要增加。

    web程式的併發能力

    web程式設計師併發能力,web在相同時間內處理更多的請求,多執行緒處理最為關鍵。比如SpringBoot預設使用Tomcat,而tomcat的預設執行緒為200,即在同一時刻,只能處理200個請求,而其他需要排隊等待,在伺服器效能足夠好的情況,就需要將Tomcat的處理執行緒增加到合適的大小。

    執行緒的增加,需要經過效能測試,才能知道多少合適,執行緒的切換也是需要資源和時間的,因此不能無限擴大。

    多個web同時處理。透過對web的叢集,讓web處理的併發增加。如圖:

    程式碼

    1. 最佳化程式碼處理的速度,一空間換時間,對於執行的慢的程式,可以透過消耗記憶體(即構造新的資料結構)來進行最佳化。

    2. 利用池化技術複用,池化技術能夠減少資源物件的建立次數,提高程式的效能,特別是在高併發下這種提高更加明顯。簡單點來說,就是提前儲存大量的資源,以備不時之需。執行緒的建立是非常耗時和消耗資源的,透過池化池化技術解決這一點。

    3. 減少使用不必要的鎖。伺服器處理大量併發請求時,多個請求處理任務時存在一些資源搶佔競爭,這時一般採用“鎖”機制來控制資源的佔用,當一個任務佔用資源時,我們鎖住資源,這時其它任務都在等待鎖的釋放,這個現象稱為鎖競爭。

    透過鎖競爭的本質,我們要意識到儘量減少併發請求對於共享資源的競爭。比如在允許情況下關閉伺服器訪問日誌,這可以大大減少在鎖等待時的延遲時間。要最大程度減少無辜的等待時間。

    資料庫

    資料庫往往成為程式的瓶頸,程式多數都需要查詢資料庫,而資料庫的查詢插入都是有一定性質,特別是在資料量特別大的時候。

    1. SQL最佳化以提升SQL執行效率;最佳化那些查詢慢的語句,並透過建立索引等手段來最佳化。

    2. 資料庫讀寫分離避免讀、寫鎖帶來的效能開銷;Mysql實現主動,主插入操作,而查詢使用從資料庫。

  • 7 # 數通暢聯

    所謂伺服器併發處理能力就是考驗同一時間段,使用者請求的數量,請求的數量越多,代表伺服器的併發處理能力越強。如何提高伺服器的併發處理能力,從以下四個方面進行簡單總結:

    資料庫:提高sql的執行效率,可以透過建立索引等方式來最佳化執行緩慢的語句;同時資料庫可以採用讀寫分離的模式。

    分散式:分散式相當於把一個系統拆分成多個子系統,每個子系統之間可以獨立的進行叢集化部署,相當於使用更多的伺服器提高併發處理能力。

    非同步:從實際的業務角度出發,考慮哪些需求可以非同步化處理,即呼叫方不需要等到被呼叫方處理完成,就可以進行其他操作,同時處理,非同步可以透過訊息佇列來實現。

    快取:快取實際上就是減少了伺服器的運算處理過程,把資料直接呈現在前端進行展現,以此提高伺服器的併發處理能力。

  • 8 # 不願透漏姓名的李建國

    這個問題太寬泛了

    你的伺服器是跑什麼業務的?網站 資料庫 還是計算服務?

    問這個問題 如果不是故意挖坑 需要細化你的業務場景

    如果不是搞技術的

    建議直接買按量付費的雲伺服器

    費用上百萬之後再考慮這個問題吧

  • 中秋節和大豐收的關聯?
  • 秋彤桃結桃枝沒有葉是什麼原因?