轉賬問題是屬於業務問題還是屬於技術問題?

發表於2021-04-23
將鈔票在兩個賬戶之間轉移屬於業務問題還是技術問題?如果屬於業務問題,就使用DDD等方式去解決,如果使用技術問題,就使用分散式事務元件或中介軟體或資料庫去解決。

但是很多人預設這是一個技術問題,可以使用技術上的事務機制確保一個賬戶減去的錢等同於另外一個賬戶增加的錢。本文重點不是討論誰對誰錯,而是討論大家忽視的邊界劃分問題,在你採購分散式事務時你有沒有倒問自己,這種用技術解決問題的解決方案是不是違背一條褲子適合所有人穿的人月神話?

賬戶中金額轉賬無疑屬於業務問題,但是在追求效率的今天,手工銀行轉賬時代需要通過記賬方式實現,而今有了大型資料庫則成為非常快速瞬間的事情。但是且慢,非常快速是如何快速?是一秒之內還是一眨眼?一眨眼是多少秒?這個賬戶前一秒減去一萬元,那個賬戶後一秒就增加一萬元?這種實時一致性背後有什麼機制?

CAP機制,兩個賬戶金額變動的延遲越小,說明一致性越高,但是有時我們真的需要這種一秒或幾毫秒之內的高實時一致性嗎?這還會金額詐騙提供方便了呢!

所有這些考量都要取決於業務上下文,實際上現實中也不存在瞬間轉賬的場景需求。這會為洗錢監控帶來不便。

因此,如果純粹從技術角度通過分散式事務中介軟體或資料庫來解決轉賬問題,就陷入技術至上的誤區,這些技術至上的人會推崇分散式事務,而認為DDD等業務分析設計方式是屠龍寶刀,實際上相反,分散式事務才可能最是屠龍寶刀,神話一樣存在,但是沒有使用價值和場景。

當然,這裡不想陷入演算法技術和業務解決方案的無休止爭論中,這是長期兩種思維模型而已。

那麼使用業務方法如何解決轉賬問題?這裡也不詳細討論,主要從領域事件和事件溯源角度去考慮,也有使用區塊鏈這種方式,為什麼我說區塊鏈會摧毀中心化的分散式事務元件技術?因為現有分散式事務機制無論如何分佈,都是基於一個信任中心下的分佈,不是真正基於不信任的分散,方向完全不同。

江山易改,思維難移,本文目的無非是如果你遭遇轉賬之類問題,首先業務戰略高度去想想,而不是被神話技術忽悠主導。

相關:

分散式事務可能是個偽概念

相關文章