Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

#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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

#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万人

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

#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 数削減

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

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

Slide 55

Slide 55 text

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

Slide 56

Slide 56 text

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

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

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

Slide 59

Slide 59 text

#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

Slide 60

Slide 60 text

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

Slide 61

Slide 61 text

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