見出し画像

ライフイズテックレッスンのサービスレベルをさらなる高みへ

今日は、私たちが提供しているオンラインプログラミング学習教材「ライフイズテックレッスン」のサービスレベルを向上させるための取り組みについてご紹介します。


ライフイズテックレッスンのサービスレベル目標

ライフイズテックレッスンは、中学校・高校の情報の授業のために開発されたオンラインのプログラミング学習教材です。生徒が自律的に楽しんで学べる仕組みや、先生が授業を進めるときの負担を減らす機能を提供しています。現在、全国500以上の自治体、2,650校の公立・私立学校、約50万人の生徒に利用していただく規模にまで成長しています。

私が所属しているインフラ/SREグループでは、様々なデータを取得しサービスレベルの指標として設定しています。その中でも最も重要なのが稼働率です。具体的には、利用できないとユーザーに深刻な影響が出る以下の機能が正常に稼働しているか、稼働している時間の割合がどれくらいかを常にチェックしています。

  • 生徒の皆さんがログインしてレッスンのリストと教材画面を表示できる

  • 先生の皆さんが管理画面にログインして表示できる

こちらの確認にはDatadog Syntheticsの機能を利用しており、これまで稼働率の目標を99.95%(直近90日)に設定していました。

Datadog Syntheticsの画面

サービスレベルを改善するために何に挑戦したか?

うれしい悲鳴ではありますが、サービスの利用者数の大幅な増加に伴って、昨年の9月頃から負荷の上昇やパフォーマンスの低下が見られ始めました。そこで、サービスの信頼性を保つために、以下の2つの大きな対策を行いました。

1. アプリケーションパフォーマンス管理(APM)の導入

まずは「推測するな計測せよ」ということでDatadog APMを導入し、実際のユーザーのアクセスでどこに時間がかかっているか、負荷の原因になっているのはどこか、を見える化しました。その結果、特に教材ファイルを格納しているストレージへのアクセスに問題があることが明らかになりました。

2. ファイルストレージの移行(Ceph → Amazon FSx for OpenZFS)

APMで分析した結果を踏まえて、問題となっている教材ファイルのストレージサーバーを移行することに決めました。当初、EC2上に構築したCephというストレージを利用していましたが、事例やノウハウが少なく問題が起こったときの運用も困難になっていました。

ライフイズテックレッスンはAWS上で稼働していることもあり、移行先は「Amazon FSx for OpenZFS」を選択しました。Amazon FSx for OpenZFSは、ファイルシステムにOpenZFSを採用しNFSプロトコルでアクセスできる共有ストレージです。高性能でかつコストを抑えることができ、個別最適な学びを実現するための多数の小さな教材ファイルを格納するというサービスの用途にも合っていました。

検証を行いパフォーマンスを確認した後、Amazon FSx for OpenZFSへの移行した結果、最大レスポンスタイムが90%改善し、コストを75%低減することができました。

移行後のレスポンスタイム改善

今後のサービスレベル目標と達成するための戦略

上記のようなチャレンジが功を奏して、6月末時点で稼働率は99.95%という目標をほぼ達成することができました。そこで弊社の新年度となる7月から、次なる目標をさらに厳しい99.99%に引き上げることにしました。月間でわずか4.38分、年間でも52.56分しか停止できないという高い目標です。

こちらの目標を達成するためには、より積極的な対策が必要です。具体的には以下の2つを考えています。

1. 定期的な負荷試験とパフォーマンス改善

負荷やパフォーマンスに関わる課題を事前に見つけ出すため、負荷試験のシナリオの改修と実施を社内で仕組み化し、定期的に実施していきたいと思っています。考え方はセキュリティの「シフトレフト」と近く、リリースしてユーザーに影響が出てから対応するのではなく、リリース前に先手を打って改修するフローを作っていきます。

2.リリースに問題があったときの迅速な切り戻し

サービスで新しい機能や不具合の修正をリリースした後に問題が発生した場合、現状では、前のバージョンのコンテナイメージに切り替えて起動し直す必要があり、復旧が完了するまでに少し時間がかかってしまいます。
そのため、最初は一部のユーザーのみに公開する方法(カナリアリリース)やインフラ環境ごと切り替える方法(Blue/Greenデプロイ)を導入して、できるだけ早く正常に稼働する状態に戻し、ユーザーへの影響を最小限に抑えることを目指します。


今回ご紹介したような取り組みや試行錯誤を通じて、ライフイズテックレッスンのサービスレベルをさらなる高みへと押し上げ、より快適なプログラミング学習環境を提供することが私たちの目標です。今後も七転八倒のストーリーをこちらで共有していきたいと思います。


ライフイズテック サービス開発部では、月毎に気軽にご参加いただけるカジュアルなイベントを実施しています。開催予定のイベントは、 connpass のグループからご確認ください。興味のあるイベントがあったらぜひ参加登録をお願いいたします。皆さんのご参加をお待ちしています!