BT

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

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Reddit、"AWS S3"やその他のシステムからメディアメタデータを"AWS Aurora Postgres"に移行

Reddit、"AWS S3"やその他のシステムからメディアメタデータを"AWS Aurora Postgres"に移行

原文リンク(2024-03-31)

Redditは、メディアメタデータのストレージをAWS Aurora Postgresを使った新しいアーキテクチャに統合した。以前は、AWS S3から直接取得を行うなど、様々なシステムからメディアメタデータを取得していた。新しいソリューションにより、メディアメタデータの検索が簡素化し、5ms以下のレイテンシで毎秒100k以上のリクエストを処理できるようになる(p90)。

Redditは、画像、動画、埋め込みサードパーティメディアなど、さまざまなタイプのメディアコンテンツを含む何十億もの投稿をホストしている。また、Redditはユーザーの行動傾向を観察しており、今後数年でより多くのメディアコンテンツがアップロードされると予想している。

Redditのシニア・ソフトウェア・エンジニアであるJianyi Yi氏は、メディア・メタデータがRedditにとってどのような意味を持つかを述べる。

メディア・メタデータは、メディア・コンテンツに追加のコンテキスト、整理、検索性を提供します。Redditのメディアメタデータには、主に2つのタイプがあります。最初のタイプは、投稿モデル上のメディアデータです。たとえば、動画投稿をレンダリングする場合、動画のサムネイル、再生URL、ビットレート、さまざまな解像度が必要になります。2つ目のタイプは、メディアアセット自体のライフサイクルに直接関連するメタデータです。

Redditのプラットフォームが有機的に進化したため、メディアメタデータは多くのシステムに保存されることになったが、保存形式が一貫しておらず、メディアタイプによってクエリパターンが異なり、監査やコンテンツの分類も不十分であった。さらに悪いことに、対応するメタデータをフェッチするために、S3バケットオブジェクトをクエリしたり、ダウンロードしたりする必要がある場合もある。

メディアメタデータの例(出典:Reddit Engineering Blog

同社は、メディアメタデータを管理するための統一されたシステムを構築することを決定し、Apache Cassandraよりも AWS Aurora Postgresの方をデータストレージに使用することを選んだ。どちらのデータベースもRedditの要件を満たしていたが、Postgresが選択された理由は、アドホックなデバッグとより柔軟なクエリパターンを提供してくれるからだ。

将来の成長(2030年までに50TBのメディアメタデータ)を見越して、エンジニアはPostgresベースのソリューションでスケーラビリティをサポートするためにテーブル・パーティショニングを採用した。彼らはパーティション管理のためにpg_partmanpg_cron拡張機能を活用し、パーティショニングキーとしてポストIDを使用した。単調に増加するポストIDでパーティショニングを行うことで、Postgresは最新のパーティションのインデックスをキャッシュし、ディスクI/Oを最小限に抑えることができるため、パフォーマンスが向上する。さらに、同じ期間の複数の投稿を取得するバッチクエリは、単一のパーティションからすべてのデータを取得するため、クエリの実行時間がさらに短縮される。

チームはまた、すべてのメディアメタデータフィールドをシリアライズされたJSONBフォーマットで保存することを決定し、効果的にテーブルをキーバリューストアに変換した。これにより、クエリ・ロジックが簡素化し、結合が回避され、読み取りパフォーマンスがさらに向上した。すべてのスケーラビリティとパフォーマンスの最適化により、メタデータ・ストアは100k RPS(リクエスト/秒)で2.6ms(p50)、4.7ms(p90)、17ms(p99)という低い読み取りレイテンシを実現している。

移行を含むメディア・メタデータ・ストアのアーキテクチャ(出典:Reddit Engineering Blog)

このプロジェクトの最大の課題はデータ移行であり、エンジニアは多段階のアプローチを採用した。まず、デュアルライトを有効にし、古いデータソースからデータを埋め戻した。次に、デュアルリードを有効にして出力を比較し、問題を検出して対処した。最後に、パフォーマンスとスケーラビリティの問題を監視しながら、徐々に新しいデータストアの使用に切り替えていった。移行プロセス中、チームはApache Kafkaコンシューマを使ってソースデータベースからデータ変更イベントをストリーミングし、データの不整合を報告して、エンジニアがデータの問題を分析できるようにした。

作者について

この記事に星をつける

おすすめ度
スタイル

BT