Studyplus Engineering Blog

スタディプラスの開発者が発信するブログ

新型コロナウイルスとStudyplus for School

新型コロナウイルスとStudyplus for School

こんにちは、Studyplus for School事業部エンジニアの島田です。

はじめに

新型コロナウイルス感染拡大により多くの学習塾が休業などの対応を求められる事態になりました。 これを期にオンライン授業を導入する学習塾が増え、「Studyplus for School」も期間限定で無償提供を開始し、それに伴い様々な対応をする事となりました。

info.studyplus.co.jp

今回は、無償提供を開始した2月末からの「Studyplus for School」のシステム改善について紹介します。

数値でみる変化

具体的な数値は非公開情報のため、各数値の増減率を見ていただきます。

生徒数

まずは生徒数の増加率から見ていきます。 2020年2月から2020年5月末の時点で380%以上の増加率となっています。

f:id:yo-shimada:20200601085634p:plain

各機能の利用数

各機能の概要は以下になります。

  • 生徒メッセージ:Studyplus for SchoolとStudyplusのアプリを利用した、先生と生徒のメッセージ機能
  • 保護者メッセージ:Studyplus for SchoolとLINEを利用した、先生と保護者のメッセージ機能
  • 学習記録:Studyplusのアプリを利用した学習を記録する機能
  • 学習計画:学習計画を登録し、オンラインでいつでも学習計画と進捗を確認する機能
  • 面談記録(カルテ):個別指導の指導記録や定期面談の内容を記録する機能

新年度から学校の休業要請まで(2019年4月~2020年2月)と、それ以後(2020年3~5月)の期間でどれくらい各機能の件数が増加したかを見ます。

f:id:yo-shimada:20200601085752p:plain

  • 生徒メッセージ:490%
  • 保護者メッセージ:187%
  • 学習記録:135%
  • 学習計画:66%
  • 面談記録(カルテ):61%

オンライン授業することになり、メッセージやファイルのやりとりをする事が急増しました。

リクエスト数

Application Load Balancerの日別リクエスト合計数

f:id:yo-shimada:20200601090228p:plain

こちらも3月から徐々に上昇していき4月末から急激な上昇をしています。

エラーの発生数

Studyplus for Schoolでは、エラーの追跡・監視にSentryを利用しています。

2019年9月からは一定のエラー発生でしたが、ユーザーが増加し始めた2月から増加し始めてきました。 リクエストの増加と共に、エラーの対応を徐々に始めることで3月、4月に爆発的にエラーが発生することを抑えました。 サービスの特性上、そこまで急激にユーザー数が伸びることを想定していなかったので、いくつかの機能でパフォーマンスの課題が出てきました。 また、それを起因として様々なエラーが多発するようになりました。 後述する対応と個別のエラーをつぶしてくことでエラー数も徐々に低減させていきました。

f:id:yo-shimada:20200601091404p:plain

DBのCPU利用率

改善施策の実施前後のRDSのCPU利用率の比較です。

非同期処理のジョブの中でSlowQueryが実行されることで、ユーザー数の増加に伴い当該ジョブの処理頻度が高まり、DBのCPU利用率が100%近くまで上昇するという事態になっていました。 後述するSlowQueryの改善等で利用率減らすことが出来ました。

f:id:yo-shimada:20200601092202p:plain

機能開発の優先度を検討する

2月時点で考えていた2020年の開発ロードマップを白紙にして、臨機応変に対応する事としました。 方針としては、オンライン授業により利用が高まっている機能のパフォーマンスや機能追加・改善を中心に対策していく事にしました。

機能要件

  • メッセージに機能追加:画像ファイルの送信はできていましたが、利用数の増加と共に要望が多く上がっていたPDF等の画像以外のファイル送信を出来るようにしました。
  • 保護者一斉送信:先生と保護者の1対1のメッセージのみでしたが、より保護者との連絡が多くなり、先生から同じ内容を一斉に送信したいという事で、保護者の方へ一斉送信が出来るようにしました。

tech.studyplus.co.jp

非機能要件:負荷対策

  • APIサーバーのEC2インスタンスを追加
  • 非同期処理のパフォーマンス向上:Studyplus for Schoolでは非同期処理にSidekiqを利用しています。EC2のインスタンス追加とDBのコネクション数を調整して、Sidekiqの並行処理数(Concurrency)をあげることで、ユーザー増加に伴う非同期処理の大幅な遅延を起こさないようにしました。
  • DBの冗長化、CPU利用率の低減:
    • Masterの一台構成からMaster・Slaveの冗長化構成へ変更
    • MySQL -> Auroraに変更。パフォーマンスインサイトを導入
    • パフォーマンスインサイトにより、DBのCPU利用率の上昇原因となっていたSlowQueryを最適化

さいごに

コロナショックにより学習塾のオンライン指導に注目が高まり、Studyplus for Schoolでも短期間のうちに利用者が急増しました。 こうした機能追加やパフォーマンスの改善はユーザーである先生方にも大変喜ばれました。

短期間で状況が目まぐるしく変化する中で、概ね首尾よく対応できたのではないかと思っています。 要因としては全ての要望に完璧に応えようとするのではなく、本質的な課題に対して実現可能なアイデアを出しそれを一つづつ実行していった積み重ねだと考えられます。

これを機会に、今後もオンライン授業というスタイルや、学習塾のICTはの活用が浸透し広がっていくと感じます。 テクノロジーによって教育がより良いものへなるように、その一助としてStudyplus for Schoolを通じて生徒・先生がストレスのなく学習出来る事を心掛けていきたいと思います。