無交易
2007 年 3 月 18 日
幾年前,我與在 eBay 工作的幾位朋友聊天。了解人們在高流量網站上使用的技術總是很令人感興趣,但或許最有趣的八卦之一是 eBay 幾乎從不使用資料庫交易。
對大多數人來說,進入無交易環境會相當震驚。使用交易是使用資料庫時非常被接受的一部分。包括我在內的許多人將交易視為資料庫提供給您的關鍵優勢之一。
不使用交易的理由是,它們會損害 eBay 處理的規模效能。由於 eBay 將其資料大量分割成許多、許多的實體資料庫,這個效應會更加惡化。因此,使用交易將表示使用分散式交易,這是一件常見的警示事項。
這種大量分割,以及資料庫在效能問題中的核心角色,意味著 eBay 沒有使用許多其他資料庫功能。參考完整性和排序在應用程式程式碼中完成。幾乎沒有觸發器或儲存程序。
我對無交易消息的立即後續行動是詢問對應用程式程式設計師的後果,特別是對無交易的整體感覺。回覆是起初感覺很奇怪,但最後並非什麼大不了的事 - 遠比您想像的還要小問題。您必須注意提交順序,先提交較重要的提交。在每次提交時,您都必須檢查是否成功,並決定如果失敗該怎麼辦。
這種程式設計風格令我著迷,但由於我是在悄悄地被告知,我不會廣泛地討論它。現在我可以了,因為 丹·普里切特 本週在 QCon 上發表了一個引人入勝的 演講,其中包括這個方面,介紹了 eBay 的架構。(他也 在一次採訪中談到了這個,還有一個有用的 PDF 資訊簡報。)
我想進一步了解這種方式中不使用交易的程式設計細節。除了思考替代方案總是有價值之外,不使用交易的情況也比許多人想像的更常見。常見的情況是,多步驟的業務流程包含多個資源,這些資源需要長時間執行的分散式交易,或者資源不支援交易。
我們不應該過度解讀這一點。沒有人主張我們應該從工具包中移除交易。我不知道 eBay 的足夠細節,無法判斷避免交易是否即使對他們來說也是正確的方法。但 eBay 的例子表明,不使用交易遠比許多人想像的容易得多。