Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

93c80c388fe9d8f9df7d030549a0ff0b?s=47 Takeshi Kondo
February 19, 2021

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

93c80c388fe9d8f9df7d030549a0ff0b?s=128

Takeshi Kondo

February 19, 2021
Tweet

Transcript

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

    2021
  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
  3. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側 今日お話しすること Quipper が開発する国内・海外両プロダクトが どのように未曾有の危機を乗り越えてきたか オンライン教育サービスであるスタディサプリ / Quipper は

    COVID-19 により需要 が急増し、当たり前に使われる New Normal となりました。この危機をコミュニ ケーションとエンジニアリング両面でどう乗り越えたのか、その事例を紹介しま す。
  4. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側 Key Messages ➔ 問題vs私たち ◆ セクションの壁を作らずに問題に向き合うこと ➔ Fact-Based

    ◆ 事実(Fact)を元に計画を立て、計測し、意思決定すること
  5. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側 Agenda | 01 02 03 04 スタディサプリ /

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

  7. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側 Quipper とはどんな会社? 2010年ロンドンで設立、世界に向けた教育サービス Quipper を運営。 2015年に M&A を経てリクルート傘下へ。

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

    狙う「TOEIC®L&R TEST対策コース」、「ビジネス英語コース」があり、業界初オンライン完結型コーチングも提供しています。
  9. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側 海外向けサービス Quipper Schoolは小学校から高校まで、学校の教室で先生方をサポートするオンラインラーニングマネージメントプラットフォー ムです。先生方は限られた時間の中で、増え続ける複雑な校務、変化する教育過程の対応などに追われています。 Quipper Schoolを通じて、私たちは先生の業務負荷を軽減するだけではなく、 21世紀を生き抜く人材育成のお手伝いをしたいと考えてい ます。

    Quipper Videoは、いつでもどこでも自分のペースで学習できるオンライン講義動画サービスです。実力派講師によって解説さ れる短くまとめられた講義動画、図解説明の入ったわかりやすいテキスト、自分の苦手箇所がわかる到達度テストの三点セット によって、一人一人を自ら学べる生徒にします。教師向けプラットフォームである Quipper Schoolを使うことで、先生は生徒に 対しQuipper Videoを使った学習を促すことも可能です。 Quipper Campusは進学を考える高校生のための大学進学情報サイトです。地域や専攻による大学検索だけでなく、適性テス トを通じて自分の目指す進路に最適な教育機関を見つけることができます。現在インドネシアでのみ運営しています。
  10. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側 日本 インドネシア フィリピン 対象学年 小・中学校 高校 大学・社会人 高校

    高校 オンラインビデオ (B to C) オンラインビデオ& アセスメント (B to B to C) オンラインコーチング 各国で様々なサービスラインナップにて事業展開をしています パーソナルコーチプラン サービスラインナップ
  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万人
  12. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側 詳細は “Quipper handbook” で 検索🔎

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

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

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

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

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

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

  19. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側 Self-Hosted MongoDB の負荷課題 生徒向けサービス 先生向けサービス 新規登録サービス AWS 内でもっとも

    IO 性能が高く、最も 高価な i3en.24xlarge インスタンスクラスを使用
  20. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側 これまではスケールアップしてきたがもう後がない https://quipper.hatenablog.com/entry/2019/09/26/080000

  21. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側 解決策 ➔ データによる需要予測と負荷緩和 ◆ 今後何倍のユーザ数増加が見込まれるのか ◆ スパイクアクセスをいかに回避するか ➔

    エンジニアリングによる解決 ◆ エンジニアリングチーム一丸となり”できることはなんでもやる” ◆ 最大のボトルネックとなりうる MongoDB への抜本的対処
  22. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側 データによる需要予測と負荷緩和 ➔ 基本的には昨年度実績から予測するが、 ” 一括受注”が昨年との差分 ➔ 営業から定性情報をヒアリングし、予測に反映 ◆

    学校により Active Learner 率が異なる • 自治体主導で導入を決めたが、活用するかは学校に任されている場合 • 既に他の学年で活用されている学校に導入する場合
  23. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側 セクションを超えて情報連携

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

  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 数削減
  26. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側 MongoDB への抜本的対処

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

    2020年5月末 ➔ UsageDB を Atlas へ移行 / Sharding 有効化 2020年6月末
  28. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側 “学習データ”をデータベース分離 ➔ Write Access / データ量ともに多い”学習データ”(Usage) をデータベースごと分離した ◆

    いわゆる垂直分割 Main DB Usage DB
  29. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側 UsageDB を Atlas へ移行 / Sharding 有効化 ➔

    Write Access の多い “Usage DB” を Sharding ◆ Managed Service(Atlas) へ移行 ◆ いわゆる水平分割 Main DB / self-hosted Usage DB / Atlas Sharding
  30. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側 MongoReplay によるパフォーマンステスト ➔ 現状の3倍のトラフィックまで耐えられることを検証 本番環境サービス Query をキャプチャ Replay

    検証環境 本番環境 MainDB / Self-hosted UsageDB / Atlas MainDB / Self-hosted UsageDB / Atlas
  31. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側 大きな障害ゼロで緊急事態宣言下 でのピークを乗り切った🎉

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

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

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

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

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

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

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

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

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

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

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

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

  44. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側 エンジニアリングで”できることはなんでもやる” ➔ Web Developer は Application でできる負荷対策に取 り組む

    ➔ 事前スケール(Scheduled-Scaling)の実現 ◆ Global Development VPoE と SRE の協力 • SRE は Kubernetes / Platform のことは詳しいが、 ドメ イン知識は不足
  45. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側 「試験の開始時間と受験 人数はデータベースにあるはず。 それをもとにサーバを事前に スケールアウトできないか?」

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

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

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

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

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

    とし て利用して事前スケール
  51. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側 技術的詳細はこちら ➔ Quipper Product Team Blog ➔ Kubernetes

    Meetup Tokyo#38
  52. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側 結果 黄色の線: 試験情報に合わせた必要 Pod 数 紫の線: 実際の Pod

    数 試験発生時には事前にスケールを、それ以外の時 間では CPU でのスケールを実現
  53. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側 結果 紫の線: 事前に日中スケールしていた時の Node 数 青い線: Scheduled Scaling

    適用後の Node 数 紫と青の面積の差が減らしたコスト。 月間 $3150 は減らせる試算に。
  54. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側 定期試験のデータに合わせて 事前にサーバをスケールして サービスダウンを回避🎉

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

  56. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側 まとめ(1/2) 負荷対策にはエンジニアリングチーム以外の事業に関わる すべてのひとの協力が必要 • エンジニアリングは重要だが、そもそもの課題発見や分析、問題に対する運 用回避のためには Developer 以外にも、Product

    Manager, Sales, Customer Success, Data 全チームの協力が必要 • 問題 vs 私たちの考えで、セクションの壁を作らず向き合えた結果乗り越える ことができた
  57. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側 まとめ(2/2) 事実(Fact)ベースで判断するための負荷試験の重要性がま すます高まる • 意思決定を事実ベース(Fact-Based)で行うことが重要 • 現状のアーキテクチャで”何倍”まで耐えられるのか?の問いに答えるために 負荷試験・キャパシティプランニングの重要性が高まっている

    • 正しく負荷試験を行うためには複数のチームの協力が必要
  58. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側 Key Messages ➔ 問題vs私たち ◆ セクションの壁を作らずに問題に向き合うこと ➔ Fact-Based

    ◆ 事実(Fact)を元に計画を立て、計測し、意思決定すること
  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
  60. #devsumi 想定外の負荷を乗り切ったオンライン教育サービスの裏側

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