2フェーズコミットで実装された分散トランザクションに関係するすべてのデータベースが、コミットの準備ができており、必要なロックを持っていることを示しているとします。コーディネーターはコミットするように信号を送り、すべてのデータベースがトランザクションの一部を実行しますが、プログラミングの監視がその可能性を考慮しなかった結果、1つのSQLデータベースでゼロ除算エラーが発生します。コーディネーターはすでに全員にコミットを通知しているので、ゼロ除算の結果として何が起こるでしょうか?
質問する
1139 次
1 に答える
7
通常、2番目のコミットフェーズには、失敗する可能性のあるユーザーコードは含まれていません。参加しているリソースマネージャーは、障害が発生しないことを保証する必要があります。この保証に違反した場合、プロトコルによって保証を提供することはできません。
2フェーズコミットは、二人の将軍問題を解決しようとします。この問題に対する完全な解決策はありません。TPCは概算です。
TPCが失敗する可能性のある別の方法は、ネットワークパーティションの場合です。一部のリソースマネージャーは最終コミットを実行する場合がありますが、一部のリソースマネージャーはそのメッセージを受信しない場合があります。繰り返しますが、この問題は解決できません。再試行でもそれを解決することはできません。
実世界の条件下でこの問題を引き起こすこともできます。ストレステストに参加しているすべてのノードを実行し、任意のポイントでネットワークケーブルを引っ張ります。一部のコミットメッセージが非常に不便な時間で失われたため、分散データベースに一貫性がなくなる可能性が高くなります。
于 2012-06-23T20:19:00.403 に答える