BLOGSpeee開発陣による技術情報発信ブログです。メディア開発・運用、スマートフォンアプリ開発、Webマーケティング、アドテクなどで培った技術ノウハウを発信していきます!2018-07-30Speeeで広告システム作ってるエンジニアが日々やっていることAWSTweetSpeeeのバックエンドエンジニアの柳沼(@ygnmhdtt)です。筆者は7月にSpeeeに入社し、ネイティブアドネットワークUZOUの開発を担当しています。前職はWeb/バックエンド/インフラあたりを触っており、アドシステムには馴染みがありませんでした。日々広告システムというものがいかにエキサイティングかを思い知っています。この記事では、Speeeでネイティブアドネットワークを作っているエンジニアが日々どのような仕事をしているのか、ご紹介します。UZOUについてUZOUは、累計400以上のメディアに導入されているネイティブアド配信プラットフォームです。uzou.jp最近は目標を達成し、みんなで高い肉を食べたりしました。過去にはUZOUグッズとしてPCケースを作ったりもしました。今度UZOUパーカーもできます。広告配信システムの性質上、UZOUは大量のトラフィックを定常的に捌き続ける必要があります。UZOU全体では、1日に億単位の回数で、広告を配信しています。広告は実際に表示されないことには意味がありません。そのため、高速にレスポンスすることにも気を使う必要があります。現状、すべてのリクエストに対し5ミリ秒程度(ELBのLatencyメトリクスの値)でレスポンスしています。実際に広告をレスポンスするサーバ(配信サーバと呼んでいます)は、全てAWS上に乗っています。大体12台程度(r4.2xlarge)のEC2が常に稼働し、トラフィックに応じてオートスケールさせています。リクエストの度にRDBへネットワークアクセスしていては、とても5msでレスポンスすることはできません。配信サーバはAerospikeに詰めたデータを見に行くことで、高速化を実現しています。Aerospikeは大量のIOに耐えられるよう、i3.xlargeインスタンス6台でクラスタリングしています。Aerospikeを見に行くこと自体もコストなため、可能な限り配信サーバのメモリ上にデータをキャッシュさせています。パフォーマンスを意識したシステム開発のスキルを必要とするUZOUは、とにかく高速に、大量のトラフィックを捌き続けています。インフラ設計時にも、パフォーマンスを重視した設計を行う必要があります。メンバーは常にパフォーマンスを意識した設計を行っています。パフォーマンスを考慮した設計が得意な方や、これから得意にしたい方には絶好の環境かと思います。配信サーバは広告をレスポンスしている関係で、最も落ちてもらっては困るサーバです。売上に直結しています。そのため、分散システム化して、SPOFが存在しないような設計になっています。Aurora)が落ちても、広告を返し続けることができるようになっています。みたいにならない限りは広告を返し続けてくれる、頼もしいアーキテクチャになっています。広告がレスポンスされなくなると、メディアさんも広告主さんも、UZOUへの信頼感が途切れてしまいます。メンバーは日々、高可用性を意識したシステム開発を行っています。広告システムで最も重要なポイントはログ収集です。ログは、ユーザのアクションの足跡そのものです。UZOUでも、ユーザの行動を全てログに残し、Redash等のBIツールを使って可視化・分析しています。ユーザに合った(クリックされやすい)広告を、安定して配信できているかを日々分析し、PDCAを繰り返しています。成果が出たときは、エンジニア達も喜びます。🎉レコメンドアルゴリズムUZOUでは、表示しているメディアや、閲覧しているユーザに合わせた(クリックしたくなるような)広告・記事をレコメンドする機能を持っています。UZOUでは独自にアルゴリズムを設計し、実装し、本番適用し、成果検証を行っています。過去に本ブログに投稿された文書間類似度によるレコメンドシステムや数理最適化を用いて広告オークション入札金額を自動で調整してみたもぜひご覧になってみてください。技術スタック具体的にどうやって開発しているのか?なのですが、UZOUでは以下のような感じです。Ruby前述の通り、UZOUでは多くのトラフィックを高速に捌く必要があります。そのため、並列処理を書きやすいネイティブ言語として、全面的にGoを採用しました。広告配信アルゴリズムのロジックのように、数値計算を必要とする箇所があります。それらは、充実したライブラリを使用して工数&バグを削減するために、Pythonを採用しています。RDBAurora(MySQL互換)NoSQLDBAerospikeRDBにはAuroraを活用しています。AWSネイティブで、高可用性を実現するのが狙いです。前述の通りAerospikeをコアに使用しています。その他ミドルウェアnginxfluentdWebサーバにはnginx、ロギングにはfluentdを採用しています。大量のトラフィックを高速に捌き続ける分散システムの開発に携われることは非常におもしろいです。エンジニアならワクワクする方も多いのではないでしょうか。広告配信システムは、システムが上手くできていることが、そのまま配信金額の向上(つまり売上の向上)に直結するという性質を持っています。自分たちの作ったシステムが、成果に直結するのは非常にエキサイティングな体験です。UZOUにはまだたくさんの課題があります。UZOUは、2016年の初め頃に、2ヶ月間という短期間で突貫で作られています。そのため、データ構造が現実に即していない箇所が顕在化してきています。いわゆる歴史的経緯による問題が顕在化しているタイミングです。UZOUは、非常に少数のエンジニアで作られています。やりたいことがあるのですが、リソースは常に不足している状態です。いう目標を掲げています。エンジニアリングにおいても、より速く、より強く、よりセキュアなシステムを作るために日々切磋琢磨しています。広告システムのエンジニアは、インフラからフロントエンドまで、あらゆるレイヤーの知識を必要とします。強いエンジニアになれる環境だと思います。私達の仲間になってください。Speeeでは、ネイティブアドネットワークUZOUに携わるソフトウェアエンジニアを募集しています!www.wantedly.comまた、最近リニューアルされたエンジニア採用サイトもぜひご覧ください。福利厚生全部載ってます。www.engineer.speee.jpまとめお読みいただきありがとうございました。今後もUZOUや、アドテクノロジーに関する記事、それ以外の記事も発信していきます。2018に行ってきました!こんにちは。開発基盤ユニットの@selmertsxです。11/3...2018-08-08広告レコメンドにおける多腕バンディット問題の適用とその解法Speeeエンジニアの義田@yoppiblogです。最近はUZOUのレコメン...2018-01-17文書間類似度によるレコメンドシステムSpeeeエンジニアの義田@yoppiblogです。参加してきました月別アーカイブスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。