1. 程式人生 > >高併發詳解

高併發詳解

1.高併發:是一種系統執行過程中遇到的一種“短時間內遇到大量操作請求”的情況,主要發生在web系統集中大量訪問或者socket埠集中性收到大量請求(例如:12306的搶票情況;天貓雙十一活動)。該情況的發生會導致系統在這段時間內執行大量操作,例如對資源的請求,資料庫的操作等。如果高併發處理不好,不僅僅降低了使用者的體驗度(請求響應時間過長),同時可能導致系統宕機,嚴重的甚至導致OOM異常,系統停止工作等。如果要想系統能夠適應高併發狀態,則需要從各個方面進行系統優化,包括,硬體、網路、系統架構、開發語言的選取、資料結構的運用、演算法優化、資料庫優化、多執行緒設計……

2.實現高併發需要考慮:
                系統的架構設計

,如何在架構層面減少不必要的處理(網路請求,資料庫操作等)
                網路拓撲優化減少網路請求時間、如何設計拓撲結構,分散式如何實現?
                系統程式碼級別的程式碼優化,使用什麼設計模式來進行工作?哪些類需要使用單例,哪些需要儘量減少new操作?
                提高程式碼層面的執行效率、如何選取合適的資料結構進行資料存取
?如何設計合適的演算法
                任務執行方式級別的同異步操作,在哪裡使用同步,哪裡使用非同步?
                JVM調優,是以server模式還是以clien模式執行,如何設定Heap、Stack、Eden的大小,如何選擇GC策略,控制Full GC的頻率?
                資料庫優化
減少查詢修改時間。資料庫的選取資料庫引擎的選取資料庫表結構的設計資料庫索引觸發器等設計?是否使用讀寫分離?還是需要考慮使用資料倉庫
                快取資料庫的使用,如何選擇快取資料庫?是Redis還是Memcache? 如何設計快取機制?
                資料通訊問題如何選擇通訊方式?是使用TCP還是UDP,是使用長連線還是短連線?NIO還是BIO?netty、mina還是原生socket?
                作業系統選取,是使用winserver還是Linux?或者Unix?
                硬體配置?是8G記憶體還是32G,網絡卡10G還是1G?
                ……

以上的這些問題在高併發中都是必須要深入考慮的,就像木桶原理一樣,只要其中的某一方面沒有考慮到,都會造成系統瓶頸,影響整個系統的執行。而高併發問題不僅僅涉及面之廣,同時又要求有足夠的深度!!!