單一更新佇列
使用單一執行緒非同步處理請求,以維持順序,而不會阻擋呼叫方。
問題
當狀態需要由多個並行用戶端更新時,我們需要安全地一次更新一個變更。考慮 寫入前記錄 模式的範例。即使有幾個並行用戶端嘗試寫入,我們也需要一次處理一個項目。一般來說,鎖定用於防止並行修改。但是,如果執行的任務很耗時,例如寫入檔案,則在任務完成之前阻擋所有其他呼叫執行緒可能會嚴重影響整體系統的吞吐量和延遲。在仍然保證一次執行一個的同時,有效利用運算資源非常重要。
解決方案
實作一個工作佇列和一個從佇列中工作的單一執行緒。多個並行用戶端可以將狀態變更提交到佇列,但只有一個執行緒處理狀態變更。這可以使用 Golang 等語言中的 goroutine 和通道自然地實作。
有關更多詳細資訊,請參閱 oreilly.com 上線上電子書的 第 13 章
此模式是 分散式系統模式 的一部分
2023 年 11 月 23 日