高併發是web開發中常常會遇到的問題,所以,做爲一個web開發者,應該深刻了解什麼是高併發及其高併發解決方案,我作web開發也有好長時間,web
對高併發問題也略知一二,下邊就談談高併發問題,和你們一塊兒學習,有寫的不對的地方或者有遺漏的地方,還請你們批評指正。數據庫
一. 什麼是高併發? 緩存
高併發說的通俗易懂點,就是大量請求訪問服務器,對服務器形成巨大壓力致使數據出錯,服務器宕機等一系列問題。舉個例子:一架飛機最多承載300旅客方可正常起飛,服務器
若是一會兒承載400旅客,超出飛機的最大承載量,會引發飛機沒法正常起飛的問題,高併發就相似於這個。面向用戶的系統常常會遇到高併發問題,好比 淘寶,天貓,京東這些session
電商網站,每一年的6.18以及雙11併發量達到上千萬甚至更高,對服務器形成巨大壓力,但不多聽到消息說某某網站雙11掛掉了,致使一件商品也沒賣出去,爲何?由於他們從硬架構
件,程序,架構,數據庫各個方面作了優化從而提高服務器的最大承受壓力。因此下邊談談如何應對高併發?併發
二. 高併發解決方案負載均衡
面對高併發問題,如何去提高服務器壓力?隨着併發量的增長,咱們須要一步一步的去優化它,這是一個漫長的過程,優化須要從如下幾個方面去入手:數據庫優化,架構優化,運維
程序優化(業務拆分)等方面。分佈式
1. 數據庫優化:數據庫採用讀寫分離,A數據庫用戶讀操做,B數據庫用戶寫入操做,而後將B數據庫數據實時寫入到A數據庫,這樣能夠將原來一個數據庫承擔的壓力分擔到兩個
數據庫上。
2. 架構優化:根據實際狀況能夠適當增長應用服務器節點,應用服務器之間採用集羣,經過nignx負載均衡,將客戶端請求分攤到幾個應用服務器上邊。同時,能夠在應用服務器與
數據庫服務器之間增長緩存服務器,根據實際狀況能夠增長多臺緩存服務器,全部的請求通過負載均衡服務器到達應用服務器後,先去緩存服務器中查找,若是命中,就從緩存中拿數據,
若是未命中,在去數據庫中查數據同時緩存到緩存服務器,下次相同請求過來時就去緩存中取數據,這樣作,能夠減小數據庫壓力,請求都去緩存服務器中拿數據。
注:集羣環境下的web應用服務器須要注意session數據共享問題
3. 程序優化:隨着業務量的增多,咱們須要對業務進行拆分(數據拆分),就是將一個龐大的系統按業務邏輯的不一樣,咱們拆分紅多個子系統,子系統之間經過PRC遠程通訊等方式
相互協做,使系統保持正常運行狀態。按業務將系統拆分紅若干個子系統有利有弊:
a. 響應速度變慢,系統之間經過接口調用,響應速度變慢,但吞吐量大。
b. 代碼的耦合度下降
c. 某一塊邏輯出現問題,不影響整個系統運行
d. 團隊之間的依賴性減小,能夠作到各司其職
e. 分佈式系統部署運維難度大,成本高
注:分佈式系統須要注意事物問題,本地事物將不能知足需求
時間有限,就寫這麼多,寫的不完整,還能夠從不少細節方面去優化, 描述不許確的地方但願你們批評指正。