什麼是高併發,高併發的解決方案
本人原創,轉載需說明文章出處
程式猿是門檻是越來越低,誰都可以寫程式碼,但是質量越來越堪憂,根本不會優化,專案一啟動,動不動一週就記憶體洩漏,連正常的訪問都無法滿足,談何高併發和壓力測試呢,說到併發,為什麼要學,併發程式設計是java進階必備技術知識點,如果你不懂併發程式設計的話,不能算是個java工程師,只能算碼畜。
https://blog.csdn.net/persistencegoing/article/details/84376427
併發程式設計內容繁多,我們該如何學習?併發就是在作業系統中,指一個時間段中有幾個程式都處於已啟動執行到執行完畢,這幾個程式都是在同一個處理機上執行的,任意一個時刻上只有一個程式在處理機上執行。我們通常所言的併發並不是我們自定義的,在網際網路時代,我們講的併發、高併發,通常是指併發訪問。也就是在某個時間點,有多少個訪問者同時到來,如果一個系統每天都有千萬以上的訪問量,就是一個高併發的系統。那怎麼解決高併發帶來的效能和體驗問題呢?
1、優化程式碼,優化業務邏輯和優化SQL
https://blog.csdn.net/persistencegoing/article/details/84529613
https://blog.csdn.net/persistencegoing/article/details/84646766
2、叢集與分散式
叢集就是每臺電腦上的伺服器都具有相同的功能,處理請求時呼叫那臺伺服器都可以,主要為了分流(通俗的講就是多臺tomcat放相同的程式碼)。分散式開發是將不同的業務放到不同的伺服器中,處理請求需要多臺伺服器的幫助,這樣大大提高了一個請求的處理速度,並且分散式和叢集可以同時使用。
使用叢集有兩個方法:一是在靜態資源叢集。二是應用程式叢集。靜態資源叢集方法比較簡單華。使用程式叢集在處理過程中最重要的問題就是Session 同步問題。使用Session 同步有兩種處理方法:一是在Session 發生變化後自動同步到其他伺服器上,第二種就是使用程式管理Session。並且所有使用叢集的伺服器都使用同一個Session,使用預設的Tomcat也是第一種方式,簡單配置就可以實現了,使用第二種方式就是專門的伺服器安裝Mencached等高效的快取程式來管理session。
3、什麼是資料庫快取,為什麼是要使用快取?
大多資料庫一些常見的關係型資料庫的資料都儲存在電腦的磁碟中,使用在高併發的情況下,業務應用對資料庫產生的增加刪除修改查詢的操作會造成和查詢的壓力等,也會使資料庫和伺服器造成巨大的壓力,為了解決資料庫以上問題,使用快取資料是不可缺少的。
使用快取資料就是為了資料庫伺服器端甚至不訪問資料庫伺服器進行資料的增加刪除修改查詢操作,在高併發下,也能最大程度的降低對資料庫伺服器的訪問壓力也同時解決資料庫伺服器的壓力。
4、提高應用資料響應速度
能使用快取的都使用快取,比如使用者,資訊等快取,多使用點記憶體來做快取,這樣就可以大量的減少與資料庫的互動,大大提高了資料庫的效能。
1.資料庫SQL語句優化和表結構優化等。SQL語句優化,語法優化和處理邏輯優化。
2.使用常用的框架Redis等。最關鍵的是什麼時候建立快取,以及什麼時候失效機制。
3.快取,使用程式直接儲存到記憶體中。主要使用Map集合等。
4.分散式資料庫將不同的表存放到不同的資料庫中,然後再放到不同的伺服器中。事務處理,多表查詢等。
5.批量讀取和延遲修改,高併發情況可以將多個查詢請求合併到一個。高併發且頻繁修改的可以暫存快取中。
6.NoSql和Hadoop,NoSql,not only SQL,比較靈活高效。Hadoop,將一個表中的資料分層多塊,儲存到多個節點。每一塊資料都有多個節點儲存。叢集可以並行處理相同的資料,還可以保證資料的完整性。
7.讀寫分離,資料庫伺服器配置多個,配置主從資料庫。寫用主資料庫,讀用從資料庫。
https://blog.csdn.net/persistencegoing/article/details/84827160
希望大家關注我一波,防止以後迷路,有需要的可以加群討論互相學習java ,學習路線探討,經驗分享與java求職 群號:721515304