インフラ新卒研修と社内ISUCONのはなし

インフラ部の荒井(@ryot_a_rai)です。

今年の4月、弊社には11名の新卒エンジニアが入社しました。そして現在、3ヶ月間の研修を受けています。ビジネスマナーから技術研修まで幅広く行われていますが、その中で5月下旬におこなったインフラ研修とその後の社内ISUCONについてご紹介します。

インフラ研修(講義)

f:id:ryotarai:20160610152008j:plain

インフラ研修はインフラ部に配属されるエンジニアに限らず、全新卒エンジニアが参加する研修です。日常業務でコードを書いてサービスを開発していくうえで知っておいてほしい、インフラに関する基礎知識や共通言語を獲得することを目的としています。合計3日間をインフラ部の@kani_bと分担して講義しました。研修内容の内容はざっくりと以下のようなものです。

1日目

  • インターネットとは
    • ブラウザでウェブサイトを閲覧する際になにが起きているのか
    • IPからHTTPまでざっくりと
  • Webインフラアーキテクチャ概観
    • 三層アーキテクチャ(Webサーバ層、Webアプリーケーション層、データベース層)の話
    • スケールイン/アウト
  • Vim超入門
  • アプリケーションサーバ
    • Rack, Ruby on Railsの仕組み、役割
    • WEBrickやUnicornなどのHTTPサーバの話

2日目

  • データストア
    • MySQL
      • スロークエリ, explain, インデックス
      • トランザクション, ロック
      • レプリケーションとスケールアウト
    • Memcached
      • slab allocator, consistent hashingなど使う上で知っておきたい知識
    • Redis
      • Memcachedに比べた利点や使いどころについて
    • 全文検索
      • Solr, Elasticsearchの役割や利点について
  • Webサーバとプロキシ
    • nginx
      • 静的ファイルの配信
      • Unicornなどアプリケーションサーバの前段に配置する意味

3日目

  • その他の構成要素
    • キャッシュ
      • Railsキャッシュストア
      • Varnishによるレスポンスのキャッシュ
    • CDN
      • CDNの役割や利点について
    • バッチ処理
      • バッチ処理とはなにか
      • 弊社のバッチ処理環境について
      • バッチを書く際に気をつけるべきこと
  • Infrastructure as Code
    • なぜコードで記述するか
    • Itamae, Serverspecによるサーバプロビジョニング
    • これまでの手作業を自動化してみる
  • いわゆる”クラウド”について
    • AWSなどいわゆるクラウドサービスの利点と各種サービスについて

全体として自分で触って覚えられるようにハンズオンを多くおこないました。ひとりひとりVirtualBox( + Vagrant)でVMを構築し、その中で演習をできるようにしています。例えば、自分で実装したRackアプリケーションをWEBrickやUnicornで動かしたり、nginxを前段に挟んでベンチマークを取って効果を確認したりしました。

段階グランプリ(社内ISUCON)

4日目は新卒研修のフィナーレとして段階グランプリ(社内ISUCON)を開催しました。ISUCONは年に一回開催されているパフォーマンスチューニングコンテストで、段階グランプリはその社内版です*1。段階グランプリは新卒研修の一環ですが、せっかくなら新卒以外の社員にも参加してもらおう、ということでエンジニア全体で参加者を募り開催しました。参加者は新卒11名(4チーム)、新卒以外23名(9チーム)となり大盛況でした。

準備

今回の段階グランプリの準備・運営はインフラ部の3名(@mirakui, @kani_b, 私 @ryot_a_rai)でおこないました。具体的には以下の準備をしました。

  • 参加者ポータルサイト(mirakui)
    • ベンチマークを実行したり、ベンチマーク結果を見たり
    • 社内の参加者以外からも見えるようにして、お気に入りのチームを応援できるようにしました
    • 素敵なドメイン(段階.jp)でアクセスできるようにしました
  • 参考実装(ryot_a_rai)
    • 複数言語実装は用意せず、Ruby on Railsでの実装のみを用意しました(弊社で最も多く利用されている言語・フレームワーク)
    • 新卒研修で学んだことを活かせるよう、N+1クエリ、スロークエリなど日常でお目にかかるような消耗ポイントを用意しました
    • テーマは「雑実装なクックパッド」でした
  • ベンチマーク(ryot_a_rai)
  • サーバの準備(kani_b)
    • 参加者の環境やベンチマーカなどを用意
    • 今回はAWS EC2上で1チームにつきc4.largeを3台(io1 EBS 100IOPS)を用意しました
      • gp2を使っていないのはバーストを防ぐため
    • メインのAWSアカウントとは別のアカウントを利用していたため、インスタンス数の制限に引っかかって、急いで緩和申請を上げました…

余談ですが、新卒研修準備、社内ISUCONの開発合宿に利用したヴィラージュ伊豆高原がよかったです。会議室や部屋によっては大きめのテーブルがあり夜中まで開発をやっていけますし、いい感じの温泉がありました。

結果

f:id:ryotarai:20160610151941p:plain

最終結果は上のようになりました。本家ISUCON本選出場勢(@sora_h, @eagletmt)が大人げないスコアで優勝しましたが、新卒チームも初期スコアの4, 5倍のスコアを出し、新卒研修の成果が見てとれました。参加者の感想もおおむね好評で今後も定期的に開催していきたいと考えています。

まとめ

以上、今年のインフラ研修についてご紹介しました。今年は講義形式や社内ISUCONが初回だったこともあり、準備も大変でしたが、今年の経験を来年以降にも繋げられるといいと思っています。こんな新卒研修や社内ISUCONに参加したい、主催したいというあなた、ぜひ一緒にやっていきましょう!

*1:本家ISUCONについてはこちら

/* */ @import "/css/theme/report/report.css"; /* */ /* */ body{ background-image: url('http://cdn-ak.f.st-hatena.com/images/fotolife/c/cookpadtech/20140527/20140527163350.png'); background-repeat: repeat-x; background-color:transparent; background-attachment: scroll; background-position: left top;} /* */ body{ border-top: 3px solid orange; color: #3c3c3c; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ Pro W3', 'Hiragino Kaku Gothic Pro', Meiryo, Osaka, 'MS Pゴシック', sans-serif; line-height: 1.8; font-size: 16px; } a { text-decoration: underline; color: #693e1c; } a:hover { color: #80400e; text-decoration: underline; } .entry-title a{ color: rgb(176, 108, 28); cursor: auto; display: inline; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ Pro W3', 'Hiragino Kaku Gothic Pro', Meiryo, Osaka, 'MS Pゴシック', sans-serif; font-size: 30px; font-weight: bold; height: auto; line-height: 40.5px; text-decoration: underline solid rgb(176, 108, 28); width: auto; line-height: 1.35; } .date a { color: #9b8b6c; font-size: 14px; text-decoration: none; font-weight: normal; } .urllist-title-link { font-size: 14px; } /* Recent Entries */ .recent-entries a{ color: #693e1c; } .recent-entries a:visited { color: #4d2200; text-decoration: none; } .hatena-module-recent-entries li { padding-bottom: 8px; border-bottom-width: 0px; } /*Widget*/ .hatena-module-body li { list-style-type: circle; } .hatena-module-body a{ text-decoration: none; } .hatena-module-body a:hover{ text-decoration: underline; } /* Widget name */ .hatena-module-title, .hatena-module-title a{ color: #b06c1c; margin-top: 20px; margin-bottom: 7px; } /* work frame*/ #container { width: 970px; text-align: center; margin: 0 auto; background: transparent; padding: 0 30px; } #wrapper { float: left; overflow: hidden; width: 660px; } #box2 { width: 240px; float: right; font-size: 14px; word-wrap: break-word; } /*#blog-title-inner{*/ /*margin-top: 3px;*/ /*height: 125px;*/ /*background-position: left 0px;*/ /*}*/ /*.header-image-only #blog-title-inner {*/ /*background-repeat: no-repeat;*/ /*position: relative;*/ /*height: 200px;*/ /*display: none;*/ /*}*/ /*#blog-title {*/ /*margin-top: 3px;*/ /*height: 125px;*/ /*background-image: url('http://cdn-ak.f.st-hatena.com/images/fotolife/c/cookpadtech/20140527/20140527172848.png');*/ /*background-repeat: no-repeat;*/ /*background-position: left 0px;*/ /*}*/