教你如何讓自己的商城扛得住高并發(fā)而不崩潰

一、什么是商城高并發(fā)?
高并發(fā)(High Concurrency)是系統(tǒng)運行過程中遇到的一種“短時間內(nèi)大量操作請求”的情況,主要發(fā)生在web系統(tǒng)中通過大量訪問收到大量請求時(例如12306的搶票情況;雙十一活動)。這種情況的發(fā)生會導致系統(tǒng)在此期間執(zhí)行大量的操作,比如請求資源、數(shù)據(jù)庫操作等。
高并發(fā)也是互聯(lián)網(wǎng)分布式系統(tǒng)架構設計中必須考慮的因素之一,它通常是指,通過設計保證系統(tǒng)能夠同時并行處理很多請求。 高并發(fā)相關常用的一些指標有響應時間(Response Time),吞吐量(Throughput),每秒查詢率QPS(Query Per Second),并發(fā)用戶數(shù)等。
響應時間:系統(tǒng)對請求做出響應的時間。例如系統(tǒng)處理一個HTTP請求需要200ms,這個200ms就是系統(tǒng)的響應時間。
吞吐量:單位時間內(nèi)處理的請求數(shù)量。
QPS:每秒響應請求數(shù)。在互聯(lián)網(wǎng)領域,這個指標和吞吐量區(qū)分的沒有這么明顯。
并發(fā)用戶數(shù):同時承載正常使用系統(tǒng)功能的用戶數(shù)量。例如一個即時通訊系統(tǒng),同時在線量一定程度上代表了系統(tǒng)的并發(fā)用戶數(shù)。
二、CRMEBpro商城系統(tǒng)是如何提高并發(fā)率的呢?
1.分布式緩存:redis、memcached等,結合CDN解決圖片文件的訪問等。
2.消息隊列中間件:activeMQ等。,可以解決大量消息的異步處理能力。
3.應用拆分:將一個項目拆分成多個項目部署,用dubbo解決多個項目之間的通信。
4.數(shù)據(jù)庫垂直拆分和水平拆分(子數(shù)據(jù)庫和子表)等。
5.將數(shù)據(jù)庫的讀寫分開,解決大數(shù)據(jù)的查詢問題。
6.也可以用nosql,比如mongoDB結合mysql。
7.還需要建立大數(shù)據(jù)接入情況下的服務降級和限流機制。
8.采用swoole架構,多線程Reactor+多進程Worker,因為reactor基于epoll,所以每個reactor可以處理無數(shù)個連接請求。
9.增強單機硬件性能(優(yōu)先):例如:增加CPU核數(shù)如32核,升級更好的網(wǎng)卡如萬兆,升級更好的硬盤如SSD,擴充硬盤容量如2T,擴充系統(tǒng)內(nèi)存如128G。
三、高并發(fā)商城的優(yōu)勢和好處
1、速度優(yōu)勢:
多處理器:多處理器上的并發(fā)無疑會讓程序運行的更快。
單處理器:如果是單處理器的機器,那么并發(fā)編程和順序編程相比可能沒有什么變化。但是,如果其中一個任務可能被阻塞,即使是單處理器,使用并發(fā)編程也會帶來很大的好處,這樣當一個任務被阻塞時,其他任務可以繼續(xù)運行。
反應靈敏的用戶界面:單處理器上性能改進的最典型的例子是“事件驅動編程”,例如創(chuàng)建一個帶有按鈕的響應性用戶界面。如果我們不使用并發(fā)編程,那么我們需要在我們編寫的每個代碼段中檢測用戶輸入。如果我們使用并發(fā)編程,我們只需要重啟一個線程來監(jiān)聽用戶輸入。
并發(fā)實現(xiàn):實現(xiàn)并發(fā)最直接的方式是在操作系統(tǒng)層面,使用進程,一個自包含的程序,使用自己的地址空間。操作系統(tǒng)會將進程相互隔離,所以對進程編程相對容易,不需要考慮共享資源的同步問題。但是在Java的并發(fā)編程中,由于線程共享內(nèi)存或IO等相同的資源,所以在Java多線程編程中要考慮共享資源的同步問題。
進程和Java線程之間的選擇:進程的確是一種實現(xiàn)并發(fā)的方式,butunfortunately there are generally quantity and overhead limitations toprocesses that prevent their applicability across the concurrency spectrum.
2、設計上的優(yōu)勢:
一般來說,線程使得你能夠創(chuàng)建更加松耦合的設計。
單處理器:盡管單處理器上面的并發(fā)編程在同一時刻處理器仍然只能做一件事情,但是帶來一個組織上面的重要優(yōu)勢:就是你的設計(design)會極大地簡化。比如仿真。
仿真舉例:如果沒有并發(fā),仿真將變得非常困難。 一般來說仿真涉及到多個交互元素,其中每一個都有“自己的想法”,盡管從程序員的角度來看每一個仿真元素都是被同一個處理器所驅動,但是設計上來看,每一個仿真元素都假裝有自己的處理器以及運行獨立的任務。
總結:
我們使用redis,消息隊列,讀寫分離,swoole架構,集群部署,提高服務器配置等就能提高我們商城的并發(fā)量,支持了高并發(fā),我們就可以開展各種商城活動不再擔心因為用戶量大而導致的服務器癱瘓造成的損失。如果商城不支持高并發(fā),在秒殺等貨送的時候可能將庫存秒殺成負數(shù),服務器內(nèi)存爆滿和癱瘓等問題。CRMEB PRO商城完美解決了這些問題。




