ISUCON11参加記録

 見出しの通り、8/21日にISUCON11にチームメンバーと3名で参加してきたのでそこで思ったことだとかを記録に残していきたいと思います。

予習

 ISUCONに参加するのは今回が初めてだったので、予習としてISUCON9の予選問題の環境構築などをしました。できればボトルネックを改善して、スコアを挙げるところまでした方が良かったのですが、AWSで公開されているイメージを使用して環境設定を行った後、ソースコードをgitに挙げるところまでして力尽きました。

 チームメンバーとも別日に環境構築と解析に使用するツールのセットアップの確認などしたのですが一日でできるのはそこまででした。(もっと時間とるべきだった)

結果

 結果としては最終スコアが0で本選通過なりませんでした。最大スコアはDBにインデックスを適用するなどして4000程度でした。

 僕個人が行ったこととしては、解析によって発見したボトルネックを改善しようとしていましたが、ベンチマークのアプリケーション互換性チェックが通らず競技時間内に終えることが出来ませんでした。アプリケーションの実装をしっかりと把握しきれていなかったりだとか、デバックに必要な情報を出力しようにも、いつもはログなどあまり考えず標準出力に出てきたものをみてデバックしていたので、今回の環境ではデバックに必要な情報などをどこから得るのかわからず混乱してました。

 競技時間は7時ごろまで延長されてましたが、その日コロナワクチン打った関係で左腕がかなりしんどかったので6時半ごろに切り上げました。

反省点

 今回の経験を踏まえての反省点を列挙していきます

ログの出し方わからない件

 ログをどう出すかとかがほとんど理解できていなかった。そのせいでどこが間違っているのかなどのあたりを付けるのがとても難しかった。ISUCONのポータルに出てくるベンチマークの結果ログはどこからきているのかとか協議中はわかってなくて?となっていた。(今ならわかる、アプリケーションを実行しているサーバにリクエスト投げてるサーバのログでした。練習の環境構築に使用してたイメージがアプリケーションとベンチマークが同じインスタンス上にあったので混乱してたのでは)解析に使用するツールのログとかを自由に出力できるようになりたい。

 Goでデバック用のコードと切り替える機能があったような気がするけどまだ理解してない、勉強する。

アプリケーションの実装はよく理解しよう

 正直アプリケーションの実装をちゃんと理解していなかった気がする。今回のDBのとあるテーブルではカラムにidとjin_isu_uuid?みたいに二つidみたいなのが用意されていて、それぞれがどんな役割を担っているのか最後までわかってなかった。理解できていれば互換性チェックで引っかかるようなコードが発生する確率は低くなっていたと思う。アプリケーションを一通り手で動かしてすべてのAPIを実行させるぐらいしてもよかったと思う。

すべてチームメンバーに共有する(あたりまえ)

 チーム内での情報共有がうまくいかなかった(主に僕のせい)

必要な情報は共有する

 gitでbranch切り替えてベンチマーク行ったのは僕なのに、そのときの手順だとかを残していなかった。ベンチマーク時の手順を統一していなかったために、僕がまた自分の実装のベンチマークを走らせようとしたときに切り替えができず困った。

ディスコードでメンバーのメモの意味を理解していない。

 情報を共有する側は他人がそれを見て理解できるように、極力わかりやすくするべきだし、共有される側はわからなかったらわからないと言わないとメモ以上の情報を得ることはできない。あとrandomチャンネルが汚くなりすぎたので、チャンネルを増やして整理すべきと感じた(というか必要な情報をrandomチャンネルに投げるべきじゃなかった)

ツールとか自分でも使えるようにしたい

 今回は解析をメンバーにまかせっきりだったので自分でもツールなど使えるようにしときたい。

今回使ったツールやコマンド

名前 用途 セットアップ 使い方
pt-query-digest クエリの解析に使用する わからん わからん
discocat 標準出力→discord botできるGo製のツール できる わかる
alp LTSV(Labeled Tab-serapated Values)形式のログファイルを集計する(らしい) わからん わからん
net-data リアルタイムなリソースモニタリング わからん わからん

次回に向けて

  • 一人で参加しようかなと考えていたりいなかったり(AWSのクーポンもらえるのはチームリーダーだけ)
  • makefileナンモワカラン(今回はツールのセットアップに使ってた)

CAのサーバサイドインターン参加記録

 こんにちは、やまちゃんです。

今回はCyberAgentさんの3weeksサーバーサイド育成型インターンシップONLINEに参加してきましたので、振り返りを記録に残したいと思います。

 

3weeksサーバーサイド育成型インターンシップONLINEとは?

3週間でGo言語を使ったAPI開発を学べるすごいインターン

3名の異なる部署に勤めるメンターさんから様々な角度の実務レベルのコードレビューを受けられるうえに、同世代の優秀なエンジニアから刺激を得ることができます。

初日

午前中はオープニングと称して、軽い説明とインターンをサポートしてくださるメンターの方々の自己紹介がありました。
皆さんメディア部門やSGEのゲーム部門などに所属しており、それぞれ開発しているサービスすべてが聞いたことあるもので初日からテンションが上がったのを覚えています。

午後からは基礎課題のハンズオンを行いました。
GitHubから課題用リポジトリにて自分用のmasterブランチを切り、それをクローンして開発は始まりました。git cloneってあんまり使う機会なくてここで一度詰まりました。自分用にチートシート作っとくべきかもしれませんね。。。ただある程度のGo言語に関する知識の蓄えはあったのでその後はすんなりとハンズオンについていくことができました。

基礎課題

基礎課題ではあらかじめ決められたAPIを仕様書をもとに実装します。内容としては割とロジックがばらけてて、新鮮味をもってそれぞれ実装にあたれたのでよかったなーと感じています。

どこまで書いていいかわからないのでこれくらいにとどめておきますが、難易度的にはGoの基本的な文法がわかればスムーズに実装できると思います。

発展課題

発展課題は個人で内容を決めることができるためとても自由です。自分のしたいこと、必要だと思うことを学習し、アウトプットします。

僕が一番時間をかけたのはテストでした。
最初はテストはすぐに実装できるだろうと考えていたのですが、調べていくうちに今の実装ではソースコードの信頼性を担保するようなテストを書くことが困難であることがわかりました。

必要な知識を得るため、公式のドキュメントや記事を読み漁りました。インプットにかける時間が比較的多かったため、実装できた量は多くはなかったのですが、品質は自信を持てる程度のテストはかけたかなと思っています。

中にはセキュリティ方面のことをしてる人(難しかった...)や、インプットした知識をもとにQiitaの記事を投稿しまくっている人とかいましたw

雰囲気

 めちゃくちゃ良かった。

技術レベルはもちろん高いんですが、それよりもメンタルおばけだな、と感じる人がたくさんいました。土日にもくもく会開いたり、Slackで議論してたりととても積極的で見習いたいです。

インターン先からの評価を気にしているんじゃ?と考える方もいると思います。

僕もそうでした。中学生のころ某学習塾がやるような学習合宿を斜に見てました。

しかしこのインターンでは、ただ技術的好奇心のためにやりたいからやる、そんな姿勢がありました。

集団全員が向上心と積極性を持って課題に取り組むとこんなに一体感あるんだな、と思いました。それと共にこんな環境で働きたいとも感じました。

総括

最後になりますが、今回のインターンを企画、実施していただいた人事、運営、メンターの方々にお礼申し上げます。ありがとうございました!
リモート開催にもかかわらずこれほど高い満足感を得られた皆様のおかげです🙇‍♀️

私はこのインターンで技術的にも精神的にも成長できたと感じています。
こんなの書いて公表してること自体、昔の自分からは想像できません。

高い志をもった仲間とのつながりもできました。
今後はTwitterなどで刺激を与えあいながら切磋琢磨していきたいと思います。

おわり

追記

初めての記事なので感想とか改善点とかありましたら
Twitterなどでご指摘いただけるとありがたいです😍