新聞中心
一個(gè)在傳統(tǒng)行業(yè)工作了 7 年的粉絲私信我。說他最近去很多互聯(lián)網(wǎng)公司面試,遇到的很多技術(shù)和概念都沒聽過。其中就有一道題是:”什么是冪等、如何解決冪等性問題“?他說,這個(gè)概念聽都沒聽過,怎么可能回答出來。

創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站制作、做網(wǎng)站、大理州網(wǎng)絡(luò)推廣、小程序開發(fā)、大理州網(wǎng)絡(luò)營銷、大理州企業(yè)策劃、大理州品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供大理州建站搭建服務(wù),24小時(shí)服務(wù)熱線:18982081108,官方網(wǎng)址:www.cdcxhl.com
接下來,我借這位同學(xué)的問題,給大家分享一下我對這個(gè)問題的理解。
1.什么是冪等?
其實(shí)冪等,是一個(gè)數(shù)學(xué)上的概念。而在計(jì)算機(jī)編程領(lǐng)域中,冪等是指一個(gè)方法被多次重復(fù)執(zhí)行的時(shí)候所期望的結(jié)果要和第一次執(zhí)行所期望的結(jié)果保持一致。簡單理解就是,一個(gè)邏輯即使被重復(fù)執(zhí)行多次,也不影響最終結(jié)果的一致性,這叫冪等。
之所以要考慮到冪等性問題,是因?yàn)樵诰W(wǎng)絡(luò)通信中,有這兩種行為都有可能會(huì)導(dǎo)致接口被重復(fù)執(zhí)行。
第一種是,用戶的重復(fù)提交或者用戶的惡意攻擊;
第二種是,分布式系統(tǒng)中,為了避免數(shù)據(jù)丟失,采用的超時(shí)重試機(jī)制。
這兩種情況都有可能導(dǎo)致服務(wù)接口被重復(fù)調(diào)用。所以在程序設(shè)計(jì)中,對于數(shù)據(jù)變更類操作的接口,需要保證接口的冪等性。
而冪等性的核心思想,其實(shí)就是保證這個(gè)接口的執(zhí)行結(jié)果只影響一次,后續(xù)即便再次調(diào)用,也不能對數(shù)據(jù)產(chǎn)生影響,所以基于這樣一個(gè)需求,我們?nèi)绾谓鉀Q冪等性問題呢?
2.如何解決?
解決冪等性問題的方法有很多,下面我分享一下常用幾種方案。
第1種方案,就是使用數(shù)據(jù)庫的唯一約束來實(shí)現(xiàn)冪等,比如對于數(shù)據(jù)插入類的場景,比如創(chuàng)建訂單,因?yàn)橛唵翁柨隙ㄊ俏ㄒ坏模匀绻嵌啻握{(diào)用就會(huì)觸發(fā)數(shù)據(jù)庫的唯一約束異常,從而避免一個(gè)請求創(chuàng)建多個(gè)訂單的問題。
第2種方案,就是使用 Redis 提供的 setNX 指令,比如對于 MQ 消費(fèi)的場景,為了避免 MQ 重。
復(fù)消費(fèi)導(dǎo)致數(shù)據(jù)多次被修改的問題,可以在接受到 MQ 的消息時(shí),把這個(gè)消息通過 setNX 寫入到 Redis 中,一旦這個(gè)消息被消費(fèi)過,就不會(huì)再次消費(fèi)。
第3種方案,使用狀態(tài)機(jī)來實(shí)現(xiàn)冪等,所謂的狀態(tài)機(jī)是指一條數(shù)據(jù)的完整運(yùn)行狀態(tài)的轉(zhuǎn)換流程,比如 ,因?yàn)樗臓顟B(tài)只會(huì)向前變更,所以多次修改同一條數(shù)據(jù)的時(shí)候,一旦狀態(tài)發(fā)生變更,那么對這條數(shù)據(jù)修改造成的影響只會(huì)發(fā)生一次。
當(dāng)然,除了以上3種常用的意外,還可以基于 Token 機(jī)制或者增加去重表等方法來實(shí)現(xiàn),但是不管是什么方法,無非就是兩種思路,要么就是接口只允許調(diào)用一次,比如唯一約束、基于 Redis 的鎖機(jī)制。
要么就是對數(shù)據(jù)的影響只會(huì)觸發(fā)一次,比如樂觀鎖等。
以上就是我對這個(gè)問題的理解。
技術(shù)這個(gè)行業(yè)的發(fā)展是很快的,如果自己的技術(shù)能力和認(rèn)知跟不上變化。那基本上可以說是被時(shí)代淘汰了,所以保持持續(xù)學(xué)習(xí)是非常重要的。
新聞標(biāo)題:互聯(lián)網(wǎng)高頻面試題,什么是冪等?如何解決冪等性問題
分享地址:http://www.dlmjj.cn/article/dhcgdec.html


咨詢
建站咨詢
