トランザクションレス
2007年3月18日
数年前、私はeBayで働いていた友人2人に話を聞きました。大規模サイトで使用されているテクニックについて知るのは常に興味深いものですが、おそらく最も興味深い情報の1つは、eBayはほとんどデータベーストランザクションを使用しないというものでした。
ほとんどの人にとって、トランザクションレス環境に来るのはかなりの衝撃です。トランザクションの使用は、データベースを使用した作業では非常に広く受け入れられている部分です。私を含め多くの人が、トランザクションをデータベースから得られる主なメリットの1つと見なしています。
トランザクションを使用しない理由は、eBayが扱うような規模ではパフォーマンスが低下するというものでした。この影響は、eBayがそのデータを非常に多くの物理データベースにパーティション化しているという事実によって悪化しています。その結果、トランザクションを使用することは、警戒すべき一般的なことである分散トランザクションを使用することになります。
この重いパーティション化とパフォーマンスの問題におけるデータベースの中心的な役割により、eBayは他の多くのデータベース機能を使用しません。参照整合性とソートは、アプリケーションコードで実行されます。トリガーやストアドプロシージャはほとんどありません。
トランザクションレスのニュースに対する私のすぐのフォローアップは、アプリケーションプログラマー、特にトランザクションレスに関する全体的な感覚にどのような影響があったかを尋ねるものでした。最初は奇妙でしたが、結局は大したことではなかったという回答でした。想像するよりはるかに問題はありませんでした。コミットの順序に注意する必要があり、より重要なコミットを最初にコミットする必要があります。各コミット時に、成功したことを確認し、失敗した場合の対処法を決定する必要があります。
このスタイルのプログラミングは私を魅了しましたが、ひっそりと聞かされたので、それ以上広く話すことはありませんでした。今話すことができます。なぜならDan Pritchettが今週のQConでeBayのアーキテクチャについて、この側面を含む魅力的な講演を行ったからです。(彼はまたインタビューでこれについて語りました。また、役立つpdf info-deckがあります。)
この種の方法でトランザクションなしでプログラミングの詳細についてもっと知りたいです。常に代替手段について考える価値があるという事実とは別に、トランザクションレスは多くの人が考えるよりも一般的であるという事実もあります。長期実行の分散トランザクションが必要になるか、トランザクションをサポートしていないリソースなどを持つ、複数リソースを使用した複数ステップのビジネスプロセスを持つことは一般的です。
私たちは、これをあまり重視すべきではありません。ツールキットからトランザクションを引き抜くべきだと主張する人はいません。eBayの詳細については十分に把握していないため、トランザクションを避けることがeBayにとっても正しいアプローチであるかどうかを判断できません。しかし、eBayの例は、トランザクションなしで生活することが多くの人が考えるよりもはるかに不可能ではないことを示唆しています。