$30 off During Our Annual Pro Sale. View Details »

想定外の負荷を乗り切ったオンライン教育サービスの裏側 / How We Overcame the COVID-19 Crisis

Takeshi Kondo
February 19, 2021

想定外の負荷を乗り切ったオンライン教育サービスの裏側 / How We Overcame the COVID-19 Crisis

Takeshi Kondo

February 19, 2021
Tweet

More Decks by Takeshi Kondo

Other Decks in Technology

Transcript

  1. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    想定外の負荷を乗り切った
    オンライン教育サービスの裏側
    @chaspy / Takeshi Kondo
    Developers Summit 2021

    View Slide

  2. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    @chaspy (Takeshi Kondo)
    ➔ Lead Software Engineer, Site Reliability at Quipper
    ➔ Community
    ◆ Japan Datadog User Group Organizer
    ◆ Terraform-jp board member
    ➔ Social
    ◆ Twitter: chaspy_
    ◆ Github: chaspy

    View Slide

  3. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    今日お話しすること
    Quipper が開発する国内・海外両プロダクトが
    どのように未曾有の危機を乗り越えてきたか
    オンライン教育サービスであるスタディサプリ / Quipper は COVID-19 により需要
    が急増し、当たり前に使われる New Normal となりました。この危機をコミュニ
    ケーションとエンジニアリング両面でどう乗り越えたのか、その事例を紹介しま
    す。

    View Slide

  4. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    Key Messages
    ➔ 問題vs私たち
    ◆ セクションの壁を作らずに問題に向き合うこと
    ➔ Fact-Based
    ◆ 事実(Fact)を元に計画を立て、計測し、意思決定すること

    View Slide

  5. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    Agenda | 01
    02
    03
    04
    スタディサプリ / Quipper について
    国内事例紹介
    海外事例紹介
    まとめ

    View Slide

  6. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    スタディサプリ / Quipper について
    01

    View Slide

  7. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    Quipper とはどんな会社?
    2010年ロンドンで設立、世界に向けた教育サービス Quipper を運営。
    2015年に M&A を経てリクルート傘下へ。
    以降、日本向けにスタディサプリ、海外(*1)向けに Quipper というブランド名でオ
    ンライン教育プロダクトの開発・運営を行っている。
    *1 フィリピン、インドネシアに展開中

    View Slide

  8. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    国内向けサービス
    小学生から受験生や大人まで、学習したい全ての人が学べる月額制のオンライン学習サービス。
    約4万本の録画授業動画が見られるベーシックプランのほか、オンラインコーチングプランや生配信で授業を受けられるライブプ
    ランなど、一人一人が自由に学習できるよう、様々なプランを展開しています。
    先生方が生徒個々人のレベルに合った最適な学習を提供できる校内インフラサービス。クラス全員に特定の講義や確認テスト、
    宿題を配信することができるほか、アクティブラーニングに使える教材も提供。
    生徒が夢中になって学び、希望する進路を実現することを支援しています。
    隙間時間に3分で学習できる英語サービス。リスニングと発話を鍛えられる「新日常英会話コース」、短期間でのスコアアップを
    狙う「TOEIC®L&R TEST対策コース」、「ビジネス英語コース」があり、業界初オンライン完結型コーチングも提供しています。

    View Slide

  9. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    海外向けサービス
    Quipper Schoolは小学校から高校まで、学校の教室で先生方をサポートするオンラインラーニングマネージメントプラットフォー
    ムです。先生方は限られた時間の中で、増え続ける複雑な校務、変化する教育過程の対応などに追われています。
    Quipper
    Schoolを通じて、私たちは先生の業務負荷を軽減するだけではなく、
    21世紀を生き抜く人材育成のお手伝いをしたいと考えてい
    ます。
    Quipper Videoは、いつでもどこでも自分のペースで学習できるオンライン講義動画サービスです。実力派講師によって解説さ
    れる短くまとめられた講義動画、図解説明の入ったわかりやすいテキスト、自分の苦手箇所がわかる到達度テストの三点セット
    によって、一人一人を自ら学べる生徒にします。教師向けプラットフォームである
    Quipper Schoolを使うことで、先生は生徒に
    対しQuipper Videoを使った学習を促すことも可能です。
    Quipper Campusは進学を考える高校生のための大学進学情報サイトです。地域や専攻による大学検索だけでなく、適性テス
    トを通じて自分の目指す進路に最適な教育機関を見つけることができます。現在インドネシアでのみ運営しています。

    View Slide

  10. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    日本 インドネシア フィリピン
    対象学年 小・中学校 高校 大学・社会人 高校 高校
    オンラインビデオ
    (B to C)
    オンラインビデオ&
    アセスメント
    (B to B to C)
    オンラインコーチング
    各国で様々なサービスラインナップにて事業展開をしています
    パーソナルコーチプラン
    サービスラインナップ

    View Slide

  11. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    47万人
    74万人
    26万人
    8万人
    4万人
    17
    サービス会員数推移
    サービス開始から 8年、有料会員数は国内外で 伸び続けています。最新の会員数は 2020年12月末時点の157万人。
    (2019年までは各年度の 累計)
    国外
    国内
    2014 2015 2016 2017 2018
    2013
    97万人
    110
    13
    2019
    127万人
    2020
    157万人

    View Slide

  12. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    詳細は “Quipper handbook” で
    検索🔎

    View Slide

  13. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    国内事例紹介
    02

    View Slide

  14. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    2020年3月、COVID-19 本格流行

    View Slide

  15. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    アクセス数(2020年2月~3月)

    View Slide

  16. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    2020年4月7日 緊急事態宣言発令

    View Slide

  17. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    アクセス数(2020年3月~5月)

    View Slide

  18. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    2020年5月 一斉休校
    地方自治体からの受注が増える

    View Slide

  19. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    Self-Hosted MongoDB の負荷課題
    生徒向けサービス
    先生向けサービス
    新規登録サービス
    AWS 内でもっとも IO 性能が高く、最も
    高価な i3en.24xlarge
    インスタンスクラスを使用

    View Slide

  20. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    これまではスケールアップしてきたがもう後がない
    https://quipper.hatenablog.com/entry/2019/09/26/080000

    View Slide

  21. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    解決策
    ➔ データによる需要予測と負荷緩和
    ◆ 今後何倍のユーザ数増加が見込まれるのか
    ◆ スパイクアクセスをいかに回避するか
    ➔ エンジニアリングによる解決
    ◆ エンジニアリングチーム一丸となり”できることはなんでもやる”
    ◆ 最大のボトルネックとなりうる MongoDB への抜本的対処

    View Slide

  22. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    データによる需要予測と負荷緩和
    ➔ 基本的には昨年度実績から予測するが、 ”
    一括受注”が昨年との差分
    ➔ 営業から定性情報をヒアリングし、予測に反映
    ◆ 学校により Active Learner 率が異なる
    ● 自治体主導で導入を決めたが、活用するかは学校に任されている場合
    ● 既に他の学年で活用されている学校に導入する場合

    View Slide

  23. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    セクションを超えて情報連携

    View Slide

  24. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    登録日や利用開始日を分散する

    View Slide

  25. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    エンジニアリングで”できることはなんでもやった”
    ➔ SRE
    ◆ RDS PostgreSQL の Aurora 化
    ◆ Reverse Proxy の Scaleup
    ◆ HPA 導入
    ◆ Worker Node Group 分離
    ◆ Memcached Scaleup
    ◆ Amazon GuardDuty 導入
    ➔ Web Developer
    ◆ 意図しない実装による不要な
    update の削減
    ◆ 不要な Write の削減
    ◆ 不要なデータの削除
    ◆ 学習データ更新サービスのrate
    limiting
    ◆ Native Client からの API call
    数削減

    View Slide

  26. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    MongoDB への抜本的対処

    View Slide

  27. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    MongoDB への抜本的対処
    ➔ “学習データ”をデータベース分離 2020年4月末
    ➔ MongoReplay によるパフォーマンステスト 2020年5月末
    ➔ UsageDB を Atlas へ移行 / Sharding 有効化 2020年6月末

    View Slide

  28. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    “学習データ”をデータベース分離
    ➔ Write Access / データ量ともに多い”学習データ”(Usage)
    をデータベースごと分離した
    ◆ いわゆる垂直分割
    Main DB
    Usage DB

    View Slide

  29. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    UsageDB を Atlas へ移行 / Sharding 有効化
    ➔ Write Access の多い “Usage DB” を Sharding
    ◆ Managed Service(Atlas) へ移行
    ◆ いわゆる水平分割
    Main DB / self-hosted
    Usage DB / Atlas
    Sharding

    View Slide

  30. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    MongoReplay によるパフォーマンステスト
    ➔ 現状の3倍のトラフィックまで耐えられることを検証
    本番環境サービス
    Query をキャプチャ
    Replay
    検証環境
    本番環境
    MainDB / Self-hosted
    UsageDB / Atlas
    MainDB / Self-hosted
    UsageDB / Atlas

    View Slide

  31. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    大きな障害ゼロで緊急事態宣言下
    でのピークを乗り切った🎉

    View Slide

  32. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    海外事例紹介
    03

    View Slide

  33. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側

    View Slide

  34. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側

    View Slide

  35. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    Quipper がインドネシア政府より推奨教育サービス認定
    http://www.recruit-mp.co.jp/news/release/2020/0414_3855.html

    View Slide

  36. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    アクセス数(2020年6月~10月)

    View Slide

  37. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    Timed-Exam(定期試験)を
    Quipper 上で実施

    View Slide

  38. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    試験開始時の一斉アクセスによるサーバダウン
    試験開始時の一斉アクセスにより
    一部の生徒が試験を開始できなかった
    先生は事前に試験問題と
    開始時間と対象生徒(クラス)を登録

    View Slide

  39. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    前提: オートスケーリングはスパイクアクセスに弱い
    ➔ CPU 使用率によるオートスケーリング(HPA)は導入して
    いたが...
    ➔ サーバのスケールアウトには時間がかかる
    ◆ コンテナのイメージ Pull
    ◆ インスタンスのスケールアウト

    View Slide

  40. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    短期対策: 日中は事前にサーバをスケールアウト💸💸💸

    View Slide

  41. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    解決策
    ➔ 運用による負荷緩和
    ➔ エンジニアリングによる解決

    View Slide

  42. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    対策: 運用でカバー
    ➔ 先生には試験開始の24時間以前に登録を依頼
    ➔ 同時試験受講者数の制限
    ➔ なるべく試験実施時間を学校内で分散してもらう

    View Slide

  43. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    エンジニアリングで解決したい👍

    View Slide

  44. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    エンジニアリングで”できることはなんでもやる”
    ➔ Web Developer は Application でできる負荷対策に取
    り組む
    ➔ 事前スケール(Scheduled-Scaling)の実現
    ◆ Global Development VPoE と SRE の協力
    ● SRE は Kubernetes / Platform のことは詳しいが、 ドメ
    イン知識は不足

    View Slide

  45. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    「試験の開始時間と受験
    人数はデータベースにあるはず。
    それをもとにサーバを事前に
    スケールアウトできないか?」

    View Slide

  46. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    「試験の開始時間と受験
    人数はデータベースにあるはず。
    それをもとにサーバを事前に
    スケールアウトできないか?」
    Global Division
    Director からの提案

    View Slide

  47. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    Scheduled-Scaling with Kubernetes HPA

    View Slide

  48. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    Scheduled-Scaling with Kubernetes HPA
    データベースから試
    験対象人数と
    開始時間を取得

    View Slide

  49. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    Scheduled-Scaling with Kubernetes HPA
    受験人数に対応した必要な Pod
    数を Datadog に
    custom metrics として送信

    View Slide

  50. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    Scheduled-Scaling with Kubernetes HPA
    HPA から external metrics とし
    て利用して事前スケール

    View Slide

  51. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    技術的詳細はこちら
    ➔ Quipper Product Team Blog
    ➔ Kubernetes Meetup Tokyo#38

    View Slide

  52. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    結果
    黄色の線: 試験情報に合わせた必要 Pod 数
    紫の線: 実際の Pod 数
    試験発生時には事前にスケールを、それ以外の時
    間では CPU でのスケールを実現

    View Slide

  53. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    結果 紫の線: 事前に日中スケールしていた時の Node 数
    青い線: Scheduled Scaling 適用後の Node 数
    紫と青の面積の差が減らしたコスト。
    月間 $3150 は減らせる試算に。

    View Slide

  54. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    定期試験のデータに合わせて
    事前にサーバをスケールして
    サービスダウンを回避🎉

    View Slide

  55. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    まとめ
    04

    View Slide

  56. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    まとめ(1/2)
    負荷対策にはエンジニアリングチーム以外の事業に関わる
    すべてのひとの協力が必要
    ● エンジニアリングは重要だが、そもそもの課題発見や分析、問題に対する運
    用回避のためには Developer 以外にも、Product Manager, Sales,
    Customer Success, Data 全チームの協力が必要
    ● 問題 vs 私たちの考えで、セクションの壁を作らず向き合えた結果乗り越える
    ことができた

    View Slide

  57. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    まとめ(2/2)
    事実(Fact)ベースで判断するための負荷試験の重要性がま
    すます高まる
    ● 意思決定を事実ベース(Fact-Based)で行うことが重要
    ● 現状のアーキテクチャで”何倍”まで耐えられるのか?の問いに答えるために
    負荷試験・キャパシティプランニングの重要性が高まっている
    ● 正しく負荷試験を行うためには複数のチームの協力が必要

    View Slide

  58. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    Key Messages
    ➔ 問題vs私たち
    ◆ セクションの壁を作らずに問題に向き合うこと
    ➔ Fact-Based
    ◆ 事実(Fact)を元に計画を立て、計測し、意思決定すること

    View Slide

  59. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    @chaspy (Takeshi Kondo)
    ➔ Lead Software Engineer, Site Reliability at Quipper
    ➔ Community
    ◆ Japan Datadog User Group Organizer
    ◆ Terraform-jp board member
    ➔ Social
    ◆ Twitter: chaspy_
    ◆ Github: chaspy

    View Slide

  60. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側

    View Slide

  61. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側
    Thank you!

    View Slide