AWS RDS クロスリージョンレプリケーションによるマスター DB レイテンシ

AWS RDS クロスリージョンレプリケーションによるマスター DB レイテンシ

私のアプリは 3 つのリージョン (EU、AP、US) にセットアップされており、マスター MySQL RDS は eu-west-1 にあり、読み取りレプリカは他のリージョンにあります。

これは読み取りクエリには非常に有効で、リージョン固有のアプリはローカルの読み取りレプリカ RDS に非常に速く接続しますが、アプリが書き込みクエリを実行する必要がある場合は、eu-west-1 のマスター DB に接続する必要があります。

US または AP からマスター DB に書き込む場合、レイテンシが非常に大きくなり、挿入が完了するまでに通常 2.5 秒ほどかかります。

これを克服する方法に関する情報を見つけるのに本当に苦労しています。Aurora はグローバル データベースのフォーラムやチュートリアルでよく取り上げられますが、インスタンス タイプのレプリケーションが必要で、db.r5 が最小値であるため、複数のインスタンスを実行するとすぐに非常に高価になります。

マスター DB へのリージョン間の書き込みが遅いというこの問題に直面した人はいますか? VPC ピアリングはこれを高速化するのに役立ちますか?

答え1

これは完全な回答ではなく、いくつかの考えやコメント欄に収まらない質問です。反対票を投じたい衝動を抑えてください :)

VPCピアリングは間違いなく試してみる価値がある。トラフィックはAWSバックボーン上に留まるこれにより、レイテンシが少し減少するはずです。どの程度役立つかはわかりません。これら 3 つのエリアは 200 ~ 300 ミリ秒の ping 間隔で離れているため、常に遅延が発生します。

クライアントと DB 間の会話は、1 つの挿入に対して複数のリクエスト (接続の作成、特定の DB への接続、挿入、コミット、クローズなど) であると思われます。その場合、レイテンシの短縮は役立ちますが、いくつかの手順を省略することの方が重要です。接続プールを使用しているため、接続がすでに開いていますか? VPC ピアリングと一般的な最適化は、以下のいずれのアイデアよりも優れたソリューションになると思われます。

更新を非同期にする方法はありますか? 書き込みを単一のリージョンで処理される SQS キューに入れることができれば、おそらく 1 秒か 2 秒以内に完了するでしょう。これは、速度に応じて、直接データベース接続よりも最適化されている可能性があります。

マルチマスターは、データベースのネイティブ レプリケーション機能を使用する別のオプションです。RDS でこれが実行できるかどうかはよくわかりませんが、可能かどうか、また利点と欠点を調べる価値はあるでしょう。複数のユーザーが同時に同じレコードを更新することが予想される場合は、それに対する保護が必要です。

もう 1 つのオプションは、特定のデータベース上の特定のユーザー データを使用するシャーディングです。ただし、これにより、アプリケーション ロジックがより複雑になります。

関連情報