TiDB User Day 2024のアーカイブ動画を公開中!詳細を見る
Pinterest-story

※このブログは2024年12月6日に公開された英語ブログ「Why Pinterest Modernized Its Graph Service with Distributed SQL」の拙訳です。

Pinterestは、世界をリードする視覚的検索および発見プラットフォームの1つとして、最近、グラフストレージサービスの大幅な見直しを実施しました。2024年のHTAP Summitにおいて、PinterestのシニアソフトウェアエンジニアであるKe Chen氏は、同社が従来のZenシステムから、TiDBという先進的な分散型SQLデータベースを基盤とする新しいアーキテクチャへの移行について説明しました。

このブログでは、Chen氏の講演内容を振り返り、Pinterestが直面した主要な課題、移行の動機、およびTiDBベースの新しいグラフサービス 「PinGraph」 で達成した成果を紹介しています。この変革により、Pinterestはデータ管理を効率化し、パフォーマンスを向上させ、コスト削減を実現し、膨大なユーザー基盤と多様なユースケースをサポートしました。

従来のグラフサービス:Zenにおける課題

Pinterestの元々のグラフサービスであるZenは、2014年に構築され、HBaseとMySQLの組み合わせで運用されていました。Zenは100以上のユースケースをサポートし、1.5ペタバイト (PBs) のデータを処理し、ピーク時には1秒あたり800万件のクエリ (QPS) を処理していましたが、Chen氏によると、いくつかの制約があったといいます。

  • データの不整合:Zenはアプリケーションレベルのセカンダリインデックスに依存していたため、障害発生時やロールバックのシナリオでデータの不整合が発生しました。これらの問題に対処するために、毎日のMapReduceジョブ 「Dr. Zen」 が使用され、データの整合性を取るために管理負荷が増加していました。
  • クエリ機能の制限:Chen氏は、Zenにおけるクエリが基本的なパターンに制限されていたことを指摘しました。これには、単一のプロパティによるノードやエッジの取得が含まれ、高度なフィルタリング、複合インデックス、またはマルチホップ・クエリはサポートされていませんでした。
  • 深刻な技術的負債:10年前のコードベースとの時代遅れの依存関係を抱えていたZenは、Pinterestの進化するニーズへの対応に苦労していました。このため、新しいビジネスユースケースのサポートが難しくなっていました。
Pinterest Senior Software Engineer Ke Chen delivering his graph service talk at HTAP Summit 2024.
HTAP Summit 2024で講演するPinterestシニアソフトウェアエンジニアのKe Chen氏

Chen氏は、これらの課題がPinterestにグラフサービスの近代化を検討させ、最終的にPinGraphの開発に至ったと述べました。

PinGraph:TiDBを活用した次世代グラフサービス

Pinterestは、Zenの制限を解決し、グラフサービスの将来に備えるために、PinGraphのバックボーンとしてTiDBを選択しました。Chen氏は、TiDBの分散型SQLアーキテクチャが、整合性、スケーラビリティ、効率性の実現というPinterestの目標に合致していることを指摘しました。

PinGraphの基盤としてTiDBが選ばれた理由:

  1. 強い一貫性:TiDBはACIDトランザクションセカンダリインデックスをネイティブにサポートしているため、アプリケーションレベルでのインデックス管理が不要となり、データ管理が簡素化され、エラーが減少しました。
  2. スケーラビリティ:TiDBは分散型SQLデータベースとして、手動でのシャーディングを必要とせずに水平スケーリングを実現しました。これにより、Pinterestは増大するワークロードを容易に処理できるようになりました。
  3. 強力なSQL:TiDBは柔軟で強力なクエリ機能を提供し、グラフのユースケースに不可欠なコンポジットインデックスレンジクエリマルチホップクエリをサポートしました。
  4. 運用の効率化:Pinterestは、古くなったインフラをTiDBに置き換えることで、メンテナンスの負担を軽減し、コストを削減できると期待しました。
  5. オープンソース:TiDBのアクティブなコミュニティとオープンソースの性質は、Pinterestの価値観と一致しており、イノベーションのための協力的なエコシステムを提供しました。

PinGraphのグラフサービスアーキテクチャの内部構造

Chen氏は、PinGraphがPinterestの多様なユースケースに対応しつつ、運用の簡素化とパフォーマンスの向上を実現するためにどのように設計されたかを解説しました。PinGraphは、Pinterestの構造化データストア (SDS) フレームワークの上に構築され、TiDBとシームレスに統合されています。

PinGraphのアーキテクチャは、以下のコンポーネントで構成されています。

An architectural representation of the PinGraph graph service built on top of TiDB.
TiDB上に構築されたPinGraphグラフサービスのアーキテクチャ図
  1. フロントエンドとバックエンド:PinGraphフロントエンドはグラフ関連のロジックとクエリを処理し、SDSバックエンドはTiDBのSQL機能を使って処理を実行しました。
  2. ユニバーサル・クエリ・ランゲージ:SQLを抽象化したレイヤーにより、PinGraphとTiDB間の通信を簡素化しました。
  3. タイプスキーマ:メタデータ管理コンポーネントがYAMLベースのスキーマを使ってノードとエッジを定義し、TiDBでのテーブル作成とスキーマ更新を自動化しました。
  4. キャッシングレイヤー:SDSに組み込まれたキャッシングレイヤーは、読み取り負荷の高いワークロードを効率的に処理することによって、TiDBへの負荷を軽減しました。

Chen氏は、PinGraphのモジュラーアーキテクチャにより、Pinterestはグラフ操作を一元化し、クエリ機能を強化、インフラ管理の合理化を実現したと述べました。

TiDBによる高度なクエリ機能

PinGraphは、元々のグラフサービスであるZenの制限を克服するために、TiDBを活用して強力なクエリ機能を導入しました:

  • 複合インデックス:複数のプロパティに対して同時にフィルタリングできるようになり、柔軟性と効率が向上しました。
  • レンジクエリとページネーション:範囲ベースのフィルタリングのサポートにより、より詳細なデータ検索が可能になりました。
  • マルチホップクエリ:パフォーマンス上の理由から3ホップに制限されていますが、この機能により、ノード間の関係を探索する新しい可能性が広がりました。
  • 効率的なエッジカウント:PinGraphは、入出力エッジのカウントのような一般的なクエリを最適化することにより、TiDBへの負担を軽減しました。

Chen氏は、これらの機能強化により、Pinterestの製品チームは、ユーザーとのつながりやコンテンツの推奨など、複雑な関係をより効果的にモデル化できるようになったと述べました。

Pinterestの成果:パフォーマンス向上とコスト削減

TiDBを採用して以来、Pinterestはクエリのレイテンシ、インフラコスト、そして運用効率において大きな改善を実現しました。

PinGraphへの移行により、以下のような革新的な結果が得られました:

  • レイテンシの改善:Zenと比較して、PinGraphは、P99のレイテンシを最大10分の1まで短縮し、クエリレスポンスの高速化と信頼性の高いユーザーエクスペリエンスを実現しました。
  • コスト削減:インフラを統合し、TiDBの水平スケーラビリティを活用することで、Pinterestはインフラコストを50%以上削減しました。
  • 運用の簡素化:PinGraphの統一されたアーキテクチャにより、技術的負債と運用の複雑さが軽減され、エンジニアリングリソースをイノベーションに充てることができるようになりました。
  • 将来性のあるプラットフォーム:高度なクエリサポートとモジュール設計により、PinGraphは進化するビジネスニーズに対応する強固な基盤を提供します。

今後の計画:業界標準とともに進化する

今後数ヶ月間で、PinterestはPinGraphをさらに強化する野心的な計画を持っているとChen氏は述べました:

  1. GQLのサポート:Graph Query Language (GQL) を実装することで、クエリの表現力と使いやすさを向上させ、Thrift APIへの依存度を減少させます。
  2. 顧客志向の機能:製品チーム向けに合理化されたインターフェイスを開発することで、生産性を高めより迅速なデータ探索を可能にします。
  3. グラフネイティブの強化:Pinterestは、グラフ特有の機能を追加し、新たなユースケースを開拓するとともに、パフォーマンスを向上させることを目指しています。

結論

PinterestがZenからTiDBを採用したPinGraphに移行したことで、最新のグラフサービスにおける分散SQLデータベースの変革の可能性が浮き彫りになりました。PinGraphは長年の課題に対処することで、スケーラビリティ、パフォーマンス、運用効率を改善し、Pinterestが自信を持って膨大なユーザーベースをサポートできるようにしました。

同じような課題に直面している組織にとって、Pinterestの歩みは、分散SQLを活用してインフラを近代化し、運用を合理化し、新たな機会を引き出すための説得力のある青写真を提供してくれます。PinGraphは進化を続けており、データ集約型環境におけるスケーラブルで機能豊富なグラフサービスの基準となっています。

古いデータベース基盤を、分散SQLを使って最新の技術に置き換える第一歩を踏み出しませんか?イベントでのすべてのセッションをご覧いただくためにご登録いただくと、さらに詳しい情報を確認いただけます。ご視聴をお楽しみください!


Have questions? Let us know how we can help.

Contact Us

TiDB Cloud Dedicated

TiDB Cloudのエンタープライズ版。
専用VPC上に構築された専有DBaaSでAWSとGoogle Cloudで利用可能。

TiDB Cloud Serverless

TiDB Cloudのライト版。
TiDBの機能をフルマネージド環境で使用でき無料かつお客様の裁量で利用開始。