entry-header-eye-catch.html
entry-title-container.html

entry-header-author-info.html
Article by

【前編】完全自社開発の広告システム、pixiv Adsを支える技術を大公開

ピクシブ株式会社は2022年11月24日、pixivに運用型配信広告が簡単に出稿できる「pixiv Ads」をリリースしました。pixiv Adsは完全自社開発のセルフサーブ型の運用型広告プラットフォームです。実現にあたっては実に二年以上の歳月をかけて、数々の技術的挑戦を行ってきました。

本日はpixiv Adsの技術を支えるエンジニア4名から、特に大きな取り組みを中心に技術発表させていただきます。

pixiv Adsを支えるエンジニアの自己紹介

takashi:2021年5月入社のtakashi(たかし)です。アドプロダクト部で、インフラ・バックエンド・フロントエンドを一貫して設計・開発・運用を行っています。

toki:アドプロダクト部で2022年3月からアルバイトをしているtoki(とき)です。インフラを含めた配信基盤に関わることが多いです。

mytk:2018年4月入社のmytk (まいたけ) です。広告配信ロジックとデータ基盤まわりの開発に携わることが多いです。

ucchi-:2021年新卒入社のucchi-(うっちー)です。アドプロダクト部で、主にデータ基盤やLookerの整備を行っています。

pixiv Adsの全体構成

pixiv Adsの主要部分のシステム構成の概要を紹介します。

pixiv Adsはほぼ全ての要素がGoogle Cloud上で構築されています。 Go言語で記述されている広告配信サーバーはKubernetes Engine上にデプロイされており、広告リクエスト量に合わせて自動でスケーリングされるように構成されています。広告配信サーバーはMemorystore、Bigtable、Cloud Loggingなどと通信しており、Google Cloudのマネージドサービスを活用することで、開発者のメンテナンスコストを抑えています。

広告リクエストのログはCloud Loggingを経由してBigQueryに保存されており、各種広告指標の集計や、BIツールLookerを用いた分析などが可能です。

広告運用者向けの広告管理システムは、フロントエンドをNext.js (React)、バックエンドをRuby on Railsで開発しています。

広告画像の配信のみ、ネットワークコスト最適化の観点から自社オンプレミス環境の画像サーバーから配信しています。このサーバーではpixiv本体で使われている画像配信技術と同じものが使われています。

pixiv Adsの技術的挑戦

大きな取り組みとしては4つ挙げられます。各項目の主な担当者から詳細についてお話しさせていただきます。

1. 広告のターゲティング

takashi:pixiv Adsの広告のターゲティングについては、主にtakashiとtokiが開発を担当しましたが、代表で私からご紹介いたします。 pixiv Adsでは、ユーザーがpixivに登録した年齢、性別などのデモグラフィックデータや、作品の閲覧、ブックマークといった行動ログデータなど、ファーストパーティデータを利用して広告のターゲティングを行なっています。機械学習を用いて広告を配信するユーザーの最適化を自動で行います。行動ログから抽出したユーザーの興味関心ジャンル(BL、SF/ファンタジー、少年漫画など)による手動のターゲティングも可能です。

広告のターゲティングに使われているこれらのユーザー属性データは、全pixivユーザー分がBigtableに格納されています。pixiv Adsの全ての広告表示リクエストでこのデータが参照され、広告の選出に使われています。

2. 大量かつ高速なリクエスト処理

toki:大量かつ高速に広告リクエストを処理するための技術的な要素や取り組みについては、主にtakashiとtokiが担当しましたが、代表で私からご紹介いたします。

Google Cloud Bigtableは、非常に大量のデータを10ms未満という非常に低いレイテンシで安定して読み書きできる特徴を持っているため、表示速度が要求される広告リクエストが参照するユーザー属性情報ストアとして採用しています。Bigtableへの読み取りリクエスト量が増加してもノードを増やせば線形にスケールし、安定したパフォーマンスを出していました。
しかしながら、Bigtableはノード料金単価が約632ドル/月(執筆当時)と他のリソースに比べて割高となっており、加えてpixiv Adsでは2クラスタの冗長構成を取っているため、2ノードずつスケールさせる必要があり、コストが高くついていました。

そこで、pixiv Adsでは広告配信サーバー内にメモリキャッシュ機構を実装しました。ユーザー属性情報は頻繁に変化するものではなかったり、同じユーザーの連続したリクエストにより参照されるものが多いため、キャッシュ機構の実装により大幅にBigtableの読み取り回数を削減し、Bigtableノードコストの削減に成功しています。

同時に、広告配信サーバーの前段にあるCloud Load Balancingにセッションアフィニティを設定し、このメモリキャッシュの効率を上げています。この設定をしたことで、広告サーバーが呼び出しているマイクロサービス側に異常が発生するという事象がありましたが、この話は別のinside記事で詳しく紹介しています。

他にも、各広告のユーザー毎の表示回数(フリークエンシー)は、Memorystore for Redisを用いてインメモリでカウンタを保持、インクリメントを行うようにしており、分散スケールされた広告配信サーバーから高速にアクセス可能になっています。

(後編へ続きます)

inside.pixiv.blog

ピクシブ株式会社
「創作活動を、もっと楽しくする。」 クリエイターに、創作活動やファンとのコミュニケーションを楽しんでもらいたい 世の中のクリエイターの創作活動を支え、創作文化を刺激していきたい そんな想いで、私たちピクシブは世界中の人々の創作活動を支える事業を行っています。