Gunosy Tech Blog

Gunosy Tech Blogは株式会社Gunosyのエンジニアが知見を共有する技術ブログです。

広告技術部合宿行ってきました Part. 1

広告技術部は8月末に三浦海岸のマホロバマインズ三浦に2泊3日で開発合宿にいきました! 今回のブログはアドネットワークチーム(以下ADNWチーム)の紹介です!今回ADNWチームは二班に別れ、それぞれ配信システムの改善と管理画面の改良に着手しました。

配信側

今回まとまって時間がとれたため、技術的チャレンジを実施しました。 配信チームは広告の配信を安定させ、より多くの収益を上げるようなシステムを運用するチームです。

広告の効果を良くするためには、今までの配信結果をもとに予測を立て、予測に基づき配信します。 その予測の精度を上げるには、配信結果をなるべく高速に予測に反映させることが重要です。 そこで今回の合宿では、ハイトラフィックな集計を高速に実施することをゴールとしました。

利用する構成は、KinesisStream、KinesisAnalyitics、Lambda、DAX、Dynamoを選定しました。 選定したKinesisStreamからKinesisAnalyticsへ投入する構成は過去Gunosyチームが導入していたので、Adチームでも導入できないか検討のため、作成してみました。
参考: Optimize Delivery of Trending...

合宿の日程としては、

  • 前準備:何を作るか決める
  • 初日:ステージングのインフラ構築
  • 2日目:Lambda、ロジック側の修正
  • 3日目:リファクタ

という流れで行いました。

Adチーム担当のSREチームも一緒に合宿に参加してくれたのですが、これが功を奏しました。 今回の開発項目では、新しくインフラを作成するためSREチームと連携が必要なのですが、一緒に合宿にいるため時間が合わないということがないので、密に連携が取れ素早くインフラ構築を進めることができました。 無事上記設定した目標を完了し、達成できたので良い合宿となりました。

やってよかったこと

前準備としていくつか決めていったのですが、それがとても重要でした。

  • 何を作るか
  • 合宿終了時の目標
  • 各日のおおまかな目安としての目標

これらをしっかり設定したことで合宿中何やるんだっけ?に陥らず、順調に開発が回せましたことが印象的でした。

管理画面

管理画面チームは既存のバッチの高速化に取り掛かりました。管理画面で動いているバッチは様々ですが、今回改良を加えたのはデータ量が増え続けているアドネットワークの配信候補を作るバッチです。

最近はまとまった時間を取って開発する機会が減ってしまっていた上司のことを思い、ガッツリ開発をする時間にしようとペアプロで行うようにしました。

合宿前に3日間でギリギリ達成出来そうな目標を立ててトライしてみました。

  • DAY 1
    • バッチ設計
    • Sidekiqの親バッチを作成
  • Day 2
  • Day 3
    • テスト・動作確認

アドネットワークの配信候補は配信先のメディアと広告商材の組み合わせで作られる為、構造上データが増えやすくなっています。今まではこのデータを作るのにResqueを使っており、バッチでの取得・更新するデータが増えるに連れ、内部のruby処理にも負荷がかかり、結果としてパフォーマンスが落ちていました。

そこで、今回の合宿での三日間はペアプロで直列で動いているバッチをSidekiqを使い、すべて並列で動く物に書き換えました。

1日、2日目と早朝3時ぐらいまでガッツリ開発した結果、一人だと妥協しそうになるところも、もう少しって踏ん張れるところにペアの効果が出てました。

Before
After

メンバーが椅子で寝るという珍事もありましたが、良いペアプロでした。

決起

三浦海岸だったので、マグロ尽くしが晩ごはんに出てきたのですが、やはりとても美味でしたね!

最後に

今回の合宿は総じて成果が残せた合宿となりました。 引き続き実施していきたいと思います! 別チームのブログはまた後ほど。 それでは!