前言:最近做關(guān)于優(yōu)惠券的開(kāi)發(fā),但是發(fā)現(xiàn)優(yōu)惠券量大了之后,性能完全跟不上,庫(kù)中存200萬(wàn)條優(yōu)惠券,發(fā)一張券竟然需要5分鐘之久,然后我就著手優(yōu)化,最終到發(fā)一張券只需要15毫秒左右,現(xiàn)在把整個(gè)思路以及代碼貼出來(lái),供大家一起討論和學(xué)習(xí)。

簡(jiǎn)介

主要實(shí)現(xiàn)優(yōu)惠券促銷活動(dòng),首先創(chuàng)建活動(dòng),然后創(chuàng)建券組,采用預(yù)處理的方式提前進(jìn)行制券,在第一版本主要實(shí)現(xiàn),功能的基本業(yè)務(wù)。然后在分支實(shí)現(xiàn),大數(shù)量和高并發(fā)問(wèn)題。

分支1.1

1:解決優(yōu)惠券編碼重復(fù)問(wèn)題,原先采用的是獲取數(shù)據(jù)庫(kù)所有的券,然后去比對(duì)是否重復(fù),如果庫(kù)數(shù)據(jù)量達(dá)百萬(wàn)的時(shí)候就會(huì)出現(xiàn)非常緩慢,而且會(huì) 出現(xiàn)經(jīng)常制券失敗等,所以此版本舍棄原先采用隨機(jī)數(shù)的模式,通過(guò)推特的雪花算法來(lái)避免唯一,但是依然保留優(yōu)惠券前綴和后綴。
2:由原來(lái)的異步采用線程修改為線程池,以為高并發(fā)時(shí)候存在大量的線程占內(nèi)存空間。
3:由原來(lái)制券采用for循環(huán)模式修改為批量制券,而且采用分配插入優(yōu)惠券,一批次目前定為5000.
4:加入消息隊(duì)列(采用rabbitMQ)對(duì)于某一批次添加失敗,把失敗的放入對(duì)列中,通過(guò)隊(duì)列進(jìn)行補(bǔ)救,已到達(dá)高可用。避免大批量?jī)?yōu)惠券來(lái)回重新導(dǎo)入 消息隊(duì)列對(duì)于異常信息拒絕解決并重返消息隊(duì)列中,配置2個(gè)消費(fèi)者以避免其中一個(gè)服務(wù)異常,消息處理出現(xiàn)死循環(huán)

分支1.2

1:加入操作日志
目的:跟蹤熱點(diǎn)數(shù)據(jù),查詢?nèi)罩究焖俑檻?yīng)用程序中的慢查詢或慢操作,為后面的優(yōu)化奠定基礎(chǔ)
2:加入異常日志
目的:快速的獲取線程的異常問(wèn)題,通過(guò)日志中的數(shù)據(jù)能快速修改
3:采用技術(shù) 通過(guò)aop和rabbitmq中間件來(lái)做,這樣減少由于日志問(wèn)題給程序帶來(lái)的效率問(wèn)題

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開(kāi)發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式