こんちには!やっはーと申します。
グッドパッチが提供するプロトタイピングツール Prott のバックエンドエンジニアをやっております。

Prottのバックエンドチームはシステム保守を専任とするエンジニアはおらず、機能開発のためのアプリケーションも書くエンジニアばかりです。
しかし、人数は少なく、SRE(Site Reliability Engineering)チームを組むには足りません。
そんな限られたリソースでも、増加するProttのユーザー数やデータに対して運用し続けることができています。

今回はWebサービスの運用という観点から、どのような周期と頻度でプロダクトを保守しているのかをご紹介します。

Prottとはどんな保守が必要とされるシステムなのか

そもそもProttに必要な保守とはどんなものでしょうか。

Prottはプロトタイピングツールであり、コラボレーションツールでもあります。
アイデアが思いついた瞬間や、プロトタイプを誰かに共有する時、そこから新しいアイデアを提案する時など、様々な利用シーンを想定しています。特に平日のオフィスアワーには沢山のアクセスがあります。

しかし、Prottはライフラインを守るような種類のサービスではありません。
例えば、利用機会の少ない土日にProttが1時間落ちていても気がつかないユーザーは多いと思います。
(もちろん土日もしっかり稼働させていますし、緊急時には対応も行いますが!)

そのため、99.999%の可用性を目指すことよりも、最も重要なことは、多くのユーザーが利用する時間帯にこそ、できる限りストレスなく、安全に利用し続けられる サービスを提供することです。

どうやって保守しているのか

そんなProttのアプリケーションの開発を続けながら、保守として行なっていることを、日・週・月に分けて挙げてみます。

毎日やっていること

日々のタスクはプロダクト改善に向けたバックエンドAPIの開発がメインです。
その時間の確保のため、毎日やることにルーティンはなるべく入れず、自動化を心がけています。
もちろんその自動化を推し進めていくことも、大切なタスクの1つです。

まず、Prottの安心・安全な利用のために、セキュリティの担保は非常に重要な要素です。
その状況をいち早くキャッチするために、以下のような異常時にはSlackのチャンネルにアラートとして通知される仕組みを構築しています。

  • 各種ミドルウェアやライブラリのセキュリティ脆弱性
  • アンチウィルスソフトによるウイルスの有無
  • 改ざん検知ソフトによる重要なデータの変更
  • バグ検知ソフトによる未知のサーバーエラー

また、一般的なことですが、例えば、Mackerelなどのモニタリングツールを利用し、CPU使用率、レスポンスタイム、エラー数などについても、特定のしきい値を超えるとSlackに通知されます。

毎日やっていること、これは総じて基本的な アプリケーションの保守 です。
しかし、なるべくこれらの確認に工数がかからないようにしています。

毎週やっていること

発生したことの簡単なまとめと、レポーティングをしています。
これは少しでも属人化せずに対応できるように、他のメンバーに状況を伝えることを重視しています。
しかし、ここでもあまり時間を使うわけにはいかないので、他のメンバーが集まる定例の中で5分程度で話しています。

まず、以下のような項目について10行程度で箇条書きにしてまとめています。

  • 発生した障害やバグについてのサマリ
  • その週に改善したこと
  • 次にやっていくこと

ここで大事にしていることは以下の2つです。

  • 概要が理解できること
  • 詳細を伝えるためのリンクを用意しておくこと

その時に100%理解できていなくても、状況のかけらでもインプットしておくことで、他のメンバーが問題に直面した時に気が付きやすいようにします。

毎週やっていること、これは主に仲間への共有がメインとなるので、 チームへの保守 と言えます。
ここでは後からでも見返すことができるように、出来るだけ的確な情報を残すことを心がけています。

毎月やっていること

この1年間で一番収穫があったのはこれでした。
Prottのバックエンドチーム全員で集まり、その月の運用状況についての振り返り会を1時間程度とって行なっています。
この振り返りを行うことで、現状の共有やタスクの棚卸しができるようになりました。

主に以下のような項目について話し合います。

  • 障害・バグについての振り返り
    • 発生した内容についての確認や、対応した再発防止策などについて話し合います。
  • 未解決問題の確認
    • 前月までに発生していた未解決の問題について、改めて進捗などを確認します。
  • 異常な数値・ログの検査
    • 例えば、数ヶ月のメトリクス(モニタリングの数値)などから、毎日の数値の変化では気がつかない問題をあぶり出します。
  • その他、重要なことの再確認
    • 管理系のアカウントや、脆弱性情報などについて改めて確認を行い、作業漏れがないかと確認します。

ここまで来て、ようやく システムの保守 と言えるようになったと思います。
ここでの内容を元に、新たな改善計画を進めていきます。

私たちが守っているもの

こうして日々やっていることを整理すると、時間軸の大きさによって、保守していくスコープが変わっているのに気がつきます。
そして、日々の積み重ねこそが、Prottを稼働させ、ユーザーのデータと体験を守り続けているのだと実感できました。

こうして保守と開発のバランスを保ちながら進めていますが、実はうまくいかないことも多々あります。。。
しかし、これからも改善を積み重ねながら、安心・安全・快適なサービスを提供できるように、踏ん張っていきたいと思います!