【インターン】CAアドテクコンペ 参加してきたよ(3位)

アドテクコンペ とは

アドテクコンペ~サーバーサイド&データ分析~は、サーバーサイドエンジニアと機械学習エンジニアがチームとなって、ビッグデータを活用した広告プロダクト開発に取り組む3日間のコンペティションです。

ページが存在しません。 | 株式会社サイバーエージェント
サイバーエージェントは「21世紀を代表する会社を創る」というビジョンを掲げ、インターネット領域で時代の変化に合わせた様々な事業を展開しています。国内トップクラスのインターネット広告代理事業や、新しい未来のテレビ「ABEMA」を提供しています。

僕はDチームとして出場!

アーキテクチャ

  • メインフロー

    1. ユーザーデータを取得する
    2. 予算取得とCTR計算のリクエストを同時に送る
    3. 両方帰ってきたら、整合性(予算が足りるかなど)の確認をして、レスポンスを返す。
  • 予算減額フロー

    1. リクエストが来たらDBに使用額をWrite

使用周辺技術

GCP環境構築
terraformを使用

CI/CD
CircleCIを使用
GithubにPushしたら自動でGKEにdeployするように
CircleCI->GCR->GKE

監視ツール
DATADOGを使用
予算残高もDATADOGを使えばおしゃれに表示できるぜ?

負荷試験
Gatlingを使用
負荷試験をかける側もマシンスペックを要求されるので、
GKE上にJobという形で展開し、結果はBucketに保存。

1日目

機械学習側2名
サーバー側3名←この中に僕

大まかな分担としては

  • メインサーバー(Scala)←僕
  • 予算を取得するサーバー作成(Ruby)
  • 予算が使用されたら書き込みを行うサーバー(Go)

gRPCなどは使わずに素直にHttpで通信しようかなと。

サーバー側はお互いにどういうデータ型でHttp通信するか話し合いながら作業

2日目

この日大きなハプニングが二つ起きて、
午前: 予算を取得するサーバーの担当の方が体調を崩したようで、そこをScalaで実装することに!
午後: ScalaでMySQL接続にSlickというライブラリを使っていたがSQL文へのパース部分などで100msかかっていることが判明し、Redisに変更することに(時刻: 20:00)^^

帰ってからはもう一人のサーバー側メンバーの部屋で徹夜で開発!

3日目

MySQLからRedisへの変更作業を終わらせ、負荷試験で5000QPSの負荷に耐えられることを確認したらもう朝になっていた^^

会場についてからは、

  • k8sチューニング
  • Redisへのユーザーデータ投入作業
  • Model計算をScalaに埋め込む
    を急いでやったが、Redisへのユーザーデータ投入作業
    がうまくいかなかった。1GBものファイルを開こうとしたらOut of memoryで進まず。。。メモリを増やしても開けず万策尽きた
    (おそらく設定がうまくいかなくて、メモリーを増やせなっかた臭い、ここを乗り越えられなかったの人生で一番悔しいところかも?)

ユーザーデータが取得できないと身動きができず、204を返すほかなかった?
正直204を返すのすら諦めてたけど、しっかり返したおかげで3位を取ることができたのかもしれない!やってよかった〜

完成品スペック

GKE:
n-standard-8
node: 10
replica: 60
負荷試験
5000QPSの達成は確認済み、かなり安定していたのでもっとサーバースペック落としてもよかったか?

結果

全8チーム中3位というなんとも言えない結果。。。めっちゃ悔しい!
敗因ははっきりしていて、チームでの協力が足りなかった。タスクの分散がうまくいかなかったことにつきる。しかし
今までで一番集中してコードをかけたし、優勝は取れなかったけどめっちゃ楽しかった!
またこういう大会に参加したいし、次は絶対優勝したい!

その他

社員の方がとにかく話しやすい!話も面白いし、質問があったら積極的に聞くべし。質問がなくても雑談するべし✌️
そして飯に寿司があったみたいだが、モタモタ話してたら一個も食べれなかったw
あとScala使う学生増えろ〜

プログラミングが好きな人には最高な会間違いない!こんな会を開催してくれてありがとうございます!運営お疲れ様でした?

コード

随時修正中...
https://github.com/BambooTuna/LoadTest

コメント

  1. GreggBus より:

    Хорошая статья

タイトルとURLをコピーしました