CyberAgentさんのアドテクコンペで特別賞頂いた話

こんにちは、t-hiroyoshiです。
ハッカソンデビュー!ということでCyberAgentさん主催のアドテクコンペに参加してきた話です。

今回のテーマはアドテクで広告入札の部分に関わるDSP(Demand-Side Platform)を作るというものでした。
DSPとは飛んでくる入札のリクエストに対しいくらでどんな広告を出したいかを返すものです、なので求められるものとしては高トラフィック(今回は2000QPS)をさばきつつ配信する広告を選び適切な価格で入札できるものといった感じです。さらにDSPには応答速度も問われ今回は100ms以内にレスポンスが返せないものは無効になるという設定でした。最終的な評価はCPC(クリックあたりのコスト)と予算の消化率で行われました。

参加した理由ですがそろそろプログラミングやり始めて1年だしハッカソン的なのに出てみたいなって思っていた時にScalaMatsuri2016で見かけたCyberAgentさんのホームページ見てみてみたら学生向けのハッカソンの参加者を募集していて、何か面白そうだし応募してみたところ参加権を貰えたというのが理由です。

作ったもの(作ろうとしたもの)

僕のチームはエンジニアの自分とデータサイエンティストのSou Konishi, Kouichi Takayamaの3人チームでした。お互いの強みを生かしつつなるべく依存し合わないような設計をしようと以下のようなアーキテクチャにしました。

architecture

最初はAWSに依存しすぎるのが嫌だったのでKinesisではなくKafka Cluster使いたかったのですが、時間的に厳しいと判断して大人しくKinesis使いました。またConsumer側はマイクロサービス群なので拡張性があり、新たな機能を追加しやすいかなとか考えました。
イメージとしてはScalaをマイクロサービスプラットフォーム的な立ち位置で置いてスケールさせたかった感じです。
Producer~Consumer間で評価モデルの受け渡しをどうするのか迷っていましたが、Kinesisを使うことにしたのでAWSどっぷりで良いやってなってめっちゃ早と噂のMemcachedをElastiCache上で使うことにしました。Memcached使ったことなかったのでどういう感じに使えば良いか分からずConsumer側(Python)でセットすると余計なヘッダが付いてくるとかに悩まされScalaのパーサー書くのが辛かったです。
評価モデルの生成はデータサイエンティストの2人がKinesisの強みを生かしたオンライン学習ベースで随時最新のモデルをExportできるようにしてくれました。僕はデータサイエンティストの2人がJupyter使ってデータこねくり回しているのを見てはーすっげってなってました。
AkkaにはKamonが仕込んであって、Actorの最適化や監視に使う予定でしたが時間切れで仕込んだだけになってしまいました。

最終的に骨組みを作りきりProducer側も上手く分散化ができたのですが、評価モデルの読み込みフォーマットと評価モデルの展開式をミスって計算が爆発してメッセージ消化しきれなくてActor死にまくるみたいになってまともに動きませんでした、Kamon生かせなかった…
完全にエンジニアリソースが足りておらず作り込み不足でした、ごめんなさい。

開発後にチームでプレゼンをする機会があったのですが、徹夜開発に加え本番でまともに動かなかった絶望感から頭おかしい感じのプレゼンになっていたと思います(笑)。
ですが、嬉しいことに技術選定や設計、オンライン学習などを評価して頂きなんと特別賞を頂くことができました。

感想と反省

今回はCyberAgentさん主催だったのでレッドブルを出してくれたりお菓子食べ放題だったりピザが食べられたり美味しいコーヒーを準備してくれたり環境としては至れり尽くせりで開発に集中することができました、感謝です。

チームメイトとの絆も(徹夜の)開発を通して生まれてとても濃いハッカソンになりました。
今回は開発時間的に忙しすぎてメンターの方々とあまり交流できなかったので少し残念でしたが、Kinesisの情報を頂いたりできたので良かったです。
KinesisやMemcachedといった技術は使ったことがなかったものなのでこの機会に使えることができて良かったですが、初ハッカソンということで張り切りすぎて技術選定を大きくしすぎた感があってエンジニアリソースが足りず最後まで作り込めませんでした。今回参加してみて実際のリソース感を体感できたので次回に生かしたいと思います。ハッカソンに限ってはベンダロックインを許容してどっぷり浸かった方が他に集中できて楽とか色々なことを学びました。

まとめると初ハッカソンは本番で動かないという絶望的な結果に終わりましたが、特別賞を貰えたので救われました。ハッカソン的な短期集中開発は自分の性格的にかなり楽しめたのでこれからもハッカソンに積極的に参加していきたいです。