1.建立階段:程序初始要解決的問題:有還是后沒有的問題,所以在該階段決策者關心更多的是解決業務邏輯,盡快上線的問題
2.效率優化階段:當程序運行一段時間,在效率和並發上出現了一些問題,那么這是后就進入了程序優化的第一個階段:程序效率優化,數據庫優化,SQL調優等
3.並發優化階段,這里分為兩種情況
第一種,實時性要求非常高,在這種情況下就不能采用隊列的方式來解決問題,可以采用緩存+數據庫優化的方式,再不行的話就可以考慮增加硬件支持,如帶寬,web的負載均衡,數據庫的讀寫分開,以及讀寫數據庫的負載均衡,當然為了保證緩存服務器的可用性,可以對緩存也采用讀寫分開的主從方式進行架構
第二種,對實時性要求不那么高的情況:這種情況可以采用隊列的方式,變同步為異步處理的方式來解決問題
隊列服務器為了保證可用性,也可以采用主從方式,且其中有一台服務器要進行永久化存儲隊列
在隊列處理上也分為幾種方式,首先是隊列對順序要求特別嚴格,如排隊程序對於這樣的隊列處理,只好采用死循環的方式來按照順序進行處理
對於排隊要求不那么嚴格的情況可以采用多線程的方式進行處理,當然多線程也會對數據庫造成一定的壓力,但是多線程畢竟是可控的,我們可以根據系統資源的使用情況及時的調整線程到最優化狀態
第三種,實時性要求不那么高,且對處理的數量有一定要求,如秒殺,因為秒殺的庫存一般是有限的所以對秒殺一般可以采用隊列限流的方式來進行處理
隊列限流,即設定一個隊列的最大長度的閾值,一單到達或超過這個閾值,那么程序就暫時不允許請求的消息進入隊列,頁面表現上可以采用引流的方式進行處理
第四種,第二種情況處理完畢后,依然不能滿足用戶的需求,那么在這種情況下除了在隊列上采用更加高效的隊列進行處理之外,我們就只能加大硬件方面的支持了
4.硬件優化階段:
這個解決是在上面的優化達到極致之后采用的手段,硬件優化要根據軟件處理中所存在的瓶頸進行針對性處理,需要考慮的方面如下:
首先是帶寬,在帶寬增加之前要首先把頁面以及前端相關的優化進行到極致,如:html代碼優化,css代碼優化,js代碼優化,http請求次數優化,長輪詢優化等
其次是web服務器,在web服務器上首先考慮的就是在一個負載均衡服務器下准備幾台web服務器,幾台幾台web服務器來共同應對高並發的壓力,如果出現問題可以隨時遷入更多的web服務器來應對高並發對web服務器的壓力
再次是隊列服務器,隊列服務器為了解決單點的高可用問題,可以采用主從方式進行配置,如果一旦主服務器出現問題,隨時可以有一台從服務器可以調整為主服務器來繼續提供服務器,這樣對於用戶來說就是一個無感知的切換,且給了充裕的時間去處理出現問題的隊列服務器
除了隊列服務器,剩下的就是緩存服務器,緩存服務器的架構方式與隊列服務器類似,主要是提高可用性即可
最后是數據庫服務器,為了應對數據庫服務器的壓力,可以使用讀寫分開,且可以在讀服務器的層面加入負載均衡的處理,來均分讀數據對數據庫服務器的壓力,且主從可以在出現問題是自動切換,提高了數據庫的可用性
