国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

如何保證分布式情況下的冪等性

這篇具有很好參考價(jià)值的文章主要介紹了如何保證分布式情況下的冪等性。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

關(guān)于這個(gè)分布式服務(wù)的冪等性,這是在使用分布式服務(wù)的時(shí)候會(huì)經(jīng)常遇到的問(wèn)題,比如,重復(fù)提交的問(wèn)題。而冪等性,就是為了解決問(wèn)題存在的一個(gè)概念了。

什么是冪等
冪等(idempotent、idempotence)是?個(gè)數(shù)學(xué)與計(jì)算機(jī)學(xué)概念,常?于抽象代數(shù)中。

在編程中?個(gè)冪等操作的特點(diǎn)是其任意多次執(zhí)?所產(chǎn)?的影響均與?次執(zhí)?的影響相同。冪等函數(shù),或 冪等?法,是指可以使?相同參數(shù)重復(fù)執(zhí)?,并能獲得相同結(jié)果的函數(shù)。這些函數(shù)不會(huì)影響系統(tǒng)狀態(tài), 也不?擔(dān)?重復(fù)執(zhí)?會(huì)對(duì)系統(tǒng)造成改變。例如,“setTrue()”函數(shù)就是?個(gè)冪等函數(shù),?論多次執(zhí)?,其結(jié) 果都是?樣的,更復(fù)雜的操作冪等保證是利?唯?交易號(hào)(流?號(hào))實(shí)現(xiàn).

接?冪等性就是?戶對(duì)于同?操作發(fā)起的?次請(qǐng)求或者多次請(qǐng)求的結(jié)果是?致的,不會(huì)因?yàn)槎啻吸c(diǎn)擊? 產(chǎn)?了副作?。

什么是接口的冪等性
在HTTP/1.1中,對(duì)冪等性進(jìn)行了定義。它描述了一次和多次請(qǐng)求某一個(gè)資源對(duì)于資源本身應(yīng)該具有同樣的結(jié)果(網(wǎng)絡(luò)超時(shí)等問(wèn)題除外),即第一次請(qǐng)求的時(shí)候?qū)Y源產(chǎn)生了副作用,但是以后的多次請(qǐng)求都不會(huì)再對(duì)資源產(chǎn)生副作用。這里的副作用是不會(huì)對(duì)結(jié)果產(chǎn)生破壞或者產(chǎn)生不可預(yù)料的結(jié)果。也就是說(shuō),其任意多次執(zhí)行對(duì)資源本身所產(chǎn)生的影響均與一次執(zhí)行的影響相同。

不能保證冪等性的操作
前端重復(fù)提交表單:在填寫一些表格時(shí)候,用戶填寫完成提交,很多時(shí)候會(huì)因網(wǎng)絡(luò)波動(dòng)沒(méi)有及時(shí)對(duì)用戶做出提交成功響應(yīng),致使用戶認(rèn)為沒(méi)有成功提交,然后一直點(diǎn)提交按鈕,這時(shí)就會(huì)發(fā)生重復(fù)提交表單請(qǐng)求。

用戶惡意進(jìn)行刷單:例如在實(shí)現(xiàn)用戶投票這種功能時(shí),如果用戶針對(duì)一個(gè)用戶進(jìn)行重復(fù)提交投票,這樣會(huì)導(dǎo)致接口接收到用戶重復(fù)提交的投票信息,這樣會(huì)使投票結(jié)果與事實(shí)嚴(yán)重不符。

接口超時(shí)重復(fù)提交:很多時(shí)候 HTTP 客戶端工具都默認(rèn)開啟超時(shí)重試的機(jī)制,尤其是第三方調(diào)用接口時(shí)候,為了防止網(wǎng)絡(luò)波動(dòng)超時(shí)等造成的請(qǐng)求失敗,都會(huì)添加重試機(jī)制,導(dǎo)致一個(gè)請(qǐng)求提交多次。

消息進(jìn)行重復(fù)消費(fèi):當(dāng)使用 MQ 消息中間件時(shí)候,如果發(fā)生消息中間件出現(xiàn)錯(cuò)誤未及時(shí)提交消費(fèi)信息,導(dǎo)致發(fā)生重復(fù)消費(fèi)。

如果放到數(shù)據(jù)庫(kù)的操作層面,那么就有很多操作需要去保證冪等性了。

A: 查詢操作
查詢對(duì)于結(jié)果是不會(huì)有改變的,查詢?次和查詢多次,在數(shù)據(jù)不變的情況下,查詢結(jié)果是?樣的。 select是天然的冪等操作

B: 刪除操作
刪除?次和多次刪除都是把數(shù)據(jù)刪除。(注意可能返回結(jié)果不?樣,刪除的數(shù)據(jù)不存在,返回0,刪除 的數(shù)據(jù)多條,返回結(jié)果多個(gè),在不考慮返回結(jié)果的情況下,刪除操作也是具有冪等性的)

C: 更新操作
修改在?多場(chǎng)景下結(jié)果?樣,但是如果是增量修改是需要保證冪等性的,如下例?:

把表中id為XXX的記錄的A字段值設(shè)置為1,這種操作不管執(zhí)?多少次都是冪等的

把表中id為XXX的記錄的A字段值增加1,這種操作就不是冪等的

D: 新增操作
增加在重復(fù)提交的場(chǎng)景下會(huì)出現(xiàn)冪等性問(wèn)題,如以上的?付問(wèn)題

如何實(shí)現(xiàn)冪等性
其實(shí)實(shí)現(xiàn)冪等性的方案有不少,但是呢,這就得需要你根據(jù)不同的業(yè)務(wù)場(chǎng)景去選擇合適的方式了。

實(shí)現(xiàn)方式一
數(shù)據(jù)庫(kù)唯一主鍵

數(shù)據(jù)庫(kù)唯一主鍵的實(shí)現(xiàn)主要是利用數(shù)據(jù)庫(kù)中主鍵唯一約束的特性,一般來(lái)說(shuō)唯一主鍵比較適用于“插入”時(shí)的冪等性,其能保證一張表中只能存在一條帶該唯一主鍵的記錄。

使用數(shù)據(jù)庫(kù)唯一主鍵完成冪等性時(shí)需要注意的是,該主鍵一般來(lái)說(shuō)并不是使用數(shù)據(jù)庫(kù)中自增主鍵,而是使用分布式 ID 充當(dāng)主鍵(可以參考 Java 中分布式 ID 的設(shè)計(jì)方案 這篇文章),這樣才能能保證在分布式環(huán)境下 ID 的全局唯一性。

而實(shí)際上生成這個(gè)主鍵的方式就是在當(dāng)請(qǐng)求的時(shí)候后,生成分布式唯一ID,然后當(dāng)做主鍵插入數(shù)據(jù)庫(kù),來(lái)保證唯一即可。

實(shí)現(xiàn)方式二
Token機(jī)制

Token機(jī)制,實(shí)際上也可以稱為 Token 令牌

服務(wù)端提供了發(fā)送token的接?。我們?cè)诜治鰳I(yè)務(wù)的時(shí)候,哪些業(yè)務(wù)是存在冪等問(wèn)題的,就必須在 執(zhí)?業(yè)務(wù)前,先去獲取token,服務(wù)器會(huì)把token保存到redis中。(微服務(wù)肯定是分布式了,如果 單機(jī)就適?jvm緩存)。

然后調(diào)?業(yè)務(wù)接?請(qǐng)求時(shí),把token攜帶過(guò)去,?般放在請(qǐng)求頭部。

服務(wù)器判斷token是否存在redis中,存在表示第?次請(qǐng)求,這時(shí)把redis中的token刪除,繼續(xù)執(zhí)?業(yè)務(wù)。

如果判斷token不存在redis中,就表示是重復(fù)操作,直接返回重復(fù)標(biāo)記給client,這樣就保證了業(yè)務(wù)代碼,不被重復(fù)執(zhí)?。

實(shí)現(xiàn)方式三
數(shù)據(jù)庫(kù)樂(lè)觀鎖

數(shù)據(jù)庫(kù)樂(lè)觀鎖方案一般只能適用于執(zhí)行“更新操作”的過(guò)程,我們可以提前在對(duì)應(yīng)的數(shù)據(jù)表中多添加一個(gè)字段,充當(dāng)當(dāng)前數(shù)據(jù)的版本標(biāo)識(shí)。這樣每次對(duì)該數(shù)據(jù)庫(kù)該表的這條數(shù)據(jù)執(zhí)行更新時(shí),都會(huì)將該版本標(biāo)識(shí)作為一個(gè)條件,值為上次待更新數(shù)據(jù)中的版本標(biāo)識(shí)的值。

為了每次執(zhí)行更新時(shí)防止重復(fù)更新,確定更新的一定是要更新的內(nèi)容,我們通常都會(huì)添加一個(gè) version 字段記錄當(dāng)前的記錄版本,這樣在更新時(shí)候?qū)⒃撝祹?,那么只要?zhí)行更新操作就能確定一定更新的是某個(gè)對(duì)應(yīng)版本下的信息。

這樣的話,有了 version 的存在,這樣就能保住更新的冪等,多次更新對(duì)結(jié)果不會(huì)產(chǎn)生影響。

你還了解有哪些實(shí)現(xiàn)冪等性操作的方式呢文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-726565.html

到了這里,關(guān)于如何保證分布式情況下的冪等性的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 如何保證用戶重試操作的冪等性

    如何保證用戶重試操作的冪等性

    服務(wù)不穩(wěn)定是一類常態(tài),面對(duì)此類場(chǎng)景恰當(dāng)?shù)膽?yīng)對(duì)策略應(yīng)該是什么?退一步說(shuō),即使我們能夠確保第一方服務(wù)的穩(wěn)定性,我們又應(yīng)該如何面對(duì)網(wǎng)絡(luò)延遲以及掌控以外的不確定性?這都是本篇文章會(huì)談到的內(nèi)容 本文是團(tuán)隊(duì)內(nèi)部分享的文字版,敏感信息已經(jīng)抹去或者重寫。我們通

    2024年02月06日
    瀏覽(23)
  • 【RabbitMQ】RabbitMQ如何確認(rèn)消息被消費(fèi)、以及保證消息的冪等

    【RabbitMQ】RabbitMQ如何確認(rèn)消息被消費(fèi)、以及保證消息的冪等

    目錄 一、如何保證消息被消費(fèi) 二、如何保證消息冪等性 RabbitMQ提供了消息補(bǔ)償機(jī)制來(lái)保證消息被消費(fèi),當(dāng)一條消費(fèi)被發(fā)送后,到達(dá)隊(duì)列后發(fā)給消費(fèi)者。消費(fèi)者消費(fèi)成功后會(huì)給MQ服務(wù)器的隊(duì)列發(fā)送一個(gè)確認(rèn)消息,此時(shí)會(huì)有一個(gè)回調(diào)檢測(cè)服務(wù)監(jiān)聽(tīng)該接收確認(rèn)消息的隊(duì)列,然將消費(fèi)

    2024年02月16日
    瀏覽(24)
  • Springboot 定時(shí)任務(wù),分布式下冪等性如何解決

    Springboot 定時(shí)任務(wù),分布式下冪等性如何解決

    在分布式環(huán)境下,定時(shí)任務(wù)的冪等性問(wèn)題需要考慮多個(gè)節(jié)點(diǎn)之間的數(shù)據(jù)一致性和事務(wù)處理。 一種解決方法是使用分布式鎖來(lái)保證同一時(shí)間只有一個(gè)節(jié)點(diǎn)能夠執(zhí)行該任務(wù)。具體實(shí)現(xiàn)可以使用Redis或Zookeeper等分布式協(xié)調(diào)工具提供的分布式鎖功能。 另一種解決方法是使用消息隊(duì)列來(lái)

    2024年02月11日
    瀏覽(22)
  • 【Redis】4、全局唯一 ID生成、單機(jī)(非分布式)情況下的秒殺和一人一單

    【Redis】4、全局唯一 ID生成、單機(jī)(非分布式)情況下的秒殺和一人一單

    ?? id 字段不是 自增 AUTO_INCREMENT 的 每個(gè)店鋪都可以發(fā)布優(yōu)惠券: 用戶搶購(gòu)的時(shí)候會(huì)生成訂單并保存到 tb_voucher_order 這張表中 如訂單 id 使用數(shù)據(jù)庫(kù)自增 ID 會(huì)出現(xiàn)以下問(wèn)題: ?? id 規(guī)律性太明顯(可能會(huì)被用戶猜測(cè)到優(yōu)惠券的 id) ?? 受單表數(shù)據(jù)量的限制(優(yōu)惠券訂單可能很多

    2024年02月16日
    瀏覽(25)
  • 集群高并發(fā)環(huán)境下如何保證分布式唯一全局ID生成?

    在集群高并發(fā)環(huán)境下保證分布式唯一全局ID生成是一個(gè)具有挑戰(zhàn)性的問(wèn)題。下面筆者將為大家提供幾種常見(jiàn)的解決方案: UUID是一個(gè)128位的全局唯一標(biāo)識(shí)符,它可以在不同的計(jì)算機(jī)和時(shí)間上生成。UUID的生成是基于MAC地址、時(shí)間戳等信息,因此可以保證在分布式環(huán)境下的唯一性

    2024年02月13日
    瀏覽(20)
  • RabbitMQ防止消息重復(fù)消費(fèi)、保證異步消息的冪等性

    一、rabbitmq出現(xiàn)消息重復(fù)的場(chǎng)景 1、消費(fèi)成功,沒(méi)有進(jìn)行ack,這時(shí)?Broker?會(huì)重新發(fā)送 2、不確認(rèn)(unack)或 reject?之后,重新排隊(duì),Broker?會(huì)重新發(fā)送 3、消費(fèi)成功,ack時(shí)宕機(jī),沒(méi)有ack成功,消息由unack變?yōu)閞eady,Broker又重新發(fā)送 4、總的來(lái)說(shuō)就是 Broker?發(fā)送消息后,消費(fèi)端收到消息

    2024年02月13日
    瀏覽(23)
  • SpringBoot整合Redis、以及緩存穿透、緩存雪崩、緩存擊穿的理解分布式情況下如何添加分布式鎖 【續(xù)篇】

    SpringBoot整合Redis、以及緩存穿透、緩存雪崩、緩存擊穿的理解分布式情況下如何添加分布式鎖 【續(xù)篇】

    上一篇實(shí)現(xiàn)了單體應(yīng)用下如何上鎖,這一篇主要說(shuō)明如何在分布式場(chǎng)景下上鎖 上一篇地址:加鎖 需要注意的點(diǎn)是: 在上鎖和釋放鎖的過(guò)程中要保證 原子性操作 核心是上鎖和解鎖的過(guò)程 關(guān)于解鎖使用腳本參考:SET key value [EX seconds] [PX milliseconds] [NX|XX] 3.1 一個(gè)服務(wù)按照多個(gè)端口同時(shí)

    2023年04月10日
    瀏覽(29)
  • 【分布式】: 冪等性和實(shí)現(xiàn)方式

    【分布式】: 冪等性和實(shí)現(xiàn)方式

    冪等(idempotent、idempotence)是一個(gè)數(shù)學(xué)與計(jì)算機(jī)學(xué)概念, 常見(jiàn)于抽象代數(shù)中。在編程中一個(gè)冪等操作的特點(diǎn)是其任意多次執(zhí)行所產(chǎn)生的影響均與一次執(zhí)行的影響相同。冪等函數(shù),或冪等方法,是指可以使用相同參數(shù)重復(fù)執(zhí)行,并能獲得相同結(jié)果的函數(shù)。這些函數(shù)不會(huì)影響系統(tǒng)

    2024年02月08日
    瀏覽(29)
  • 分布式系統(tǒng)的容錯(cuò)性和可用性該如何保證?——云計(jì)算高手的指南

    作者:禪與計(jì)算機(jī)程序設(shè)計(jì)藝術(shù) 云計(jì)算的快速發(fā)展給我們帶來(lái)了巨大的機(jī)遇。不僅如此,云計(jì)算還解決了一些復(fù)雜的問(wèn)題,比如資源共享、彈性伸縮等問(wèn)題。但是,云計(jì)算也引入了新的復(fù)雜性,比如分布式系統(tǒng)的容錯(cuò)性、可用性等問(wèn)題。如果分布式系統(tǒng)不能很好的處理容錯(cuò)性

    2024年01月19日
    瀏覽(20)
  • 分布式接口冪等性設(shè)計(jì)實(shí)現(xiàn)

    分布式接口冪等性設(shè)計(jì)實(shí)現(xiàn)

    面對(duì)分布式架構(gòu)和微服務(wù)復(fù)雜的系統(tǒng)架構(gòu)和網(wǎng)絡(luò)超時(shí)服務(wù)器異常等帶來(lái)的系統(tǒng)穩(wěn)定性問(wèn)題,分布式接口的冪等性設(shè)計(jì)顯得尤為重要。本文簡(jiǎn)要介紹了幾種分布式接口冪等性設(shè)計(jì)實(shí)現(xiàn),包括Token去重機(jī)制、樂(lè)觀鎖機(jī)制、數(shù)據(jù)庫(kù)主鍵和狀態(tài)機(jī)實(shí)現(xiàn)等,以加深理解。 1、分布式接口冪

    2024年02月05日
    瀏覽(47)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包