サーバーワークスの新坂です。
RDS for MySQLでクロスリージョン・リードレプリカ機能が発表されましたね。 Amazon Web Servicesブログの記事を見ますと、世界中のリージョンへデータベースをレプリケーションできるようです。すごいですね。クラウドですね。 【AWS発表】 Amazon RDS for MySQLがクロスリージョン・リードレプリカを作成可能に
でもデータベースを世界へ複製するってパフォーマンスはどうなんでしょう、という疑問がわきます。ということで試してみました。
リードレプリカ作成
まずはリードレプリカを作成してみます。マスターとなるDBインスタンス→「Instance Actions」→「Create Read Replica」を選択します。
次に、レプリカ作成情報を設定します。ここで他のリージョンが選択できます。
完了です。簡単ですね。
レプリカの確認
今回は東京リージョンをマスターとして、サンパウロ・カルフォルニア・シンガポールの3リージョンにリードレプリカを作成しました。 マスターDBインスタンスのページには、リードレプリカが別リージョンに作成されていることが表示されます。
レプリカの遅延
リージョンが異なるということは、ネットワーク的にも遠いということになりますから、データ反映ラグが気になるところです。 簡単なスクリプトを作成して試してみました。
準備
テスト用に 列を1つ持つproduct テーブルを作成します。
CREATE TABLE product ( code VARCHAR(50) );
連続してレコードを挿入するスクリプトを作成します。ワンライナーで書けます。
for i in `seq 1000`; do mysql oreno -h mydb.******.ap-northeast-1.rds.amazonaws.com -uuser -ppassword --execute="INSERT INTO product (code) values ($i);"; done;
各リージョンのレコード数をSELECTするスクリプトを作成します。(非同期実行させます)
mysql oreno -h mydb.******.ap-northeast-1.rds.amazonaws.com -uuser -ppassword --execute="select 'Tokyo' as region,count(*) from productG"& mysql oreno -h mydbsa.******.sa-east-1.rds.amazonaws.com -uuser -ppassword --execute="select 'Sao Paulo' as region,count(*) from productG"& mysql oreno -h mydbca.******.us-west-1.rds.amazonaws.com -uuser -ppassword --execute="select 'California' as region,count(*) from productG"& mysql oreno -h mydbsg.******.ap-southeast-1.rds.amazonaws.com -uuser -ppassword --execute="select 'Singapore' as region,count(*) from productG"&
テスト実行
連続レコード挿入ワンライナーを実行します。手元から東京リージョンのマスターDBへINSERTします。 1秒間あたり、12レコードをINSERTできました。
並行して、各リージョンのレコード数をSELECTするスクリプトを実行して、レコード数の差異を確認してみます。
ある一瞬の結果
手元(東京)から実行しているので、SQL自体も近い順に届くのでしょう。 あまり意味のない結果かもしれませんが、東京とサンパウロで12レコード差です。 毎秒12レコードINSERTしていることと、ネットワーク遅延を考慮するとラグは1秒未満でしょうか。
リージョン | レコード数 |
---|---|
Tokyo | 50,092 |
Singapore | 50,094 |
California | 50,097 |
Sao Paulo | 50,104 |
CloudWatchで確認
上記のテストスクリプトを1時間ほど実行したところで、CloudWatchで確認します。
シンガポール
グラフに動きが現れません。測定限界値未満なのでしょうか。
カルフォルニア
こちらもグラフに現れません。
サンパウロ
時々1秒の遅延が確認できます。
まとめ
今回のテストは、データが極めて小さいということもあるかもしれませんが、テスト結果から推察するに、レプリケーション・ラグは秒単位というところでしょうか。 CloudWatchでモニタリング・アラートすることも可能ですので、数秒のラグも問題になるような用途の場合は、ぜひとも活用したいところです。