分布式環(huán)境下接口冪等性淺析

????HTTP/1.1中對冪等性的定義是:一次和多次請求某一個資源對于資源本身應(yīng)該具有同樣的結(jié)果(網(wǎng)絡(luò)超時等問題除外)脚猾。也就是說指攒,其任意多次執(zhí)行對資源本身所產(chǎn)生的影響均與一次執(zhí)行的影響相同叠纹。??

????冪等性淹接,通俗的說就是一個接口,多次發(fā)起同一個請求慧库,必須保證返回結(jié)果必須準(zhǔn)確,比如訂單接口柠傍,不能多次創(chuàng)建訂單峭梳,支付寶回調(diào)接口可能會多次回調(diào)作喘,你要保證你的業(yè)務(wù)處理準(zhǔn)確且操作只能執(zhí)行一次运嗜。

??????在分布式場景中甘磨,假如你的某個服務(wù)部署了5臺機(jī)器,前端請求調(diào)用患整,因為某些原因可能重復(fù)請求了倆次拜效,因為負(fù)載均衡算法落到了倆臺機(jī)器上,可能會導(dǎo)致重復(fù)的業(yè)務(wù)處理邏輯各谚;又比如說?在使用微服務(wù)組件紧憾,例如zuul,feign等?在超時的情況下會有重試機(jī)制,也可能會導(dǎo)致重試請求多次昌渤,如果業(yè)務(wù)方?jīng)]有做好冪等性赴穗,就會導(dǎo)致業(yè)務(wù)處理出錯,比如多次創(chuàng)建訂單膀息,多次扣款般眉,這些坑都會導(dǎo)致很嚴(yán)重的問題。

?????那么怎么保證冪等性呢履婉,保證冪等性主要就是要保證每一次請求都必須要有一個唯一的標(biāo)識煤篙,比如訂單id斟览,比如支付流水號毁腿,或者前端請求可以生成一個唯一的隨機(jī)串,都可以作為唯一標(biāo)識苛茂,對于第一次請求的時候已烤,就必須要將唯一標(biāo)識存放到數(shù)據(jù)庫MySQL或者redis等存儲中。后端服務(wù)收到請求妓羊,在進(jìn)行業(yè)務(wù)處理之前胯究,必須要先檢查這個唯一標(biāo)識是否存在,如果存在躁绸,就可以判定已經(jīng)此次請求已經(jīng)處理過裕循,不需要進(jìn)行重復(fù)處理。

??????在實際開發(fā)中保證接口冪等性主要有以下幾個方案,可供參考净刮。

??????(1)?對于要操作的數(shù)據(jù)剥哑,在表中建立唯一索引字段。特別適用于進(jìn)行一些新增數(shù)據(jù)淹父,插入操作株婴,比如創(chuàng)建訂單,在MySQL業(yè)務(wù)表中建立唯一索引字段暑认,當(dāng)請求過來的時候困介,如果是多次重試大审,就違反了表中索引字段的唯一性,就會報錯座哩,業(yè)務(wù)自然會回滾徒扶。

??????(2)?還是基于MySQL數(shù)據(jù)庫,在業(yè)務(wù)表中增加版本號字段根穷,調(diào)用方每次請求數(shù)據(jù)的時候可以先獲取version版本號酷愧,然后多傳入一個version版本號字段,業(yè)務(wù)方在處理請求的時候缠诅,會去查新數(shù)據(jù)庫中的version版本號溶浴,判斷一下倆個version的值是否相同,如果version不相同管引,說明本次請求已經(jīng)處理過了士败,直接返回。

??????(3)?基于業(yè)務(wù)狀態(tài)進(jìn)行判斷褥伴,設(shè)計接口的時候谅将,對于每一個業(yè)務(wù)操作能否操作,設(shè)置可以執(zhí)行的狀態(tài)重慢,比如使用狀態(tài)機(jī)模式饥臂,便于檢查業(yè)務(wù)對象的狀態(tài),接受到請求要進(jìn)行一些業(yè)務(wù)處理時似踱,可以先行判斷業(yè)務(wù)對象的狀態(tài)隅熙,是否滿足執(zhí)行操作的條件,如果當(dāng)前操作已經(jīng)執(zhí)行過了核芽,那么狀態(tài)就會發(fā)生變化囚戚,也就不能進(jìn)行當(dāng)前操作,直接返回轧简。

??????(4)?可以在外部存儲中設(shè)置一個單獨(dú)的去重表驰坊,比如使用redis,每次請求過來哮独,生成唯一的key拳芙。重復(fù)請求過來的時候判斷一下這個key是否存在,如果存在皮璧,說明存在重復(fù)調(diào)用舟扎,直接返回。

??????實現(xiàn)接口的冪等性?是業(yè)務(wù)接口方必須保證的基礎(chǔ)功能恶导,特別是服務(wù)與服務(wù)間的調(diào)用浆竭,可以使得服務(wù)接口在異常請求情況下,仍然保證接口的準(zhǔn)確性,數(shù)據(jù)的準(zhǔn)確性邦泄。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末删窒,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子顺囊,更是在濱河造成了極大的恐慌肌索,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件特碳,死亡現(xiàn)場離奇詭異诚亚,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)午乓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進(jìn)店門站宗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人益愈,你說我怎么就攤上這事梢灭。” “怎么了蒸其?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵敏释,是天一觀的道長。 經(jīng)常有香客問我摸袁,道長钥顽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任靠汁,我火速辦了婚禮蜂大,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘膀曾。我一直安慰自己县爬,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布添谊。 她就那樣靜靜地躺著,像睡著了一般察迟。 火紅的嫁衣襯著肌膚如雪斩狱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天扎瓶,我揣著相機(jī)與錄音所踊,去河邊找鬼。 笑死概荷,一個胖子當(dāng)著我的面吹牛秕岛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼继薛,長吁一口氣:“原來是場噩夢啊……” “哼修壕!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起遏考,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤慈鸠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后灌具,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體青团,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年咖楣,在試婚紗的時候發(fā)現(xiàn)自己被綠了督笆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡诱贿,死狀恐怖胖腾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情瘪松,我是刑警寧澤咸作,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站宵睦,受9級特大地震影響记罚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜壳嚎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一桐智、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧烟馅,春花似錦说庭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至寡润,卻和暖如春捆憎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背梭纹。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工躲惰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人变抽。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓础拨,卻偏偏與公主長得像氮块,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子诡宗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評論 2 344

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

  • 高并發(fā)下接口冪等性解決方案 一滔蝉、冪等性概念在編程中.一個冪等操作的特點(diǎn)是其任意多次執(zhí)行所產(chǎn)生的影響均與一次執(zhí)行的影...
    ongahong閱讀 599評論 0 2
  • 一、冪等性概念 在編程中.一個冪等操作的特點(diǎn)是其任意多次執(zhí)行所產(chǎn)生的影響均與一次執(zhí)行的影響相同僚焦。冪等函數(shù)锰提,或冪等方...
    匆匆歲月閱讀 1,134評論 0 31
  • 一、背景 我們實際系統(tǒng)中有很多操作芳悲,是不管做多少次立肘,只要是同一個動作都應(yīng)該產(chǎn)生一樣的效果或返回一樣的結(jié)果。例如:1...
    jesse_cheng閱讀 828評論 0 1
  • 高考那幾天刷朋友圈刷個沒完沒了名扛,不知有何目的谅年,只是單純想刷下去,更不知道想刷到什么消息肮韧。眼看別人對高考的種種慨嘆融蹂,...
    腰佩桃木降妖劍閱讀 422評論 1 2
  • 我送你一只刻有我名字的蠟燭 當(dāng)其燃燒殆盡之時 ...
    文無顏閱讀 165評論 0 0