BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース GuardianにおけるMongoDBからAmazon RDS上のPostgreSQLへの移行

GuardianにおけるMongoDBからAmazon RDS上のPostgreSQLへの移行

ブックマーク

原文(投稿日:2019/01/09)へのリンク

Guardianは2018年、自身のCMSのデータストアを、セルフマネージドのMongoDBクラスタからフルマネージドのAmazon RDS上のPostgreSQL移行した。チームはダウンタイムのないAPIベースの移行を実施した。

Guardianの記事、ブログコンテンツ、フォトギャラリー、ビデオを格納する社内CMSはComposerと呼ばれ、MongoDB上のデータストアとして構築されていた。その前は、Oracleデータベースをバックエンドとするベンダー製ソフトウェアを使っていた。だが、その構成では、スキーマの移行が必要になるたびにダウンタイムが発生していたという。それに代わる方法として、チームは様々なNoSQLデータベースを調査した。彼らがMongoDBを選んだ決め手の1つは、その柔軟性にあったようだ。彼らは当初、MongoDBを自身のデータセンター上にホストしていたが、停止後、AWSサーバーに移した。Guardianのチームは、インストールおよび管理用のスクリプトを手書きする必要があったという。彼らはサポート契約とともにOpsManagerツール(MongoDBを管理するためのフロントエンドアプリケーション)を購入することにした。彼らがMongoDBのフルマネージドデータベースであるAtlasにしなかった理由はよくわからない。彼らが使用したOpsManager はデプロイメントを管理するものではない

AWSへの移行後、チームは2つのMongoDB機能停止に直面した。理由には、NTPがタイムサーバにアクセスできず時間の同期がとれなくなるなど、基本的な管理上の問題があった。また記事によると、OpsManager自体の管理が難しく、ベンダーからタイムリーなサポートを得るのが困難だったことも関係しているようだ。彼らは、データベース管理が最小限で済むソリューションに移行することが、自分たちにとって最善だと感じたという。

チームはAmazon RDS上にホストするデータベースとして、その成熟度とjsonbデータ型のサポートからPostgreSQLを選んだ。jsonb型を使うことで、JSONオブジェクト内のフィールドのインデックス付けが可能になる。移行計画は、Postgres上に新しいAPIを書き、プロキシを使って両方のAPIにトラフィックを送り、新たにやってくるデータを同期し続けるというものだ。既存のデータはAPIを使って移行し、その後、プロキシを新しいAPIに切り替える。以前のOracleからの移行も、同様のアプローチで実施されたという。彼らは移行スクリプトのログをElasticsearchにプッシュすることで、移行作業を記録した。この過程で、ログの構造化も改善されたという。

プロキシは全てのトラフィックを、リアルタイムにMongoDB APIへ、非同期にPostgres APIへ送信する。レスポンスに違いがあった場合は、ログに記録して解析した。新しいAPIとバックエンドが本番環境のトラフィックに耐えられるか確かめるため、彼らはGoReplayプロセスを実行してトラフィックを生成した。GoReplayはトラフィックをキャプチャして、別の環境(今回は本番前環境)で再生できる。完全な移行は本番前環境で実施された。本番移行の最終ステップは、DNS名をプロキシのエンドポイント(Amazon ELB)からPostgres API(別のELB)に切り替えることだった。これにより、クライアント側を変更することなく、そのまま動かすことができた。ただし、移行後、インテグレーションテストは失敗したという。新しいAPIに移行していなかったためだ。

他にも様々な理由で、MongoDBからPostgreSQLへ移行したところがある(sippablErrbitOleryContactually)。

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

BT