後記想象一下以下幾個場景:
我們在獲取乙個使用者詳情介面時,刷了無數次,瀏覽器就在那轉圈,硬是刷不出來,開啟控制台,顯示介面超時以上只是列出了部分小的場景,在紛繁複雜的網際網路業務領域,存在介面效能問題的場景更是不勝列舉。問題是有了,那麼我們為什麼要做介面效能的優化呢?假如我們服務a有個批量發營銷簡訊的任務,服務a用批量的userid調服務b的使用者服務以獲取使用者的手機號,從而完成簡訊傳送功能。奈何服務b的通過userid介面獲取使用者詳情的介面平均響應500ms以上,且介面請求量增大時,介面耗時明顯上公升,最後導致服務a的部分呼叫超時,簡訊傳送失敗
c端使用者開啟某些頁面時,譬如使用者空間或者使用者詳情頁時,發現資料載入很慢,或者載入不出,導致使用者體驗大幅降低
etc…
使用者體驗會得到顯著提公升
服務更穩定,效能更高,單位時間可處理的請求提公升,響應指標有質的提公升
有效防止了服務雪崩問題
很顯然,當我們討論要做介面效能優化的時候,必然是此介面已經出現了一丟丟小毛病,確有優化的必要。譬如可能是使用者感覺購物車有點卡,頁面載入有點慢,又或者通過監控得知某些介面響應超出平均值太多…當有這些類似跡象發生時,我們就要開始著手處理,做效能優化了。從個人所經歷的職業生涯來看,主要分為以下幾個步驟:
確定是哪個介面存在效能問題
確定這個介面的內部邏輯是怎樣的,做了哪些事情
分析介面存在效能問題的根本原因
尋找確立優化方案
回歸驗證方案效果
其中第1、2步相對比較容易處理,而核心在於第3、4步,第5步是用於驗證效果。下面本文重點會**第3、4步如何進行處理
為什麼說這個很重要呢,因為這個直接影響到後面選擇何種優化方案,會消耗多少成本。當然,介面存在效能問題的具體案例千千萬,筆者就從遇到過的著手,從最常見、最簡單的開始說明
業務介面存在for迴圈呼叫
舉例來看,這種場景就是a介面存在效能瓶頸,經分析發現,a介面實現裡會同步for迴圈呼叫某個正常的介面b(or 方法、耗時處理邏輯),以模擬**來看,典型的如同下面這種:
//效能瓶頸處
list
list = ***
for(t t: list)
上述**是我們在寫業務**是極有可能出現的,假定b.biz這塊每次同步呼叫耗時均值為50ms,如果這個list.size()>10,那這個介面經過這個for迴圈後,耗時將達500ms以上,且size越大,耗時就越高。那麼針對此種呼叫,如何進行優化呢?
針對這種case,優化有多種方案:
業務介面查db慢
這種場景還是很常見的,典型的如以下**:
dosmt()
//典型的查db耗時高
listlist = ***dao.select***(***)
dosmtanother()
很顯然瓶頸在於查庫慢,但是關於這種case,如果細究起來可能得另開一章sql優化來講了。可以稍微提幾點,當發現查db慢時,可以從以下幾個方向著手:
復合場景,存在較多查詢
還有一種典型場景就是某個介面實現很複雜,業務邏輯多,呼叫其他介面或者方法的地方非常多,且介面的上下游鏈路裡存在多個重複查詢的情況(如a介面在調b介面之前查了c,然後調b介面時又查了一遍c)
針對此類場景,可以從以下方法著手:
介面勉強復合要求,但需要更高效能
當我們到達山窮水盡的時候(快取的銀彈暫時不作討論),倘若需要做更進一步的優化,可以著手的點有哪些呢?從個人淺薄的知識來看,我能想到的有如下這些:
seo優化方案怎麼做?seo怎麼做優化?
但要害詞在優化之前應該先進行選擇,這一項作業意義嚴峻。一些短要害詞雖然上手,但越是上手的要害詞流量就越為大公司所把控。中小型企業在優化這些要害詞時會好不容易且難以收到成效。所以關於新 或是一些中小型的企業來說,選擇一些較為簡略優化的要害詞就顯得尤為要害。要害詞優化的難易度可以通過查詢要害詞查詢熱度來...
介面測試怎麼做
通用介面api規範 保持冪等。也即多次呼叫,應該產生一致的結果,例如轉賬1元,因為呼叫失敗或者超時重試的時候,最終結果還應該是轉賬1元,而非呼叫兩次變成轉賬2元。介面的實現應該盡量避免阻塞,可以使用非同步方式提公升效能。介面應該包括能夠區分不同情況的異常,而非丟擲寬泛的exception,不能吞掉異...
站內優化怎麼做
seo已經成熟了,其實我很想知道每天站長都在做些什麼事情 一 url標準化。不能帶有字尾,很多人訪問他首頁的時候.com後面帶了乙個index.html或者index.php。這樣的url都是不規範的,必須做好相應的301設定。分類盡量使用拼音或者英文命名,如 優化就用 wangzhanseo 或 ...