高訪問量高併發問題的一部分解決方案

左耳聽風發表於2018-04-30

一:架構方面
1,負載均衡叢集:使用負載分發客戶端的訪問連線,讓每一臺伺服器合理利用
2,分散式,當叢集部署都出現訪問卡頓的情況,就需要採用分散式了,例一個商城,可以分為使用者服務,產品服務,訂單服務,後臺管理服務,資料分析等,每個服務都可以單獨執行,每個服務直接通過內部機制進行通訊

二:資料庫方面
1,sql優化:可以對資料庫的查詢語句進行優化,儘量不使用hibernate這些orm框架自帶的做法,這樣很耗時,複雜的查詢儘量使用原生sql來寫,一般還要對你的sql進行執行計劃分析
2,索引:在訪問頻率極高的欄位加入索引,注意索引對null是無效的,加入索引提高了查詢速度,但是相對插入消耗的時間會增多,索引也是空間換時間的做法,加入索引越多,你的表就會越龐大,但是相對於現如今空間如白菜的年代,這點不值一提
3,redis:對於併發比較高的資料可採用redis儲存,因為redis的資料存放於記憶體存取速度非常快
4,分割槽:對於資料非常龐大的表可採用資料庫分割槽,可提高查詢速度
5,當系統資料非常龐大的時候可以分多個資料庫,比如系統模組存為一個資料庫,業務模組存為另外一個資料庫,這樣就避免應用全面當機
6,關係形資料庫在資料量達到一定規模查詢效果較差,像一些操作紀錄等資料可以用redis,mongodb等nosql非關係形資料庫來儲存,查詢效能比關係形資料庫好很多,但是比如金錢,訂單,使用者資訊等“貴重”資訊只能用關係形資料庫來儲存。關係形資料庫效能提高常的方法一般包括建立索引,檢視等。有些資料庫如mysql官方還提供代理工具實現水平拆分,垂直拆分等,Mysql proxy代理工具可以實現資料庫的讀寫分離,都能一定程式提高關聯式資料庫的效能

三:程式碼方面
1,快取:一些不常變動的資料可使用快取技術,如業務需求也可對快取進行移除變更操作。採用空間換時間,提高使用者問效率,同時也可減少資料庫訪問次數。一般快取設定在1-5分鐘即可,不要小瞧這幾分鐘,一般高峰期就是那麼幾分鐘啦~~
2,如果遇到併發時,某程式碼需要同步執行的話需要用到同步機制Synchronized,Synchronized採用了“以時間換空間”的方式,僅提供一份變數讓不同執行緒排隊訪問
3,ExecutorService執行緒池的使用,如遇到業務邏輯處理時間比較長的,可以使用執行緒去處理

四:其他
1,報表統計:你的系統如果需要做統計那麼建議使用定時器,每10分鐘進行一次統計,報表統計對於一個系統是必須的,因為資料要麼是緩慢增加緩慢減少,如果遇到資料跳水,那麼對於排查系統問題很有幫助哦!
2,公共模組剝離:對於一些系統模組可以抽離出來,不跟業務系統混在一起,比如報表統計,圖片服務,簡訊等,減少業務伺服器的壓力

技術交流關注公眾號


相關文章