1.硬件升級
硬件問題對性能的影響不容忽視。
舉一個例子:一個DB集群經(jīng)常有慢SQL報警,業(yè)務(wù)排查下來發(fā)現(xiàn)SQL都很簡單,該做的索引優(yōu)化也都做了。后來DBA同學(xué)幫忙定位到問題是硬件過舊導(dǎo)致,將機械硬盤升級成固態(tài)硬盤之后報警立馬消失了,效果立竿見影!
2.緩存化
緩存可以稱的上是性能優(yōu)化的利器,使用緩存時需要考慮緩存命中率、緩存更新、數(shù)據(jù)一致性、緩存穿透及雪崩、Value過大等問題,可以通過mutiGet將多次請求合并一次、異步訪問等方式來提升緩存讀取的性能。
3.產(chǎn)品邏輯優(yōu)化
業(yè)務(wù)邏輯優(yōu)化經(jīng)常會容易被忽略,但效果卻往往比數(shù)據(jù)庫調(diào)優(yōu)、JVM調(diào)優(yōu)之類的來的更明顯。
舉一個例子,12306春運搶火車票的場景,由于訪問的人多,用戶點擊“查票”之后系統(tǒng)會非???,進度條非常慢,作為用戶,我們會習(xí)慣性的再去點“查票”,可能會連續(xù)點個好幾次。假設(shè)平均一個用戶點5次,則后端系統(tǒng)負載就增加了5倍!而其中80%的請求是重復(fù)請求。這個時候我們可以通過產(chǎn)品邏輯的方式來優(yōu)化,比如,在用戶點擊查詢之后將“按鈕置灰”,或者通過JS控制xx秒只能只能提交一次請求等,有效的攔截了80%的無效流量。
4.服務(wù)化
做服務(wù)化最基礎(chǔ)的是按業(yè)務(wù)做服務(wù)拆分,避免跨業(yè)務(wù)間的互相影響,數(shù)據(jù)和服務(wù)同時拆分。同一個業(yè)務(wù)內(nèi)部我們還按計算密集型/IO密集型的服務(wù)拆分、C端/B端服務(wù)拆分、核心/非核心服務(wù)拆分、高頻服務(wù)單獨部署等原則做拆分。
5.異步化
異步化可以利用線程池、消息隊列等方式實現(xiàn)。
使用線程池的時候一定要注意核心參數(shù)的設(shè)置,可以通過監(jiān)控工具去觀測實際創(chuàng)建、活躍、空閑的線程數(shù),結(jié)合CPU、內(nèi)存的使用率情況來做線程池調(diào)優(yōu)。
另一種是通過NIO實現(xiàn)異步化,一切網(wǎng)絡(luò)IO皆可異步:RPC框架、Servlet 3.0提供的異步技術(shù)、Apache HttpAsyncClient、緩存異步接口等等。
6.搜索引擎
復(fù)雜查詢以及一些聚合計算不適合在數(shù)據(jù)庫中做,可以利用搜索引擎來實現(xiàn),另外搜索引擎還可以幫我們很好的解決跨庫、跨數(shù)據(jù)源檢索的場景。