2.11. データの整合性
分散システム上に存在するデータは、一時的なネットワークの停止やシステム障害、あるいは単純なヒューマンエラーによって生じるエラーなどの影響を受けやすくなっています。このような外部要素については制御できませんが、データの品質に深刻な影響を与える可能性があります。データ破損の影響は、顧客満足度の低下、サービスが利用できなくなるほどのコストのかかるシステムの再構築など多岐にわたります。
Data Grid は ACID(atomic, consistent, isolated, durable) トランザクションを実行すると、キャッシュの状態が一貫していることを確認できます。
トランザクションとは、Data Grid が 1 つの操作として処理する一連の操作のことです。トランザクションのすべての書き込み操作が正常に完了するか、すべてに失敗します。これにより、トランザクションでは、一貫した方法でキャッシュの状態を変更して、読み取りおよび書き込みの履歴を提供するか、キャッシュの状態を全く変更しません。
トランザクションを有効にした時のパフォーマンス上の懸念は主に、データセットの一貫性を高めることと、書き込みスループットを低下させるレイテンシーを増やすこと、この 2 点でバランスを取ることです。
トランザクションを使用した書き込みロック
誤ったロックモードを設定すると、トランザクションのパフォーマンスが低下する可能性があります。Data Grid デプロイメントで、キー間の競合の割合が高いか、引くかにより、適切なロックモードが異なります。
2 つ以上のトランザクションが同じキーに同時に書き込むことがないような、競合率が低いワークロードの場合には、楽観的ロックが最適なパフォーマンスを発揮します。
Data Grid は、トランザクションをコミットする前にキーで書き込みロックを取得します。キーの競合がある場合、ロックの取得にかかる時間が原因でコミットを遅延させる可能性があります。さらに、Data Grid が競合する書き込みを検出すると、トランザクションをロールバックし、アプリケーションによる再試行が必要になり、レイテンシーが長くなります。
競合率の高いワークロードの場合、悲観ロックが最適なパフォーマンスを発揮します。
Data Grid は、アプリケーションがキーにアクセスするときにキーに対する書き込みロックを取得し、他のトランザクションでキーを変更できないようにします。キーはすでにロックされているため、トランザクションのコミットは 1 つのフェーズで完了します。複数のキートランザクションを使用する悲観ロックにより、Data Grid のキーのロック時間が長くなり、書き込みスループットが低下する可能性があります。
読み取りの分離
分離レベルは、REPEATABLE_READ
が指定された楽観的ロックを除き、Data Grid パフォーマンスに関する考慮事項には影響しません。この組み合わせにより、Data Grid は書き込みスキューをチェックして競合を検出するので、トランザクションのコミットフェーズが長くなる可能性があります。また、Data Grid はバージョンメタデータを使用して競合する書き込み操作を検出しますが、これはエントリーごとのメモリー量を増やし、クラスターのネットワークトラフィックを追加で生成する可能性があります。
トランザクションリカバリーおよびパーティション処理
パーティションやその他の問題によりネットワークが不安定になった場合には、Data Grid はトランザクションを in-doubt (疑わしい) とマークできます。このような場合には、Data Grid は、ネットワークの安定化とクラスターが正常な稼働状態に戻されるまで、取得した書き込みロックを保持します。システム管理者が in-doubt (疑わしい) 状態トランザクションを手動で完了させる必要がある場合があります。