PolarDB for MySQL クラスターには、組み込みの読み書き分離機能があります。アプリケーションは、[読み書き] で単一のクラスターエンドポイントに接続するだけです。書き込みリクエストは自動的にプライマリノードに転送されます。読み取りリクエストは、各ノードの負荷 (現在未完了のリクエスト数) に基づいて、プライマリノードまたは読み取り専用ノードに自動的に転送されます。
メリット
-
[読み取り整合性]
クライアントがクラスターエンドポイント経由でバックエンドに接続すると、読み書き分離ミドルウェアはプライマリノードおよび各読み取り専用ノードへの接続を自動的に確立します。単一の接続 (セッション) 内では、ミドルウェアが各データベースノードのデータ同期状態を確認し、最適なノードを選択します。この方法により、正しい結果 (書き込み後の読み取りで期待どおりのデータが返る) を保証し、読み取りリクエストの負荷分散も実現します。

-
ネイティブな読み書き分離によるパフォーマンス向上
クラウド上で読み書き分離を実現するために独自のプロキシ層を構築する場合、リクエストがデータベースに到達するまでに、SQL の解析と転送のために複数のコンポーネントを経由する必要があり、レイテンシーが増加します。これに対し、PolarDB の読み書き分離は、既存の高セキュリティリンクに直接組み込まれています。追加のコンポーネントやオーバーヘッドが発生しないため、レイテンシーを低減し、スループットを向上させます。
-
メンテナンスの簡素化
従来のモデルでは、アプリケーションにプライマリノードおよび各読み取り専用ノードの接続エンドポイントを設定する必要があります。また、書き込みリクエストをプライマリノードに、読み取りリクエストをすべてのノードに送信するように、ビジネスロジックを分割する必要もあります。
PolarDB は単一のクラスターエンドポイントを提供します。アプリケーションがこのエンドポイントに接続すると、プライマリノードおよび読み取り専用ノードで読み取りと書き込みの操作を実行できます。リクエストは自動的に転送され、ルーティングロジックは完全に透過的であるため、メンテナンスコストを削減できます。
アプリケーションを変更せずに、読み取り専用ノードを追加して処理能力を向上させることもできます。
-
高可用性のためのノードヘルスチェック
読み書き分離モジュールは、クラスター内のすべてのノードに対してノードヘルスチェックを自動的に実行します。ノードに障害が発生した場合、またはレイテンシーが指定されたしきい値を超えた場合、PolarDB はそのノードへの読み取りリクエストのルーティングを停止します。その後、リクエストは残りの正常なノードに分散されます。これにより、単一の読み取り専用ノードの障害がアプリケーションに影響しないことが保証されます。ノードが復旧すると、PolarDB は自動的にそのノードをルーティングプールに再追加します。
-
無料で利用可能で、リソースおよびメンテナンスコストを削減
読み書き分離機能は追加料金なしで提供されます。
リクエストのルーティングロジック
Read/Write mode では、リクエストは次のようにルーティングされます:
-
プライマリノードにのみ転送されるリクエスト:
-
すべての DML 操作 (INSERT、UPDATE、DELETE、SELECT FOR UPDATE)
-
すべての DDL 操作 (データベースやテーブルの作成または削除、テーブルスキーマの変更、権限の管理など)
-
トランザクション分割が無効な場合のトランザクション内のすべてのリクエスト
説明トランザクション分割が有効な場合のルーティングの詳細については、「トランザクション分割」をご参照ください。
-
ユーザー定義関数
-
ストアドプロシージャ
-
LOCK/UNLOCK TABLES ステートメント
-
複数ステートメント のクエリ
-
一時テーブルを使用するリクエスト
-
SELECT last_insert_id() -
ユーザー変数のすべてのクエリと変更
-
binlog ダンプリクエスト
-
-
読み取り専用ノードまたはプライマリノードに転送されるリクエスト:
説明[プライマリノードによる読み取りリクエストの許可] が [はい] に設定されている場合にのみ、リクエストはプライマリノードに転送されます。
-
トランザクション外の読み取りリクエスト
-
読み取り専用トランザクション (START TRANSACTION READ ONLY)
-
-
常にすべてのノードに転送されるリクエスト:
-
システム変数のすべての変更
-
USE コマンド
-
PREPARE および DEALLOCATE PREPARE コマンド
-
COM_CHANGE_USER、COM_RESET_CONNECTION、COM_QUIT、COM_SET_OPTION などのコマンド
-
SHOW PROCESSLIST説明SHOW PROCESSLISTコマンドを実行すると、PolarDB はすべてのノードのプロセスリスト情報を返します。 -
KILL (コマンドラインの KILL コマンドではなく、SQL の KILL ステートメント)
-
[読み取り専用] モードでは、リクエストは次のようにルーティングされます:
-
DDL 操作と DML 操作は許可されません。
-
すべての読み取りリクエストは、負荷分散により読み取り専用ノードに転送されます。
-
読み取りリクエストは、プライマリノードがサービスノードに追加されている場合でも、プライマリノードに転送されることはありません。
-
PolarDB は binlog ダンプを特定の読み取り専用ノードに固定します。