分散式事務有自己的架構語言嗎?TLA +簡介

banq發表於2019-04-15

TLA +是一種正式的規範語言。它是設計系統和演算法的工具,然後以程式設計方式驗證這些系統沒有嚴重錯誤。它是相當於藍圖的軟體。通常用於設計分散式事務系統,亞馬遜等公司普遍使用該語言規範設計他們的分散式事務中介軟體基礎設施。是分散式架構設計語言。

我為什麼要用它?

這是一個簡單的TLA +規範,代表人們交易獨特的專案。你能找到這個bug嗎?

People == {"alice", "bob"}
Items == {"ore", "sheep", "brick"}
(* --algorithm trade
variable owner_of \in [Items -> People]

process giveitem \in 1..3 \* up to three possible trades made
variables item \in Items, 
          owner = owner_of[item], 
          to \in People,
          origin_of_trade \in People
begin Give:
    if origin_of_trade = owner then 
        owner_of[item] := to;
    end if;
end process;
end algorithm; *)

這是一個交易案例,為了防止金融詐騙,我們應該檢查Item條目的所有者是否是交易者?但是如果我們執行模型檢查器,我們發現這段程式碼不能完成我們的目標:Alice可以與自己進行專案交易,並且在該過程完成執行之前,通過並行交易,將相同專案交給Bob。然後第一筆交易結算完成,Alice收回專案。我們的演算法在競爭條件下失敗,我們通過TLA+知道了這一點,因為TLA +探索了每個可能的狀態和時間線。

有幾種不同的方法來解決這個問題。但我們的解決方案是否適用於兩個以上的人?在TLA +中,檢查就如同People == {"alice", "bob", "eve"}一樣簡單;如果我們可以一次交易多個專案,它會起作用嗎?variable items \in SUBSET Items;如果有多隻綿羊,礦石和磚塊怎麼辦?amount_owned = [People \X Items -> 0..5;。如果三個人與其他每個玩家交易1個礦石和1個羊,而Eve和Alice交易 0磚那會怎麼樣?如果它處於可能的狀態空間,TLA +將檢查它。

難以使用嗎?

形式方法因其難以達到關鍵系統的價值而聞名。這意味著所有指南都是在讀者正在研究關鍵系統的情況下編寫的,他們必須在內部和外部瞭解TLA +以確保他們的系統不會意外殺死人。

如果對你來說一個危險的錯誤是“有人死了”,那麼是的,形式方法很難。如果一個危險的錯誤是“沒有人死,但我們的客戶真的很生氣,我們不得不花兩週的時間追蹤並修復錯誤”,那麼你需要的小部分TLA +實際上很容易學習。只需找到一個適合初學者的指南,你就可以了。

哪裡是初學者友好指南?

你好!本指南以簡單實用的方式介紹了TLA +的基礎知識。如果您想從頭開始,您可以瞭解我們將在此處介紹的內容

相關文章