服務器對一個應用來說是至關重要的,可以管理整個系統的資源和為用戶提供各種服務,幫助用戶來實現各種功能。比如服務器可以用來存儲數據、共享資源、搭建網頁服務等。服務器的選擇也應當根據自己的應用大小來選擇,如果一味為了省錢,而選擇一臺容易出問題的服務器,那就得不償失了。(關于如何選擇服務器的問題,具體查看《你需要多大的服務器支持你的應用》)
很多時候,你當時選擇了一個適合你應用的服務器,可是隨著企業的發展,系統注冊會員的增加,同時訪問量也越來越多,服務器也很難支撐應用的正常運行,那這就需要考慮服務器的大并發問題。
我們公司做過一個APP軟件開發項目,在上個月的時候,突然出現訪問速度很慢,甚至有些訪問不了的情況,我們的技術人員通過對訪問日志的查看和分析,分析中,發現注冊會員增加了很多,在這個時間段向服務器發送了大量請求,占用了服務器資源,所以就會出現訪問速度很慢。
我們公司的技術人員經過商討,制定出方案,通過提高服務器的并發量來保證游戲的正常運行。下面就看看我們公司是怎么處理服務器的大并發問題的。
01
數據庫層面
隨著一個應用的業務不斷擴展,數據不斷增加,數據庫的壓力也會越來越大,這就需要對數據庫進行優化。
首先,對數據庫進行讀寫分離。讀寫分離簡單的說是把對數據庫讀和寫的操作分開對應不同的數據庫服務器,這樣能有效地減輕數據庫壓力。主數據庫提供寫操作,從數據庫提供讀操作當,主數據庫進行寫操作時,數據要同步到從的數據庫,這樣才能有效保證數據庫完整性。
▲對數據庫進行讀寫分離
然后,數據庫的分區分表。分表是將一個大表按照一定的規則分解成多張具有獨立存儲空間的實體表。分區是將數據分段劃分在多個位置存放,可以是同一塊磁盤也可以在不同的機器。分區后,表面上還是一張表,但數據散列到多個位置了。對數據庫進行分區分表在對一個表維護時而不影響其他表,并且在查詢時,還能夠提高檢索速度。這樣在高并發環境下,數據庫仍有一個很好的表現。
02
程序設計層面
首先,根據實際情況制定緩存機制。在登陸方面,可以指定緩存機制,因為登陸的信息一般來說更新情況是比較少的,所以可以把這些數據緩存在內容中。比如這個APP項目,因為每天登陸次數多,活躍度很高,但這些登陸的用戶名及密碼一般是不會改變的,所以我們只需要調用緩存中的登陸信息進行登陸,同時我們也會保證登錄信息更新與緩存同步。
然后,進行并發程序設計。并發程序設計以模塊化設計為中心,將待開發的軟件系統劃分為若干個相互獨立的模塊,由于模塊相互獨立,因此在設計其中一個模塊時,不會受到其它模塊的牽連,因而可將原來較為復雜的問題化簡為一系列簡單模塊的設計。模塊的獨立性還有利于擴充已有的系統和建立新系統。
03
服務器層面
首先,提高服務器的硬件配置。先找出瓶頸在哪,是CPU不夠強力,還是內存容量不夠,還是硬盤轉速太慢,針對這些不夠好的配置,然后換一個性能更好的服務器,或者增加服務器的數量來支撐高并發的訪問量。
然后,把應用和數據分離。把應用程序、文件、數據庫等存放在不同的服務器。每種類型的服務器對配置的要求是不同的。應用服務器是指通過各種協議把商業邏輯曝露給客戶端的程序,主要側重在業務邏輯,需要更強大的處理器;文件服務器是用來提供網絡用戶訪問文件、目錄的并發控制和安全保密措施的局域網服務器,因此需要更大的磁盤空間;數據庫服務器主要為客戶應用程序提供數據服務,對磁盤讀寫操作很多,所以對磁盤和內存要求較高。
▲把應用和數據分開
當業務發展的再多,或者同一時間對服務器請求的并發量再多,就要對應用服務器再進行分布式架構,以此來達到要求。
最后,對服務器進行負載均衡。負載均衡是一種動態均衡技術,通過一些工具實時地分析數據包,掌握網絡中的數據流量狀況,把任務合理均衡地分配出去。負載均衡能夠擴展網絡設備和服務器的帶寬、增加吞吐量、加強網絡數據處理能力、提高網絡的靈活性和可用性。當某一時間有大量用戶訪問的時候,用戶與網站之間的鏈路被突如其來的流量擁塞,就需要使用負載均衡技術,這樣可以合理分擔系統負載、提高系統可靠性、支持網站內容的虛擬化。

▲負載均衡調度服務器
處理服務器大并發的問題,最重要的還是一開始就考慮好自己業務的現有情況以及未來的發展,對未來業務有一個準確的預估,在開發項目時候就做好大并發的規劃,這樣將會省掉很多不必要的成本。如果剛開始沒有進行大并發規劃,等應用出現問題時再做解決,不但會影響自己業務的發展,還會給自己帶來很多麻煩,甚至需要重新開發項目。
本篇文章為原創內容,未經允許,謝絕轉載

