dely engineering blog

レシピ動画サービス「kurashiru」を運営するdelyのテックブログ

未来のSREを最速で育てる!dely流SRE育成術、APOLLO計画の紹介

こんにちは。SREの@_skuwaです。
kurashiru(クラシル)を支えるインフラ作りや、ミドルウェアの開発等をやっています。

今日はdely SREチームが行っている障害対応訓練、APOLLO計画をご紹介します。

f:id:skuwa:20170804000901j:plain

SREチームの課題

クラシルは他に類を見ないスピードで成長しているサービスのため、一般的には半年から数年ごとに行わなければいけないような負荷対策を数週間でどんどん行っていく必要があります。
SREとしては非常に高いスキルや経験を要求されますが、それを持ち合わせているSREが市場的にはあまりいないというのが課題でした。

私はdelyに入社した時点ではSREとしてのスキルは持っていませんでしたが、入社して半年程度でSRE業務を行えるまでになりました。

私がSREとして戦えるまでに培ってきたノウハウを元に作った、最速でSREを育てる教育体制がAPOLLO計画です。

APOLLO計画

APOLLO計画の名前の由来ははNASAのアポロ計画です。
人類の月面着陸という困難なミッションを実現させたアポロ計画のように、SREを短期間で育成するという大きな目標を達成させたいという願いを込めての命名です。

APOLLO計画では大事にしているポイントが3つあります。

  • コマンドやコードに関しての知識など、大前提として必要な知識を身に付けてもらうこと。
  • “事実確認→仮説→検証→再発防止策の検討"というフローを徹底的に叩き込むこと。
  • 障害が起きそうな部分、ボトルネックになりそうな部分を嗅ぎ分ける嗅覚を身に付けてもらうこと。

各ポイントについて、APOLLO計画ではどのように教育しているのかをご紹介します。

1. ペアインフラ構築

APOLLO計画を受けてもらうエンジニアの多くはクラウド環境やインフラ構成についての知識がありません。
私と一緒に本番と同等の環境を作成するところからがスタートです。

どういった経緯があって今の構成になったのか、そもそもロードバランサーってどういう役割なの?みたいなところを解説しながら、0からの構築をしていきます。 その際には、少しでも疑問がある箇所、気になった箇所は必ず質問してもらうようにしています。

また、構築後は簡単なシェルスクリプトやcurlなどを利用して動作の仕組みを追ってもらいます。
ここでLinuxコマンドやアプリケーションの仕組みを知ってもらうとともに、どこまでが動いていて、どこまでが動いていないのかを把握できるようになってもらいます。
Linuxコマンドやシェルを1から覚えるのは非常に大変ですが、実際の業務では一部しか使わないことが多いです。そのため、より実践的なテクニックをペアプロ形式で覚えてもらいます。

2. 小さな課題をたくさんこなす

実際の障害では何かがトリガーとなって連鎖的に問題が発生するケースが多いです。しかし、いきなりそれを解決してもらうのは無理があります。
そこで、まずは1つのトリガーによってどこかが停止してしまうといったケースの課題をたくさん用意し、それを解決してもらうということに取り組んでもらいます。

具体的には設定ファイルの記述ミス、セキュリティグループの設定ミス、最適化されていないコードによるパフォーマンス低下等です。

”こういったことがトリガーになって、こんな現象が発生するのか〜”という知見を得てもらいます。
どこまでが動いていて、どこから動いていないのか。じゃあありえる可能性は?といった思考フローを徹底的に叩き込みます。

”あ、これAPOLLO計画でやった問題だ!”

と、実際の業務で思ってもらえることが理想です。

3. 実際に発生した障害の完全再現

まずは弊社の環境(AWS、Nginx、Fluentd、Rails、Goによるアプリケーションサーバー等)でしっかりとSRE業務を行えるようになることにフォーカスを当てています。
弊社ではオライリーのSRE本を参考にして、障害発生時にはPostmortemを残しています。
(Postmortemに関してはSRE本の15章に詳しく書かれています。英語版しかありませんが、8月12日に日本語版が発売予定です。)

Postmortemを元に実際に発生した障害を完全再現して、それの解決を課題として取り組んでもらっています。
障害を再現するのは運用側のコストがかなりかかるので、VacuumDecayというGo製のコマンドラインツールを作成し、コマンド一つで可能な限り障害を再現させられるような体制を作っています。

ここまで学習してきたことを活かしながら、実際の障害対応と同様の体制で復旧してもらいます。
取り組んでいるエンジニア達は、まずはボトルネックやどこで問題が起きているのかを必死に追っていこうとします。
しかし、これは実際の障害です。まず優先させるべきは正常な状態に回復させること、被害の影響を最小限に抑えることです。
そのため、積極的に経過時間を教えてプレッシャーを与えていきます。

影響範囲がこれぐらいで、ユーザーはもう戻ってこないかもしれないね〜、リテンションめっちゃ落ちそうだよね〜と、どんどんプレッシャーを与えます。
こうした中で課題に取り組んでもらうことで、SREとして大事な"システムを正常稼働させることの重要性"を知ってもらいます。

また、実際の障害対応と同様の体制での作業となるのでPostmortemをしっかり書いてもらいます。 そこで自分の行動の振り返りと、同様のことが二度と発生しないための仕組みづくりや運用方法を検討してもらいます。delyのエンジニアは本当に優秀なので、このレベルになってくると、私もなるほどそういう考えがあったのかと気付かされることも多いです。

この課題に取り組んでもらうことで、インフラエンジニアではなく、SREとしての仕事を覚えてもらいます。

新しい機能の実装は毎日のように行われていますが、障害はあまり発生しません。
そのため、一般的には障害対応やリスク予知のノウハウというのは短時間で身につきにくいものです。
ですが、delyでは障害をPostmortemとして記録し、”資産”として活用することによって、スピード感のあるSREチームを作っています。

最後にSREチームの紹介と募集

delyのSREチームは、超スピードで成長するクラシルを支えるチームです。

  • Rails、Go製アプリケーションの運用
  • 開発チームの作業効率アップのための開発環境作り
  • プッシュ配信基盤等のミドルウェア開発
  • FluentdやKinesisを利用したログ集計基盤、分析基盤の構築
  • CloudWatchやPrometheusでの監視基盤の構築
  • kubernetesなどのコンテナ技術の導入

など、業務内容は多岐にわたります。

組織も、プロダクトも、そしてAPOLLO計画もまだまだ未熟ではありますが、今のフェーズから一緒に世界一イケてるSREチームを作ってくれるメンバーを募集しています。
我こそはという最強SRE、APOLLO計画でSREになってみたいというエンジニアの方!
是非Wantedlyから応募してください!!

www.wantedly.com

www.wantedly.com