線上項目優(yōu)化記錄

業(yè)務(wù)場景:

最近幾個月都在做項目接口優(yōu)化,壓測等工作。
目前項目緩存主要用的redis和spring的cache以及Ibatis的cache美旧。但絕大部分還是用的redis.
基本步驟:先去緩存查,有就直接返回,沒有就去查數(shù)據(jù)庫,然后加失效時間,存緩存,然后返回,但是這中間有個問題,像那種業(yè)務(wù)邏輯比較多的,雖說緩存的那幾秒速度快了,TPS上不去,緩存的失效時間到了,還是會把壓力透傳到db上化借。之前用戶量少,隨隨便便就可以撐住,隨著用戶增長,手機小屏用戶變多,機頂盒用戶變多,現(xiàn)在用戶在700萬+,而且為了做推廣,做了開戶抽獎活動,并發(fā),性能問題越來越嚴重。

起初優(yōu)化

起初想到的就是優(yōu)化代碼及業(yè)務(wù)邏輯,我們?nèi)齻€人,便開始擼代碼之旅

代碼包括

  • 使用多線程,線程池去做處理
  • 梳理邏輯去掉冗余代碼
  • 使用jmap,jstack去查看耗時的堆棧信息
  • JProfiler 優(yōu)化接口
  • Jmeter壓測接口
  • 其他

其中db包括

等這些都做完,出包放到線上,效果還是不好,并不能滿足領(lǐng)導(dǎo)性能的要求及想要的TPS

繼續(xù)優(yōu)化

然后又是開會討論討論研究研究...,最后定了做一個CacheManager(緩存系統(tǒng)),最終達到領(lǐng)導(dǎo)想要的TPS及指標(biāo)蓖康。
這里簡單說一下cm一條線路,還有幾條線路就不說了,Metadata和API通過MQ做消息傳輸,消息隊列之前用的ActiveMQ,然后改為RabbitMQ,好處網(wǎng)上有一堆,在Metadata側(cè)發(fā)數(shù)據(jù)給API側(cè)時,將數(shù)據(jù)同時傳到cm側(cè)做處理,主要是緩存.以此來減少接口對數(shù)據(jù)庫的壓力铐炫。

此方案的缺點

覺得MongDB,屬于雞肋
理由,redis已經(jīng)有持久化了,如果只做展示,運維,加入mongo在這個場景下,會占用很多的空間,各有利弊吧

數(shù)據(jù)一致性的問題
因為以后基本不過db,直接去緩存取,雖然redis有持久化,但是我們還是引進了MongDB,存redis時順帶存mongo,使用vue寫了個簡單頁面,然后cm提供一組供運維頁面使用的接口,在頁面做簡單請求實現(xiàn),以此來解決數(shù)據(jù)一致性的問題(其中包括查問題數(shù)據(jù)重新刷到redis)

redis相關(guān)的問題
壓力全部轉(zhuǎn)移到redis,如果redis出現(xiàn)問題,將是致命的,細的我也沒怎么看,說幾個我知道的

  • 網(wǎng)絡(luò)延時導(dǎo)致阻塞
  • 阻塞通過查看慢查詢?nèi)罩?找病因
  • redis模式的合理選擇
  • 最主要的加機器,機器,機器,重要事說三遍

總結(jié)

此方案或許有很多漏洞,不恰當(dāng)之處請包涵,但整體效果是達到了領(lǐng)導(dǎo)的要求,中間我們就討論過數(shù)據(jù)一致性問題,為啥不用binlog去做數(shù)據(jù)恢復(fù),為啥非得加mongo,畫頁面等,我當(dāng)時提的建議是,對于數(shù)據(jù)一致性修復(fù),咱們得弄可視化讓運維去做處理,總不能每次都提供腳本吧蒜焊。

對于redis模式的選擇,推薦使用集群,理由如下

單實例
對于單實例,學(xué)習(xí)使用就行,在項目中基本不會使用此模式.單實例除小系統(tǒng)外,撐不起整個服務(wù)倒信。

主從模式
數(shù)據(jù)會通過主同步到從,但是受限于單臺機器的性能泳梆。

哨兵模式
項目之前用的哨兵模式
優(yōu)點:雖說哨兵有主寫從讀鳖悠、主從復(fù)制,故障自動轉(zhuǎn)移,通過選舉做的.。
缺點:還是受限于單臺機器性能,而且數(shù)據(jù)上去后,每臺機器都保存著全量的緩存數(shù)據(jù),如果還做持久化了(RDB,AOF),那占用的資源會更大优妙。

集群模式
項目現(xiàn)在用的模式
優(yōu)點:主從復(fù)制,高可用,通過16384個槽,均勻分配到不同的主節(jié)點,key通過crc16算槽,壓力分配到每臺機器上,支持動態(tài)加減節(jié)點,擴容及收縮,故障自動轉(zhuǎn)移等
缺點:耗機器,需要多臺機器

相關(guān)資料

鏈接: https://pan.baidu.com/s/1PedVDbb2NjODoHWuGbiQmw 提取碼: 5ii4

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末乘综,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子卡辰,更是在濱河造成了極大的恐慌熟菲,老刑警劉巖看政,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抄罕,死亡現(xiàn)場離奇詭異,居然都是意外死亡呆贿,警方通過查閱死者的電腦和手機森渐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進店門冒晰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人壶运,你說我怎么就攤上這事〗椋” “怎么了?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵辕翰,是天一觀的道長。 經(jīng)常有香客問我喜命,道長河劝,這世上最難降的妖魔是什么壁榕? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任赎瞎,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘贪染。我一直安慰自己缓呛,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布哟绊。 她就那樣靜靜地躺著痰憎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪铣耘。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天蜗细,我揣著相機與錄音怒详,去河邊找鬼踪区。 笑死,一個胖子當(dāng)著我的面吹牛缎岗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播传泊,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼系冗!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起掌敬,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤池磁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后地熄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡端考,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年却特,在試婚紗的時候發(fā)現(xiàn)自己被綠了扶供。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片裂明。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖闽晦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情仙蛉,我是刑警寧澤,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布液样,位于F島的核電站振亮,受9級特大地震影響鞭莽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜澎怒,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望星瘾。 院中可真熱鬧,春花似錦琳状、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽翎承。三九已至符匾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間啊胶,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工焰坪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人琳彩。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓部凑,卻偏偏與公主長得像,于是被迫代替她去往敵國和親涂邀。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,658評論 2 350