nend・nex8のエンジニア・技術ブログ2019-09-13広告配信がどのように作られているのかインターンはじめにはじめまして。関西の大学院に通う博士前期課程1年の馬越です。株式会社ファンコミュニケーションズさんにて9月2日〜9月6日の間インターンシップに参加させていただきました。今回、私が参加させていただいたコースはScalaを利用した広告配信システムの開発でした。それでは参加経緯、インターンシップ内容、感想、ファンコミュニケーションズさんについて書いていきたいと思います。社員さんとお話しをさせていただいたのがきっかけとなります。そこでの会話をきっかけに、広告配信システムがどのように作られ、配信されるのか非常に気になっていました。ファンコミュニケーションズさんのインターンシップではScalaを利用して広告配信の裏側を知ることができると目に入り、応募いたしました。応募からすぐに返信をいただき数日後に面談をさせていただきました。今回インターンシップの内容は、Scalaを利用してミニDSPを構築しようということでした。アドテク業界は主にSSPとDSPというのに分かれております。SSP、DSPとはなんぞや?という方は以下のサイトを参考にしてみてください。その情報をもとに、広告主が買いたい金額を予測し(今回は実装していない)、最適な広告を決定し、メディアに返す処理を実装しました。午前中は社内見学とSSP、DSPの解説がありました。午後からはメンターに指導をいただきながら、どう開発を進めていくか話し合いました。私がScalaが初心者なため、Scalaの基本的事項をおさらいしました。その後、ミニDSPを構築するためのアーキテクチャ選定を行いました。ここから少し技術的な内容になります。使用言語はScalaです。Scalaはオブジェクト指向と関数型言語の両方を兼ね備えております。(慣れまで少し時間がかかりそうだと感じました。Communityを利用しました。今回の開発はDSPの仕様からサーバとデータベースが必要となります。そこを考慮しメンターに相談しながらアーキテクチャを選定していきました。サーバはWebアプリケーションフレームワークであるFinatraを利用しました。以下のサイトを参考にしました。qiita.comqiita.comFinatraでWebアプリケーションの雛形を作って1日目は終了しました。2日目2日目からは主にAPIの実装に入りました。APIにリクエストがきた場合の処理を実装しました。今回はSSPからの情報を元に、最適な広告を返す処理として、データベースから広告のデータを取得メディア(アプリ等)ごとに表示する広告をフィルタリング機械学習にリクエストを送信し各広告の入札金額の取得メディアからの希望入札金額に下回っている広告をフィルタリング一番高い広告を決定し、SSPに送信という流れになっております。トラフィックが増えた際に仕様を満たせないため、Redisを利用することになりました。Redisは以下のサイトを参考にしてください。qiita.com今回はScalaでRedisを利用したいため、scala-redisを利用しました。github.comサーバとRedisを繋ぐ時は、コネクションプールを利用し接続しています。https://wa3.i-3-i.info/word12762.html3日目3日目は2日目の続きです。サーバとRedisを接続できたので、実際に広告データ(ダミー)を取得しました。そのデータを元に、フィルター処理を実装しました。メンターに指導をいただき、fillter関数やMap関数を利用しScalaっぽい書き方で実装できました。if文を利用せずに関数を実装できたのがとても感動しました。返ってきた値をフィルタ処理し、SSPに返信しました。ここまでで、ミニDSPのメインの機能を完成させることができました。実際にcurl等でAPIにリクエストを送信すると実際にデータを返すことができました。4日目4日目はリクエストがきた際にログ保存を行う処理を実装しました。いうものを発見し、こちらを利用することにしました。labs.septeni.co.jp一通りシステムが完成したので、実際に応答時間を調べてみました。今回はローカル環境なのであまり意味がありませんが、形だけどのくらいか調べました。遅いことに悩まされました。原因がHttpieであることを発見し、terminal等で確認すると100ms以内で実行できました。Benchを利用してWebサーバの負荷テストも実施してみました。こちらもローカル環境なのであまり意味がありませんが、以下のサイトを参考にしました。コードのリファクタリングを行いました。1クラス1機能に分類し、不要なコード等を除去しました。フィードバックがあったことにより今後どのようにコードを書いていけば良いか理解することができました。5日目5日目は午前中は退職手続き等を済ませ、午後から成果発表を行いました。発表が終わり、このブログを書いて終了です。時間が余ったのでSSPを作成して自分のDSPにリクエスト送信することになりました。今回のインターンシップで広告配信の裏側を理解することができました。アドテク業界ではユーザ、メディア(アプリ等)、広告主の関係があり、今回はメディアと広告主を繋ぐDSPを開発しました。その中で、実際にアドテク業界が使っている技術などをメンターに教えていただき大変勉強になりました。メンターにソースコードのレビューをしていただき、どのように書いたら綺麗になるのかを教えていただきました。インターンシップを通して様々な技術と触れることができたので大変良かったです。今後はこの経験を活かして自分なりにスキルアップを目指したいと思います。インターンシップに受け入れていただき、そして、5日間ご指導いただき本当にありがとうございました。ファンコミュニケーションズさんについて最後になりますがファンコミュニケーションズさんについて少し書きたいと思います。インターンを始める前は、どのような雰囲気で開発されているのか全く想像がつきませんでした。いざ、インターンシップに参加してみると社内全体がほんわかしていると感じました。自社開発のため殺伐とした環境ではないためリラックスした状態で開発ができると実感しました。3月25日から29日までの5日間インターンシ...2019-03-01ミニSSP作ってきたん02月18日〜02月22日までファンコミュニケーションズで1週間のイ...2018-09-06SSP構築インターンに参加してきた初めまして、森です。Are青山のアドテク会社。アドネットワークやDSPを開発・運用。サーバを止めてみたよ。インターン:実業務体験編インターンでCTR予測をしましたSearchArchiveスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。