OceanBaseデータベースは、ネイティブな2フェーズコミットプロトコルを実装しており、分散トランザクションの原子性を保証します。
2フェーズコミットプロトコルには、コーディネーター(Coordinator)と参加者(Participant)という2つの役割が含まれます。コーディネーターはプロトコル全体の進行を管理し、複数の参加者が最終的に一致した決定に至るようにします。参加者はコーディネーターの要求に応答し、コーディネーターの指示に従ってprepare操作およびcommit/abort操作を実行します。
分散トランザクションのコミットプロセス
従来のデータベースとOceanBaseデータベースの2フェーズコミットのプロセスは、以下の図のとおりです。

PREPAREフェーズ
コーディネーター:コーディネーターはすべての参加者にprepare requestを送信します。
参加者:参加者はprepare requestを受信後、コミットが可能かどうかを判断します。可能であれば、prepareログを永続化し、コーディネーターに対してprepare成功を返します。不可能な場合は、prepare失敗を返します。
COMMITフェーズ
コーディネーター:コーディネーターはすべての参加者からprepare ackを受信した後、COMMIT状態に入り、ユーザーに対してトランザクションのコミット成功を返します。その後、すべての参加者に対してトランザクションのコミット requestを送信します。
参加者:参加者はcommit requestを受信後、リソースを解放して行ロックを解除し、次にcommitログをコミットします。ログの永続化が完了すると、コーディネーターにcommit okメッセージを返信し、最後にトランザクションコンテキストを解放して終了します。