仕事で既に稼働しているEC2+RDSのセットが2つあってそれぞれのRDSのデータを同期するかも、という話があったので勉強がてら調べてみる
AWS DMS
一般的な方法のように思われる
AWS DMS を活用して MySQLからPostgreSQLへの移行とDBリファクタリングをやっている話/osc2018-kagawa-dms-replication
DMSを使ったSQL Serverの継続的なレプリケーションを行う
データ移行なので基本は1度または何度かの移行タイミングで利用するサービスに思えたけど、
データの更新があったらもう一方のDBへ反映させる継続的レプリケーションという機能があった!
Kafka
打ち合わせの中で出てきた案(そもそも知らない)
データストリーム、データハブ(正確にはメッセージキューというらしい)
オンプレではApacheが提供しているKafkaが使われていてAWSマネージドサービスでも提供されるようになった(Apacheのものより設定が楽らしい)
こちらの記事の図が分かりやすかったです!!
何も考えずにEC2上のアプリ内でデータ抽出+別アプリのDB更新(API実行)をするとデータが大量だった時にEC2の負荷が高くてレスポンス遅くなっちゃう…
公開APIを使ったデータ更新では1度に送信できるリクエストに制限があり、Max件数をリクエストすると非同期で更新処理が実行されるので更新結果取得をポーリング実行してデータが正常に更新できたかを確認する方法を使ったことがあります
ちなみにMax件数をAPIリクエストして更新次第、次のMax件数をリクエスト…を何度か続けて実行したらサーバエラーになって一時的にAPIリクエストが拒否されてしまったこともTT
こんな問題を解消するのがデータハブなんですね!
Kinesis
とてもうっすらとした記憶でキネシスストリームっていうのも同じようなサービスじゃなかったっけ?と浮かんできました
Amazon Kinesis vs. Kafka: データストリームサービス徹底比較
Kafkaの方がKinesisと比べるとより大量のデータを瞬時に扱える、でも熟練者じゃないとセットアップが難しいっていう感じなんですね〜(Kinesisがいいじゃん笑)
まとめ
Kafka、Kinesisだったらデータ自体は高速で繋いでくれるけど、DB更新するにはAWS Lambdaでデータが送られてきたことを検知してRDSに登録する必要がありそう
高頻度かつ大量のデータの同期であればKafkaまたはKinesis+AWS Lambdaなんだろうけど、AWS DMSの継続レプリケーションで十分なんじゃないかな