アドテクコンペ とは
アドテクコンペ~サーバーサイド&データ分析~は、サーバーサイドエンジニアと機械学習エンジニアがチームとなって、ビッグデータを活用した広告プロダクト開発に取り組む3日間のコンペティションです。
僕はDチームとして出場!
アーキテクチャ
-
メインフロー
- ユーザーデータを取得する
- 予算取得とCTR計算のリクエストを同時に送る
- 両方帰ってきたら、整合性(予算が足りるかなど)の確認をして、レスポンスを返す。
-
予算減額フロー
- リクエストが来たら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使う学生増えろ〜
プログラミングが好きな人には最高な会間違いない!こんな会を開催してくれてありがとうございます!運営お疲れ様でした?
コメント
Хорошая статья