Version: Next

最小競爭資源 (Minimal Competing Resources)

最小競爭資源在使用 Claptrap 框架時重要的一個概念。理解此概念有助於開發者更好的設計 Claptrap 的 State ,避免錯誤的設計。

什麼是最小競爭資源#

類比多線程程式設計中 「資源競爭」 的概念,這裡提出在業務系統中的 「最小競爭資源」 概念。借助這個概念可以很簡單的找到如何應用 Newbe.Claptrap 的設計點。

例如在電商搶購的例子中,每個商品都是一個 「最小競爭資源」。注意,這裡不是說,所有商品是一個 「最小競爭資源」。因為,如果對一萬個商品進行編號,那麼搶購一號商品和二號商品,本身其實不存在競爭關係。因此,每個商品都是一個最小競爭資源。

這裡還有一些可用的例子:

  • 在一個只允許單端登錄的業務系統中,一個使用者的登錄票據就是最小競爭資源
  • 在一個配置系統中,每個配置項都是最小競爭資源
  • 在一個股票交易市場中,每個買單或者賣單都是最小競爭資源

在有的場景中,最小競爭資源也被稱為"最小併發單元(Minimal Concurrent Unit)"

Claptrap 的 State 至少應該大於等於 「最小競爭資源」 的範圍#

結合電商搶購的例子,如果所有商品設計在同一個 Claptrap 的 State 中(大於最小競爭資源)。那麼,不同用戶購買商品就會相互影響,因為,Claptrap 基於的 Actor 模式是排隊處理請求的。也就是說,假設每個商品需要處理 10ms,那麼最快也需要 10000 * 10 ms 來處理所有的購買請求。但如果每個商品都進行編號,每個商品設計為單獨的 Claptrap 的 State。那麼由於他們是互不相關的。賣掉所有商品,理論上就只需要 10ms。

故而容易得出,如果 Claptrap 的 State 大於最小競爭資源的範圍,系統不會有正確性的問題,但可能有一些性能損失。 另外,如果 Claptrap 的 State 小於最小競爭資源的範圍,Claptrap 間的關係將會變得難以處理,存在風險。因為這就相當於將一個最小競爭資源拆分為多個部分,而最小競爭資源通常來說需要在一個事務中一併處理,這也就又回到了分散式中非常常見的分散式事務的問題,難以處理。