1. 程式人生 > >穩定性三十六計-冪等設計

穩定性三十六計-冪等設計

引子

群裡發了一個總共1千元的拼手氣紅包,共10個。靜兒點進去,額,搶到了0.05元。這個不甘心啊。退出來重新打開了這個紅包,你猜怎樣?顯示我搶到了0.05元! 這就是冪等(idempotence),不管多少次請求某一個資源,對資源都具有相同的影響。冪等性是系統的介面對外一種承諾,承諾只要呼叫介面成功,外部多次呼叫對系統只產生一次副作用。  

為什麼要冪等

世界上最遙遠的距離是我終於鼓起勇氣,對著馬路對面的你大喊:“你願意娶我嗎?”我看到你面帶燦爛的笑容,正回答的時候……一輛大卡車駛過,你的回答我沒有聽見。 因各種不可抗因素產生的沒有收到響應,一個簡單有效的方法就是重試。被重試的介面必須是冪等的。 冪等性是分散式系統設計中的一個重要概念,對超時處理、系統恢復等具有重要意義。  

保證冪等的手段

保證冪等需要理清楚兩件事情:冪等條件和期望結果。 大家可能聽說過保證冪等的手段有token令牌、分散式鎖、去重表、資料庫唯一索引等。這些所謂的冪等手段實際上防重手段。防重本質是防止一個相同的請求被當成多個不同的請求來處理。冪等的條件是知道這是一個相同的請求。防重和冪等本質上是兩個不同的階段。  

狀態機冪等

在支付場景中,建立了一個支付訂單,發起了一個支付請求,這個訂單不論多少次重複請求,都應該保證最多隻扣款一次。即 相同支付訂單ID(冪等條件) —> 最多一次扣款(期望結果) 為了實現這個目標,可以考慮使用有限狀態機。 有限狀態機(Finite-state machine FSM),又稱有限狀態自動機,簡稱狀態機,是表示有限個狀態以及在這些狀態之間的轉移和動作等行為的數學模型。用於處理複雜的狀態轉換。 在這個支付的例子中,為了化簡,不考慮退款、取消訂單等複雜的狀態,只考慮未支付和已支付兩種狀態之間的轉換。

相關推薦

穩定性-設計

引子 群裡發了一個總共1千元的拼手氣紅包,共10個。靜兒點進去,額,搶到了0.05元。這個不甘心啊。退出來重新打開了這個紅包,你猜怎樣?顯示我搶到了0.05元! 這就是冪等(idempotence),不管多少次請求某一個資源,對資源都具有相同的影響。冪等性是系統的介面對外一種承諾,承諾只要呼叫介

穩定性-歷史記錄

引子 半夜三點,睡夢中被一陣沒人接聽誓不罷休的電話鈴吵醒。睡眼惺忪的接聽了電話,電話那頭傳來了不用聽清任何人類語言就能感受的焦急。讓我趕快開啟電腦,說服務整個不工作了! 開啟監控看到執行緒池被打滿。本著“先恢復現場再排查原因”的基本原則,重啟並擴容了一倍的伺服器。服務又正常了。

穩定性-超時處理

引子 分散式系統呼叫的三態 在傳統的單機系統中,呼叫一個函式,要麼返回成功,要麼返回失敗。這就是兩態系統(2-state system)。 在分散式系統中,由於系統是分佈在不同機器上的。還可能有一種狀態叫:超時。成功、失敗和超時是分散式系統呼叫的三態。

對誤操作說“NO”,DevOps 之日常運維

作者介紹: 樑定安 騰訊織雲產品負責人,運營技術總監。十餘年網際網路運維從業經驗,高效運維社群金牌講師、復旦大學客座講師、騰訊雲佈道師、DevOps專家。親歷企業的伺服器規模從數十臺到數萬臺的運維工作,對於構建自動化運維體系和監控質量體系有著豐富的理論與實踐經驗。目前專注於騰訊織雲運維和DevO

[Linux|DBA]運維

linux 大神 linu -- 分享圖片 運維 記得 lock image 這裏是騰訊兩位大神梁定安、周小軍總記得運維DBA三十六計-- [Linux|DBA]運維三十六計

有點累了?不如看看兵法

聽說第一段都要有個”序“: 因為跟物件是異地(她在帝都,我在石家莊(年後去帝都,希望可以的話老哥們給小弟個機會哇,在此先謝過老哥。)),所以只能在週末去陪陪她,上週末剛從帝都歸來。奈何上火車之前手機沒電了,這該如何是好?不慌,火車站候車室內我記得是有賣書籍的,

兵法第二-圍魏救趙。

原文 共敵不如分敵,敵陽不如敵陰。 拆開來看 共敵不如分敵: 攻打集中的敵人,不如設法分散它而後再打。 敵陽不如敵陰: 先打擊氣勢旺盛的敵人,不如先打擊敵人虛弱的地方。 小弟認為最簡單得釋意應為:

之趁火打劫(第五)

【古兵法原文】  敵之害大,就勢取利。剛決柔也。【原文今譯】  敵人遭到嚴重危機之時,就應乘機獲取利益。因為剛強取決於柔弱。【出處原文】  “有所謂趁火打劫者,臨時之盜也。遇有人家失火,即約一二伴侶,飛奔入內,見物即取,或持之,或負之,或扛之。主人加以訶斥,則日:將為汝寄頓於

之敗戰

                敗戰計故名思意,是在敗勢中使用的計謀。共六計:美人計、空城計、反奸計、苦肉計、連環計和走為上。第三十一計  美人計    兵強者, 攻其將;兵智者,伐其情①。將弱 兵頹,其勢自萎。利用禦寇,順相保也②。    ①兵強者,攻其將;兵智者,伐其情。句意:對兵力強大的敵人,就攻擊他的

之敵戰

敵戰計是當敵我處於勢均力敵態勢時使用的計謀。此篇共有六計,它們是無中生有、暗渡陳倉、隔岸觀火、笑裡藏刀、李代桃僵、順手牽羊。第七計 無中生有    誑也,非誑也,實其所誑也①。少陰、太陰、太陽②。    ①誑也,非誑也,實其所誑也:誑,欺詐、誑騙。實,實在,真實,此處作意動詞

之勝戰

第一計 瞞天過海    備周則意怠①;常見則不疑。陰在陽之內,不在陽之對②。太 ③陽,太陰。    ①備周則意怠:防備十分周密,往往容易讓人鬥志鬆懈,削弱戰力。    ②陰在陽之內,不在陽之對:陰陽是我國古代傳統哲學和文化思想的基點,其思想籠罩著大千宇宙、細末塵埃,並影響到意識形態的一切領域。陰陽學說是把宇宙

之攻戰

這是三十六計的第三篇,共六個計謀,它們是打草驚蛇、借屍還魂、調虎離山、欲擒故縱、拋磚引玉和擒賊擒王。攻戰計是通常說是在進攻態勢時使用的計謀。第十三計 打草驚蛇    疑以叩實①,察而後動;復者②,陰之媒也③。    ①疑以叩實:叩,問,查究。意為發現了疑點就應 當考實查究清楚

商場——第17 “拋磚引玉”

第17計 “拋磚引玉”     一、原文和出處   【古兵法原文】   類以誘之,擊蒙也。   【原文今譯】   用類似的東西去引誘敵人,從而打擊被矇騙的敵人。   【出處今譯】   拋磚引玉故事出自唐代進士常建《常建集·題破山寺後禪院》。常建十分仰慕趙嘏的詩,便想

Redis原始碼分析()--- Redis中的11大優秀設計

            堅持了一個月左右的時間,從最開始的對Redis的程式碼做分類,從struct結構體分析開始,到最後分析main主程式結束,中間,各大模組的程式碼逐個擊破,學習,總之,收穫了非常多,好久沒有這麼久的耐心把一個框架學透,學習一個框架,會用那只是小小的一部

Java經典編程題50道之

nbsp 移動 編程 move main new for i++ java 有n個整數,使其前面各數順序向後移m個位置,最後m個數變成最前面的m個數。 public class Example36 { public static void main(String[]

AGG第課 gsv_text_outline 渲染環繞的字符

text gsv outline agg::rendering_buffer &rbuf = rbuf_window(); agg::pixfmt_bgr24 pixf(rbuf); typedef agg::renderer_base<agg::pixfmt_bgr24>

笨辦法學Python(

有時 就會 ast 區分 對待 似的 pre 並且 寫代碼 習題 36: 設計和調試 現在你已經學會了“if 語句”,我將給你一些使用“for 循環”和“while 循環”的規則,一面你日後碰到麻煩。我還會教你一些調試的小技巧,以便你能發現自己程序的問題。最後,你將

JMeter學習()發送HTTPS請求(轉載)

無法 strong 控制 json localhost 閱讀 amp local cat  Jmeter一般來說是壓力測試的利器,最近想嘗試jmeter和BeanShell進行接口測試。由於在雲閱讀接口測試的過程中需要進行登錄操作,而登錄請求是HTTPS協議。這就需要對

mysql 第篇文章~mysql慢日誌方案解讀1

日誌 iges add 代碼 bytes 周期 缺省 port 同學 一 慢日誌的相關參數 long_query_time : 設定慢查詢的閥值,超出次設定值的SQL即被記錄到慢查詢日誌,缺省值為1s log_slow_queries :1/0

進制加法

class add clas char static res solution while private public class Solution { /** * num1 num2 為兩個三十六進制的數,計算相加結果 * @param