電商平臺高并發(fā)思考-冪等性(1)

? ? ? ?電商平臺下高并發(fā)經(jīng)典問題在實際的項目中需要積極的思考,高并發(fā)場景下接口冪等性则果,分布式事務(wù)幔翰,數(shù)據(jù)庫鎖,分布式事務(wù)西壮,樂觀鎖遗增,悲觀鎖,事務(wù)場景都是需要在實際項目中進行思考和提出解決方案款青。本文就講項目中遇到的問題一一做詳細分析和尋找解決方案做修。

接口冪等性定義和解決方案

? ? ? (1)定義:

? ? 什么是接口的冪等性,如果是第一次聽到的小伙伴可以簡要的閱讀下,在java開發(fā)中接口的冪等性主要講的是接口在1次和多次調(diào)用的系統(tǒng)的數(shù)據(jù)影響是一樣的缓待。

? ? ? 接口的冪等性實際上就是接口可重復(fù)調(diào)用蚓耽,在調(diào)用方多次調(diào)用的情況下,接口最終得到的結(jié)果是一致的旋炒。有些接口可以天然的實現(xiàn)冪等性步悠,比如查詢刪除接口,但是插入更新接口等需要考慮接口冪等性瘫镇,

? ? ? ? (2)場景:

????一個訂單創(chuàng)建接口鼎兽,第一次調(diào)用超時了,然后調(diào)用方重試了一次

????在訂單創(chuàng)建時铣除,我們需要去扣減庫存谚咬,這時接口發(fā)生了超時,調(diào)用方重試了一次

????當(dāng)這筆訂單開始支付尚粘,在支付請求發(fā)出之后择卦,在服務(wù)端發(fā)生了扣錢操作,接口響應(yīng)超時了郎嫁,調(diào)用方重試了一次

????一個訂單狀態(tài)更新接口秉继,調(diào)用方連續(xù)發(fā)送了兩個消息,一個是已創(chuàng)建泽铛,一個是已付款尚辑。????但是你先接收到已付款,然后又接收到了已創(chuàng)建

????在支付完成訂單之后盔腔,需要發(fā)送一條短信杠茬,當(dāng)一臺機器接收到短信發(fā)送的消息之后,處理較慢弛随。消息中間件又把消息投遞給另外一臺機器處理

? ? ? ? (3)解決方案:

? ? ? ? 1瓢喉、去重表

? ? ? ?去重表設(shè)計思路主要講的是更新或者插入數(shù)據(jù)之前先在去重表中插入一條記錄,并按照數(shù)據(jù)內(nèi)容設(shè)計唯一索引舀透,這樣如果接口已經(jīng)調(diào)用一次重復(fù)調(diào)用就會引發(fā)鍵值重復(fù)灯荧,異常處理中可以作重復(fù)相關(guān)處理或者引發(fā)數(shù)據(jù)異常數(shù)據(jù)回滾。

? ? ? ?2盐杂、全局唯一ID

? ? ? ?如果使用全局唯一ID,就是根據(jù)業(yè)務(wù)的操作和內(nèi)容生成一個全局ID哆窿,在執(zhí)行操作前先根據(jù)這個全局唯一ID是否存在链烈,來判斷這個操作是否已經(jīng)執(zhí)行。如果不存在則把全局ID挚躯,存儲到存儲系統(tǒng)中强衡,比如數(shù)據(jù)庫、redis等码荔。

? ? ? 但是如果存儲在數(shù)據(jù)庫中如果按照select+update可能會發(fā)生并發(fā)問題漩勤,需要特別注意感挥,如果這種場景下需要考慮分布式鎖或者采用同步機制。如存在數(shù)據(jù)庫中在插入時重復(fù)插入就會發(fā)生異吃桨埽回滾触幼。

? ? ? 更新時按照唯一鍵值進行更新,但是需要注意的是在更新操作下可能會發(fā)生重復(fù)操作究飞,例如設(shè)置訂單狀態(tài)支付成功和創(chuàng)建兩個操作可能會重復(fù)執(zhí)行置谦,需要結(jié)合數(shù)據(jù)庫字段或者狀態(tài)機實現(xiàn)功能。

? ? 3亿傅、數(shù)據(jù)庫字段約束

數(shù)據(jù)庫字段約束主要用版本號控制媒峡,狀態(tài)機約束,字段約束葵擎,其實從整個的實現(xiàn)思路來說都是采用數(shù)據(jù)庫字段進行做文章谅阿。

a、版本號控制主要用于并發(fā)情況下做扣減或者或者操作數(shù)據(jù)酬滤,如果沒有版本號兩個并發(fā)操作會出現(xiàn)讀取到數(shù)據(jù)一致签餐,但是扣減之后本來處理的扣將兩次操作的和但是現(xiàn)在值是最后一個操作的值,加了版本號就會防止這種情況發(fā)生

b敏晤、只有在某種字段滿足特定條件的情況下才能進行指定字段的處理贱田,例如在狀態(tài)為未支付的情況下才能進行金額扣減,需要在數(shù)據(jù)庫where字段中進行處理嘴脾。

c男摧、狀態(tài)機思路在電商訂單流轉(zhuǎn)或者在狀態(tài)機很復(fù)雜情況下才能進行,思路就是利用有限狀態(tài)機在各個情況下狀態(tài)變更需要依賴制定狀態(tài)機流轉(zhuǎn)译打,滿足有效狀態(tài)機才能進行狀態(tài)變更耗拓,另外采用有限狀態(tài)機可以統(tǒng)一管狀態(tài)變更,而不是把狀態(tài)變化分散到各個部分不便于管理奏司。

本節(jié)到此乔询,下次分享電商平臺高并發(fā)思考-事務(wù)(2)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市韵洋,隨后出現(xiàn)的幾起案子竿刁,更是在濱河造成了極大的恐慌,老刑警劉巖搪缨,帶你破解...
    沈念sama閱讀 218,640評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件食拜,死亡現(xiàn)場離奇詭異,居然都是意外死亡副编,警方通過查閱死者的電腦和手機负甸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人呻待,你說我怎么就攤上這事打月。” “怎么了蚕捉?”我有些...
    開封第一講書人閱讀 165,011評論 0 355
  • 文/不壞的土叔 我叫張陵奏篙,是天一觀的道長。 經(jīng)常有香客問我鱼冀,道長报破,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,755評論 1 294
  • 正文 為了忘掉前任千绪,我火速辦了婚禮充易,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘荸型。我一直安慰自己盹靴,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,774評論 6 392
  • 文/花漫 我一把揭開白布瑞妇。 她就那樣靜靜地躺著稿静,像睡著了一般。 火紅的嫁衣襯著肌膚如雪辕狰。 梳的紋絲不亂的頭發(fā)上改备,一...
    開封第一講書人閱讀 51,610評論 1 305
  • 那天,我揣著相機與錄音蔓倍,去河邊找鬼悬钳。 笑死,一個胖子當(dāng)著我的面吹牛偶翅,可吹牛的內(nèi)容都是我干的默勾。 我是一名探鬼主播,決...
    沈念sama閱讀 40,352評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼聚谁,長吁一口氣:“原來是場噩夢啊……” “哼母剥!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起形导,我...
    開封第一講書人閱讀 39,257評論 0 276
  • 序言:老撾萬榮一對情侶失蹤环疼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后朵耕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體秦爆,經(jīng)...
    沈念sama閱讀 45,717評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,894評論 3 336
  • 正文 我和宋清朗相戀三年憔披,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,021評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡芬膝,死狀恐怖望门,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情锰霜,我是刑警寧澤筹误,帶...
    沈念sama閱讀 35,735評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站癣缅,受9級特大地震影響厨剪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜友存,卻給世界環(huán)境...
    茶點故事閱讀 41,354評論 3 330
  • 文/蒙蒙 一祷膳、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧屡立,春花似錦直晨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至殴俱,卻和暖如春灭贷,著一層夾襖步出監(jiān)牢的瞬間讨彼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評論 1 270
  • 我被黑心中介騙來泰國打工兄淫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人匾委。 一個月前我還...
    沈念sama閱讀 48,224評論 3 371
  • 正文 我出身青樓拖叙,卻偏偏與公主長得像,于是被迫代替她去往敵國和親赂乐。 傳聞我的和親對象是個殘疾皇子薯鳍,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,974評論 2 355

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