分散式系統中的自主自治計算 - pathelland

banq發表於2021-06-25

本文是作者pathelland二十年分散式經驗分享,其中很多概念與DDD有界上下文對映非常類似,只不過使用了fiefdom而不是domain來表達。
本文介紹了一個稱為fiefdom封地/領地(banq注:類似Domain)的概念 :這是一個自主計算和資料的集合,旨在與不受信任的外部人員合作。這與 拜占庭共識不同, 因為我們並沒有真正跨越這些界限達成共識。
另一個相關的計算元件是emissary使者(banq:類似API ),它被設計為領地信任邊界的一部分,但它不受信任。它在受信任的領地之外執行。使者透過提供一個靠近不受信任的合作伙伴執行的易於使用的介面,使與領地的合作變得更加簡單(banq:上下文之間對映與通訊)。由於使者生成的訊息與封地預期的訊息匹配,因此傳入的工作通常會成功,並且會完成更多的業務。 
透過關聯相關訊息,跨界工作會隨著時間的推移而發生。在使用計算機之前,這是透過具有唯一序列號的紙質表格、表格的多個部分以及隨著時間的推移進行的連續修改來完成的。我們將介紹一個稱為“協作”的抽象(banq:類似領域事件 中國人的術語稱為任務或流水),  來解釋它是如何工作的。與封地和使者一樣,這是一種具有許多可能實現的模式。
這些模式植根於幾個世紀以來幫助公司跨界工作的商業實踐。雖然我 20 年前討論的所有好處仍然適用,但在我們的分散式和複製世界中還有更多方法可以利用這些模式。這篇論文最終是我關於自主計算的許多演講的散文版。  
 

一、簡介
自主計算是指包括獨立的計算機系統,異想天開地命名為 “封地”。封地是獨立控制和管理的。他們不相信外人。這與身份、身份驗證、授權或安全通訊無關。這些都是非常重要的主題,但不是本文所要討論的。這是關於跨信任邊界的訊息流、這些訊息中包含的資料以及如何成功地跨信任邊界完成業務。在此設計模式中,包含單個業務操作的相關訊息集稱為 “協作”。
模式的另一部分在於“ 使者”,另一個異想天開的角色,用於在封地信任邊界之外執行的程式碼,但清楚地瞭解封地的期望。我們將研究此類不信任系統如何互動、如何處理資料以及如何跨界完成工作。  
如果您不信任您的業務合作伙伴,您就不會與他們分享交易。事務不會跨組織使用,因為如果其他組織搞砸了,這可能會鎖定您的資料庫!如果沒有事務,您必須隨時間使用多條訊息。但是,為了完成一項長期執行的業務任務而跨越時間,意味著您必須應對結果的不確定性!反過來,這意味著您必須協調工作的結果。   所有這一切都隱含在不信任之中。
20 多年前最初討論時,封地被認為是一個單一的資料庫,由兩層應用程式包圍和保護。隨著時間的推移,我看到了執行在數十萬臺計算機上提供大規模的封地的例子。自主計算模式與規模大小無關。相反,它側重於跨多個互動工作以及使用我們稱之為協作的抽象將後來的訊息與較早的訊息相關聯的重要性。協作包括業務特定的訊息序列、它們如何互動以及如何解決它們。
在本文中,我將介紹 領地、協作 和 使者, 並展示計算和我們日常生活中的例子。我檢查了使者如何  在信任邊界之外工作並且不受信任,只是方便。本文探討了跨不同領地的工作如何  啟動、長時間執行並最終完成。 
最後,我們重申信任和共享工作基於合作和合作夥伴之間共享的資料。
 

領地、協作和使者
讓我們介紹在我稱之為Autonomous Computing的常見模式中看到的一些概念 。

Fiefdom領地/封地 是一個英文單詞,表示擁有獨立領導、規則和控制範圍的莊園。從歷史上看,這包括公國、男爵領或其他獨立的法律領域。每個封地都有自己的習俗、法律和做事方式。它在很大程度上獨立於其他地方。
一個 使者 是有代表性的。作為外交代表執行特別任務的人。與大使不同,使者沒有權威。他們只能玩得很好,舔狗並試圖緩和關係。
隨著時間的推移,協作支援訊息傳遞。就像在計算機之前賦予業務權力的紙質表格一樣,當他們來回傳送訊息時,協作會被使者和領地修改。除了將相關訊息聯絡在一起之外,它們還提供了一種將領地或使者內的工作與支援合作業務工作的長期執行的內部狀態聯絡起來的方法。
 

領地和自主計算
在封地中完成工作的唯一方法是傳送訊息。每個領地都有它接受的訊息和合作夥伴傳送工作的具體要求。

當我去銀行的 ATM 機提取現金時,它只允許我做幾件事。我可以提取現金、存入支票、轉賬和檢視我的餘額。所有試圖透過 JDBC 連線到銀行後端資料庫的嘗試都失敗了!就好像我的銀行不信任我一樣!當一方不信任另一方時,我們如何合作?當雙方都不信任對方時怎麼辦?
這就是在領地工作的感覺。一個領地可以是計算軟體和硬體,也可以是一群試圖在沒有計算機的情況下一起做生意的人。  

  • 向領地請求服務

領地定義了自己的工作規則。如果您想要現金,請輸入您的 ATM 卡和您的 PIN 碼。如果您想在我的大型商店的貨架上銷售您的產品,請向我傳送以下描述產品的電子訊息並請求我的許可。通常,互動的形狀和描述由領地定義。
有時,多個領地協同工作。總的來說,關係中經濟影響最大的封地定義了要使用的協議和訊息。
  • 領地內的私人資料

封地內封裝的是私有資料。這是內部的,很少與外部人員共享。我的銀行知道我的賬戶和他們的餘額。關於您的帳戶的資訊不是我的。哎呀,除了必要之外,它並沒有告訴我關於我的銀行賬戶的資訊。
封裝在封地內的私有資料可能有多種形式。它包含了封地最寶貴的思想和商業知識。它是內部的,應該保持內部。
  • 交易和領地

跨界交易意味著跨界信任。經典資料庫事務需要協調,並且可能會鎖定等待事務結果的資料記錄。作為一個不信任的領地,我不會鎖定等待你的資料庫記錄!  
沒有信任,我們就沒有分散式事務。每個領地都在其腹部使用資料庫事務。它不可能與敲敲城堡大門的某個不法之徒的商業夥伴共享交易。 
領地 是一種設計模式,用於跨邊界跨信任的長期互動 。隨著時間的推移,工作與一系列相關訊息一起發生,以執行協作工作。幾個世紀以前是這樣,今天也是這樣。
 

長時間工作的協作
一個 協作 是一組訊息的流入和流出單個長時間執行的業務操作的封地的抽象。這不是一個新的想法。  
1960 年代我還是個孩子的時候,我們的日常生活中還沒有電腦。當然,大公司將它們放在密室中,而政府和軍隊則擁有大型主機。我們每天都沒有與電腦互動。相反,我們有紙。在購物、去醫生辦公室或修理東西時,您填寫控制活動的表格。我清楚地記得完成某件事所需的多部分和多顏色的表格。  
這些表格中的每一個都預先印有右上角的序列號。當我的父母填寫完 Part-1 時,彩色表格的封底被撕掉並交還給他們。其餘的頁面儲存在商店或維修店供內部使用。不同的頁面(具有獨特的顏色)儲存在部門內,因此每個參與者都有一個記錄。這些表格將業務內部部門的工作聯絡在一起,並將其與客戶聯絡起來。
後頁的第二個是前臺。它被撕下並按序列號歸檔到檔案櫃中,表格的其餘部分進入發件箱,路由到企業內部部門。他們做了一些工作,填寫了第 2 部分,撕下了表格的封底,然後將表格寄出。前臺的資料夾是按照表格的編號來組織的。當工作完成並且我的父母拿起購買的、乾洗的或修理過的物品時,紙質表格按其序列號歸檔到“完成作品”檔案櫃中。
每個多部分的表格形式都是一個“ 協作”:它捕獲請求,跟蹤正在進行的工作,並確保在紙質表單退回到“已完成的工作”資料夾之前完成所有工作。
 

使者:幫助與領地的互動
我記得 1979 年買了我的第一個家,一個很小的破房子,對於一個六口之家來說太小了。為了獲得抵押貸款,我們去找了抵押貸款經紀人。他們得到報酬是為了友善並讓借款人更容易。
該抵押貸款經紀人未受僱於任何銀行。通常,他們會幫助您從眾多銀行之一獲得貸款。他們有關於各種銀行的資訊,包括利率表、所需的資格,以及許多對於 23 歲的首次購房者來說幾乎無法理解的東西。
選擇銀行後,我們使用抵押貸款經紀人辦公桌中快取的參考資料填寫了大量表格。當這些東西被提交給銀行時,他們 並不 信任它。銀行下令進行信用評級和就業核查。表格中的所有內容都由不信任的銀行檢查。銀行發現這很方便,因為抵押貸款經紀人知道如何正確填寫表格,從而使銀行的工作更輕鬆。
抵押貸款經紀人是現實生活中的 使者。他們不受銀行信任,但做了很多有用的工作。與某些使者不同,抵押貸款經紀人可以成為許多不同銀行的前端。
在計算系統中,我們看到了使者設計模式的許多用途 。在大型電子商務網站上購物是使用使者作為前端完成的。在這種情況下,使用數千或數萬臺伺服器來實現使者,這些伺服器支援購物車、產品目錄、產品影像、推薦、評論等等。購物者按下“提交”之前的一切都是使者模式。推送提交後,請求將傳送到後端系統進行付款處理、庫存檢查、發貨安排等。 
複雜的分散式後端處理實現了電子商務領域。事實上,大型電子商務後端可能會有許多內部領地。
使者可能有參考資料,使者可能具有重要的 每個使用者狀態,可以 捕獲您作為借款人的能力、包含建議購買的購物車或您在手機上檢視已下載電子郵件的檢視。
使者Emissaries 是一種設計模式,可以更輕鬆地與封地合作。他們不受信任,在他們所代表的領地之外執行,並專門簡化與領地的多訊息協作。
該模式的關鍵來自於如何在使者和它旨在支援的領地之間的多訊息協作中使用資料。
 

跨信任邊界重新思考資料
在每種情況下,領地之外的資料都使用識別符號將它們編織在一起:

  • 協作 的訊息與識別符號(例如,訂單 ID)相關聯。 
  • 參考資料 可能包含由一個或多個識別符號關聯的產品、價格和選項。電子郵件是使用內部唯一的訊息 ID 編織在一起的。在大多數情況下,這是隨著時間的推移進行版本控制的。
  • 單個使用者資料 可以將正在進行的業務工作與主動協作和參考資料相關聯。購物車是單使用者資料。

在領地內部,識別符號將協作和正在進行的工作與內部狀態聯絡起來。
在領地內部和外部,這些識別符號可以儲存在關聯式資料庫中,也可以儲存在其他一些持久儲存中。它們必須經久耐用,以確保它們為與相關協作的下一次互動做好準備。
 

領地內工作
工作在領地內被分解為幾個不同的角色。  

  • 活動(事件) 是資料和計算,用於跟蹤領地的單個協作工作或單個協作的部分工作。
  • 資源 是用於管理跨多個活動協調的共享事物的程式碼和資料,例如庫存中的小部件或裝運所需的卡車上的空間。  

這些模式支援外部協作,並且經常使用許多內部協作組合而成。  
當傳入的協作進入一個領地時,會分配一個內部資料結構來跟蹤協作的訊息、由這些訊息激發的工作以及工作的完成情況。這些 活動資料結構 由領地特定活動程式碼封裝 。
推進這項活動的工作受到以下任何一項的刺激:
  •  到達外部協作的外部訊息。
  •  用於推動公司內部工作的有關內部協作的內部訊息。
  •  將活動推進到新狀態並可能採取新行動的計時器。

領地建立機制來管理其活動的工作流程。有很多方法可以使這種模式起作用。在這裡,我們專注於模式及其含義。
活動不會永遠存在。  它們的生命週期由與協作夥伴成功完成業務所需的工作流驅動。它們是為響應協作訊息而建立的,存在一段時間(可能是幾秒、幾小時或幾個月),退出為只讀狀態,存檔並最終在幾年後刪除。
使用 諸如庫存、卡車運輸、預訂單次航班的乘客、預訂特定夜晚的特大號無煙房、每位客戶一個月的可計費美元等資源來管理有形事物 。所有這些都是資源(banq:實體)的例子。
通常,資源及其周圍的 資源管理者 必須處理不確定性。可以為客戶分配資源,但需要在發貨前付款。如果進站卡車延誤,卡車上的預定空間將被閒置。發貨的資源經理可以在發貨卡車上放置一個等待箱,但前提是控制等待箱的活動確認了更改。
資源經理處理時間、傳入資源、傳出資源、超額供應(以確保客戶滿意)或超額預訂(以管理費用)。他們在許多競爭活動中應對不斷變化的世界。有時,由於另一項活動的要求,他們無法履行一項活動的義務。  
每個資源管理器內部都有一些小活動。這些跟蹤單個分配的資源(或待處理的資源)並關聯回與外部協作相關的更大規模的活動。反過來,這些又會影響為其他活動分配寶貴的資源。
許多合作及其資訊將這些許多活動和資源聯絡起來。這可以提供一種統一的方式來喚醒活動、資源和協作,以響應傳入的事件或計時器。 
 

結論:信任、協作和資料
自主計算是一種商業工作模式,使用協作來連線領地及其使者。  
這種模式已經基於紙張形式使用了幾個世紀。  
我們如何讓人們在使用計算機解決業務問題時更容易遵循這種模式?我們應該幫助他們更多地專注於他們的業務,而不是把東西放在一起!

相關文章