buto > /dev/null

だいたい急に挑戦してゴールにたどり着かずに飽きる日々です

稼働中RDS同士のデータ同期を考える

仕事で既に稼働している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のものより設定が楽らしい)

こちらの記事の図が分かりやすかったです!!

Apache Kafkaの概要とアーキテクチャ

何も考えずにEC2上のアプリ内でデータ抽出+別アプリのDB更新(API実行)をするとデータが大量だった時にEC2の負荷が高くてレスポンス遅くなっちゃう…

公開APIを使ったデータ更新では1度に送信できるリクエストに制限があり、Max件数をリクエストすると非同期で更新処理が実行されるので更新結果取得をポーリング実行してデータが正常に更新できたかを確認する方法を使ったことがあります

ちなみにMax件数をAPIリクエストして更新次第、次のMax件数をリクエスト…を何度か続けて実行したらサーバエラーになって一時的にAPIリクエストが拒否されてしまったこともTT

こんな問題を解消するのがデータハブなんですね!

Kinesis

とてもうっすらとした記憶でキネシスストリームっていうのも同じようなサービスじゃなかったっけ?と浮かんできました

Amazon Kinesis vs. Kafka: データストリームサービス徹底比較

KafkaとAWS Kinesisの比較

Kafkaの方がKinesisと比べるとより大量のデータを瞬時に扱える、でも熟練者じゃないとセットアップが難しいっていう感じなんですね〜(Kinesisがいいじゃん笑)

まとめ

Kafka、Kinesisだったらデータ自体は高速で繋いでくれるけど、DB更新するにはAWS Lambdaでデータが送られてきたことを検知してRDSに登録する必要がありそう

高頻度かつ大量のデータの同期であればKafkaまたはKinesis+AWS Lambdaなんだろうけど、AWS DMSの継続レプリケーションで十分なんじゃないかな