當(dāng)接口(系統(tǒng))碰到性能問(wèn)題該怎么辦

1.身體檢查

做一次壓力測(cè)試,可以了解系統(tǒng)大致的性能

壓測(cè)建議:

  1. DB:壓測(cè)有寫(xiě)流量要先建影子表
  2. tair:壓測(cè)有寫(xiě)流量繞過(guò)tair寫(xiě)
  3. HSF:壓測(cè)流量繞過(guò)依賴(lài)應(yīng)用有寫(xiě)操作的HSF

2. 病因診斷

當(dāng)問(wèn)題復(fù)現(xiàn)的時(shí)候,就可以對(duì)系統(tǒng)開(kāi)始診斷了,對(duì)于一位醫(yī)生,如何分析身體檢查的結(jié)果數(shù)據(jù)是至關(guān)重要的热芹,這里推薦4個(gè)平臺(tái)

機(jī)器承載能力和系統(tǒng)異常結(jié)果:查看機(jī)器各項(xiàng)性能指標(biāo)情況

系統(tǒng)依賴(lài)和服務(wù)耗時(shí)結(jié)果:查看全鏈路的各個(gè)環(huán)節(jié)服務(wù)的調(diào)用情況

JVM堆內(nèi)存和線(xiàn)程詳情: 查看具體內(nèi)存和線(xiàn)程情況

數(shù)據(jù)庫(kù)和SQL問(wèn)題結(jié)果: 查看數(shù)據(jù)庫(kù)情況,是否存在慢sql

3. 對(duì)癥治療

優(yōu)化:在互聯(lián)網(wǎng)系統(tǒng)中,背景中描述的問(wèn)題可以當(dāng)成一個(gè)典型的秒殺場(chǎng)景來(lái)優(yōu)化解決沟涨,結(jié)合一些文章我將自己的思考整理為橫向優(yōu)化和縱向優(yōu)化,

縱向優(yōu)化

熱點(diǎn)隔離:禁止1%的請(qǐng)求影響99%的請(qǐng)求异吻,關(guān)鍵在于識(shí)別是那個(gè)環(huán)節(jié)是熱點(diǎn)
動(dòng)靜分離:靜態(tài)數(shù)據(jù)和動(dòng)態(tài)數(shù)據(jù)隔離
時(shí)間分片削峰:拉長(zhǎng)峰值裹赴,減輕系統(tǒng)壓力
依賴(lài)降級(jí):對(duì)于耗時(shí)長(zhǎng)的弱依賴(lài)做降級(jí)喜庞,對(duì)業(yè)務(wù)有影響這個(gè)需要加入開(kāi)關(guān)控制

橫向優(yōu)化

物理層:宿主機(jī)、數(shù)據(jù)庫(kù)棋返、緩存等
服務(wù)層:業(yè)務(wù)處理邏輯領(lǐng)域?qū)?br> 應(yīng)用層:客戶(hù)請(qǐng)求延都、頁(yè)面資源等
將橫縱結(jié)合可以實(shí)現(xiàn)多種優(yōu)化方案,這里舉例關(guān)于解決本文遇到的問(wèn)題而使用的優(yōu)化用策略:

物理層:

  1. 對(duì)耗時(shí)較長(zhǎng)的SQL查詢(xún)結(jié)果做緩存睛竣,減少數(shù)據(jù)庫(kù)查詢(xún)次數(shù)晰房,如:對(duì)活動(dòng)頁(yè)面查詢(xún)近半年所有活動(dòng)的結(jié)果放入緩存,緩存方案是本機(jī)緩存過(guò)期時(shí)間30秒射沟,這個(gè)功能對(duì)數(shù)據(jù)一致性會(huì)有30秒延遲殊者,所以需要加入開(kāi)關(guān)控制,日常情況下可以關(guān)閉緩存功能躏惋,在秒殺活動(dòng)時(shí)打開(kāi)緩存開(kāi)關(guān)—熱點(diǎn)隔離
  2. 對(duì)于慢SQL做索引優(yōu)化幽污,避免影響其他sql的查詢(xún),如:查詢(xún)每個(gè)人近半年參加的的活動(dòng)簿姨,對(duì)gmt_creat(活動(dòng)時(shí)間)加入索引距误,避免每次查詢(xún)數(shù)據(jù)庫(kù)掃描多余的數(shù)據(jù),縮短查詢(xún)耗時(shí)—熱點(diǎn)隔離
  3. 加大線(xiàn)程池扁位,數(shù)據(jù)庫(kù)線(xiàn)程池從10增大到20准潭,后續(xù)和DBA交流了解到數(shù)據(jù)庫(kù)線(xiàn)程池不能也不會(huì)加太大,因?yàn)橛锌赡軙?huì)拖垮其他的數(shù)據(jù)庫(kù)域仇,這里推薦DBA@志歉的Mysql原理介紹刑然,干貨滿(mǎn)滿(mǎn)。
  4. 單庫(kù)單表修改為分庫(kù)分表暇务,改造投入時(shí)間較長(zhǎng)先不考慮泼掠。

服務(wù)層:

  1. 對(duì)復(fù)雜的代碼查詢(xún)邏輯做拆分,將弱依賴(lài)查詢(xún)拆分垦细,同時(shí)對(duì)長(zhǎng)文本字段的DO對(duì)象查詢(xún)放到業(yè)務(wù)邏輯處理的最后執(zhí)行择镇,這樣從400個(gè)全量DO對(duì)象的長(zhǎng)文本堆存儲(chǔ)降為只查分頁(yè)中第一頁(yè)的5個(gè)DO對(duì)象,緩解堆空間的使用情況解決FullGc問(wèn)題括改。
  2. 對(duì)耗時(shí)較長(zhǎng)的弱依賴(lài)RPC服務(wù)添加降級(jí)處理開(kāi)關(guān)控制腻豌,這點(diǎn)會(huì)影響頁(yè)面?zhèn)€別邏輯展示,需要和業(yè)務(wù)方溝通—依賴(lài)降級(jí)嘱能。
  3. 活動(dòng)中心頁(yè)面接口是個(gè)通用型接口吝梅,有非”活動(dòng)中心頁(yè)面“的渠道請(qǐng)求該接口接口,請(qǐng)求中有復(fù)雜"活動(dòng)與用戶(hù)相關(guān)邏輯處理"也就是1078次數(shù)據(jù)庫(kù)查詢(xún)的原因惹骂,對(duì)特定渠道的查詢(xún)隔離避免活動(dòng)中心頁(yè)面請(qǐng)求也會(huì)有1078次數(shù)據(jù)庫(kù)查詢(xún)—熱點(diǎn)隔離苏携。

應(yīng)用層:

  1. 做限流控制,對(duì)影響活動(dòng)頁(yè)面的其他http頁(yè)請(qǐng)求—熱點(diǎn)隔離对粪、時(shí)間片削峰
  2. 頁(yè)面可以展示后兜叨,高峰流量可能會(huì)壓到點(diǎn)擊報(bào)名上穿扳,后續(xù)的考慮用點(diǎn)擊報(bào)名彈驗(yàn)證碼來(lái)應(yīng)對(duì)同一時(shí)間的高峰qps,但是后續(xù)壓測(cè)和ROI考慮暫時(shí)不需要:因?yàn)檫@個(gè)寫(xiě)是分庫(kù)整個(gè)鏈路耗時(shí)為34ms—時(shí)間片削峰国旷。
  3. 秒殺活動(dòng)單獨(dú)做活動(dòng)頁(yè)面承接,這樣就可以把一些靜態(tài)資源放到CDN上茫死,后端只返回動(dòng)態(tài)的數(shù)據(jù)跪但,但因?yàn)榍岸速Y源和投入時(shí)間問(wèn)題本次沒(méi)有開(kāi)發(fā)—?jiǎng)屿o分離
  4. 把底層邏輯改動(dòng)的對(duì)客戶(hù)的相關(guān)影響掛在頁(yè)面公告,防止增加用戶(hù)過(guò)量咨詢(xún)

4. 身體復(fù)檢

重新做一遍壓測(cè)峦萎,觀(guān)察性能問(wèn)題

  1. 優(yōu)化后壓力測(cè)試系統(tǒng)抗壓能力qps:20-> 1980屡久,性能提升80倍,同時(shí)支持水平擴(kuò)展爱榔。
  2. 接口流量高峰耗時(shí):從8567ms-> 45ms,
    3.一次http服務(wù)從數(shù)據(jù)庫(kù)請(qǐng)求1078次減少到53次
  3. 慢sql已經(jīng)沒(méi)有被环。
    5.優(yōu)化邏輯發(fā)布后系統(tǒng)Old區(qū)內(nèi)存空間從800Mb降低到100Mb左右,在qps峰值時(shí)未出現(xiàn)過(guò)一次FullGc
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末详幽,一起剝皮案震驚了整個(gè)濱河市筛欢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌唇聘,老刑警劉巖版姑,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異迟郎,居然都是意外死亡剥险,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)宪肖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)表制,“玉大人,你說(shuō)我怎么就攤上這事控乾∶唇椋” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵阱持,是天一觀(guān)的道長(zhǎng)夭拌。 經(jīng)常有香客問(wèn)我,道長(zhǎng)衷咽,這世上最難降的妖魔是什么鸽扁? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮镶骗,結(jié)果婚禮上桶现,老公的妹妹穿的比我還像新娘。我一直安慰自己鼎姊,他們只是感情好骡和,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布相赁。 她就那樣靜靜地躺著,像睡著了一般慰于。 火紅的嫁衣襯著肌膚如雪钮科。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,007評(píng)論 1 284
  • 那天婆赠,我揣著相機(jī)與錄音绵脯,去河邊找鬼。 笑死休里,一個(gè)胖子當(dāng)著我的面吹牛蛆挫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播妙黍,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼悴侵,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了拭嫁?” 一聲冷哼從身側(cè)響起可免,我...
    開(kāi)封第一講書(shū)人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎噩凹,沒(méi)想到半個(gè)月后巴元,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡驮宴,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年逮刨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片堵泽。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡修己,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出迎罗,到底是詐尸還是另有隱情睬愤,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布纹安,位于F島的核電站尤辱,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏厢岂。R本人自食惡果不足惜光督,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望塔粒。 院中可真熱鬧结借,春花似錦、人聲如沸卒茬。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至柳畔,卻和暖如春馍管,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背薪韩。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工咽斧, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人躬存。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像舀锨,于是被迫代替她去往敵國(guó)和親岭洲。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 轉(zhuǎn) # https://www.cnblogs.com/easypass/archive/2010/12/ 08/...
    呂品?閱讀 9,698評(píng)論 0 44
  • 今天看到一位朋友寫(xiě)的mysql筆記總結(jié)坎匿,覺(jué)得寫(xiě)的很詳細(xì)很用心盾剩,這里轉(zhuǎn)載一下,供大家參考下替蔬,也希望大家能關(guān)注他原文地...
    信仰與初衷閱讀 4,725評(píng)論 0 30
  • --- layout: post title: "如果有人問(wèn)你關(guān)系型數(shù)據(jù)庫(kù)的原理告私,叫他看這篇文章(轉(zhuǎn))" date...
    藍(lán)墜星閱讀 777評(píng)論 0 3
  • MYSQL應(yīng)該是最流行的WEB后端數(shù)據(jù)庫(kù)。大量應(yīng)用于PHP承桥,Ruby驻粟,Python,Java 等Web語(yǔ)言開(kāi)發(fā)項(xiàng)目...
    smooth00閱讀 2,246評(píng)論 0 16
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類(lèi)型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,089評(píng)論 1 32