系統拆分,將一個系統拆分為多個子系統,用dubbo來搞。然后每個系統連一個數據庫,這樣本來就一個庫,現在多個數據庫,不也可以抗高並發么。
緩存,必須得用緩存。大部分的高並發場景,都是讀多寫少,那你完全可以在數據庫和緩存里都寫一份,然后讀的時候大量走緩存不就得了。畢竟人家redis輕輕松松單機幾萬的並發啊。沒問題的。所以你可以考慮考慮你的項目里,那些承載主要請求的讀場景,怎么用緩存來抗高並發。
MQ,必須得用MQ。可能你還是會出現高並發寫的場景,比如說一個業務操作里要頻繁搞數據庫幾十次,增刪改增刪改。那高並發絕對搞掛你的系統,你要是用redis來承載寫那肯定不行,人家是緩存,數據隨時就被LRU了,數據格式還無比簡單,沒有事務支持。所以該用mysql還得用mysql啊。那你咋辦?用MQ吧,大量的寫請求灌入MQ里,排隊慢慢玩兒,后邊系統消費后慢慢寫,控制在mysql承載范圍之內。所以你得考慮考慮你的項目里,那些承載復雜寫業務邏輯的場景里,如何用MQ來異步寫,提升並發性。MQ單機抗幾萬並發也是ok的。
分庫分表,可能到了最后數據庫層面還是免不了抗高並發的要求,好吧,那么就將一個數據庫拆分為多個庫,多個庫來抗更高的並發;然后將一個表拆分為多個表,每個表的數據量保持少一點,提高sql跑的性能。
讀寫分離,這個就是說大部分時候數據庫可能也是讀多寫少,沒必要所有請求都集中在一個庫上吧,可以搞個主從架構,主庫寫入,從庫讀取,搞一個讀寫分離。讀流量太多的時候,還可以加更多的從庫。
Elasticsearch,可以考慮用es。es是分布式的,可以隨便擴容,分布式天然就可以支撐高並發,因為動不動就可以擴容加機器來抗更高的並發。那么一些比較簡單的查詢、統計類的操作,可以考慮用es來承載,還有一些全文搜索類的操作,也可以考慮用es來承載。
轉自:中華石杉Java工程師面試突擊