注目キーワード
  1. react
  2. docker
  3. インターン

Sunriseに参加しました。| Voyage Groupエンジニア向けインターン

偶然に偶然が重なりVoyage Group主催のインフラ構築のインターンに参加してきました。

 

Sunriseとは

1秒間に数万リクエストを捌くアドテクエンジニア陣からのミッション。

『大規模リクエストを捌きつつ安定して価値を出し続ける広告プラットフォームを構築せよ!』
広告配信システムの安定運用に携わるエンジニアから、大規模リクエストを捌くために必要な設計・構築について学べます。
手を動かしながらWebサービスを作りはじめ、スケールしながら安定して価値を出せるシステムを設計していきましょう!
(Voyage Groupの募集ページより)

簡単に言うと、大規模なサービスを作るときのインフラってどうしたらいいんだっけ?っていう個人で開発していてはなかなか経験することのない部分を二日間で体験できるインターンです。

Treasureと肩を並べるVoyage Groupの2大エンジニアインターンです。(知らんけど)

Treasureに関しては僕の過去記事をご覧ください。

Treasureに参加した話|Voyage Group エンジニア向けサマーインターン

参加に至った経緯

実は前日まで、参加する予定はありませんでした。笑

たまたま別の用事で東京にきていて、前日にVG人事のHさんとランチにいく機会がありました。

メインの用事は火曜日だったのですが、他社の選考をついでに入れていたら気づいたら金曜から東京にいて土日暇だな〜と思っていました。その話をしたら、

「それならsunrise遊びに来て後ろで話聞くだけ聞いといたらいいじゃん。直前だからアカウントとかは用意できないけど。あと、欠員が一人出てるからもしかしたらそこはい入れるかも」

と言ってもらって、実験レポートはあるもののどうせ暇だしちょっと顔でも出すか〜と軽い気持ちで参加しました。

で、実際に行ってみると、早速グループワークに参加することに。w

しかも、AWSのアカウントがみんなAdminだったので、班員の強いやつが秒で俺のアカウントを作ってくれてすぐにフルコミットできる状態になりました。

という偶然に偶然が重なった結果、フルでsunriseに参加することになりました!

内容

用意されているgolangのアプリケーションサーバー(hakaru)をグループごとにAWSにデプロイして、そのサーバーを強化して大量のリクエストが来ても捌けるように改修していくというのがメインミッションでした。

闇雲に改善するのではなく、仮説検証を踏まえて問題がここにあるからここを直そうとグループごとに議論して修正していくという実務に近い形です。

デプロイしたアプリへの負荷のかけ方は、これまた高負荷をかけられるインスタンス(kakeru)を使って実験するというものでした。最大秒間4万リクエストぐらいをかけられたので恐ろしいインスタンスだな〜と思って使っていました。

 

チームのメンバーが意味わからないぐらい強く、僕は言われたことをやるかモブプロしてるのを眺めるかAWSの機能について調べるかぐらいのことしかできませんでした。

最終的にはかなりの負荷分散ができたことと、AutoScalingでインスタンスをたてまくった(20台ぐらい)ことが合間って、最大火力のkakeruのリクエストをエラー0で捌ききるこができました。

 

学んだこと

わからないことが多すぎてもはや全てが僕にとって学びでした。今回学んだことをざっと書き出すと、

  • AMIでインスタンスのイメージを作成してそれを元にインスタンスを立てることができる
  • RDSは複数インスタンスあってもDBをよしなにやってくれる
  • cloud watchはログとかをよしなに可視化してくれる
  • packerってやつがAMIをよしなにしてくれる
  • s3にバイナリをアップロードしてそれをインスタンス内で持ってきて起動したらデプロイ完了
  • auto scaling groupを作っておけばよしなにインスタンスを起動したり消したりしてくれる
  • ランコマンドを使えば一括でインスタンスに対して特定のコマンドを叩くことができる
  • ユーザーデータを使うと起動時に走らせるコマンドを指定できるので上記をさらに自動化できる
  • エフェメラルポートの解放する数を増やすことで一台あたりのTCPコネクション数を増やすことができる
  • DBとのコネクション数を指定したりpoolする数を指定したりすることができる
  • tsungという高負荷をかけるためのツールがある
  • 複数のデータをまとめてinsertするbulk insertを使うとDBの処理回数が減り捌ける数が増える
  • bulk insertはgoroutineを使わないと排他制御ができない(httpHandlerがgoroutineだから)
  • fasthttpはfast
  • インスタンスのcpu使用率が低いならスペックを変える等の最適化を図る必要あり

ざっと、これぐらいのことは学ぶことができました。

「よしなに」を言語化できるぐらいには完全に理解したいと思います。

 

思い出

さて、真面目な話はこれぐらいにしておいて、楽しかった思い出を綴ってみたいと思います。

スマブラ

ちょうど最近Switchのスマブラが発売されましたよね?持ち運びに便利だから持ってきたやつがいまして、休憩中にみんなで一緒んやっていました。w

ちょうど各チームにディスプレイがあったのでいい感じに遊べました。

(勝手に引用させてもらってます)

AJITO

久しぶりにAJITOで飲みました。今回はIPA系のビールも用意してくださって一回飲んでみたかったのでとてもありがたかったです。よなよなエールと青鬼をいただきました。

僕が普段水として飲んでいる99.99のグレープフルーツ味もありいつもまして最高の環境でした。

また、Hさんの秘蔵の30年物ぐらいのカリラも飲ましていただきとても幸せでした。

12年物のカリラは飲んだことがあったのですが、比べ物にならないぐらい美味しかったです。(このいっぱいでへたしたら5桁ぐらいのお値段かも、、)

他にも有名なアイリッシュ系のスコッチの飲み比べや秘蔵の日本酒をいただくことができて本当に幸せでした。

 

お礼

Hさん、ナミさんはじめVGクルーのみなさん、急な参加でしたが暖かく受け入れてくださって、ありがとうございました!

多くのことを学べましたし、胃袋も喉も満たされました。

ブログではありますが、この場を借りてお礼にかえさせていただきます。

他の参加者

同じ回ではなかったのですが、夏に同じくVoyage Groupのインターンで一緒だったよっしーが2月開催のSunriseに参加したようです!

大規模サービス構築インターン Sunriseに参加してきた