本文へ移動

ホーム / PdM / 第2部 Web サービスの仕組み

第2部 Web サービスの仕組み・第2章

Web サービスの全体像と速さ

★★☆ 重要8トピック・面接 3問

自分のプロダクトが、どの部品で、どうつながって動いているかを押さえる。

別のページで開く →

ネットワーク図を読み込んでいます…

ひとことで

画面(フロント)が API を呼び、サーバーが DB を読み書きして返す。インフラはそれを動かす土台。

「項目を1つ足すだけなのに、なぜ2週間かかるのか」「文言を直すだけなのに、アプリはなぜすぐに変わらないのか」。エンジニアとの会話で出てくるこうした疑問の多くは、サービスがどんな部品でできていて、変更がどの部品に入るかを知ると分かるようになります。

見積もりや障害の連絡を受けたときも、どの部品の話をしているかが分かると、判断が早くなります。

Web サービスは、おおむね次の部品でできています。ユーザーが画面を操作すると、画面(フロントエンド)が API(サーバーの窓口)を呼び、サーバーが DB(データベース)を読み書きして結果を返します。インフラは、これらを動かすサーバー・ネットワーク・クラウドの土台です。

ユーザーの1つの操作が通る部品矢印はリクエストの向き画面Web・アプリCDNページや画像の写しロードバランサー振り分けAPI サーバールールを実行外部決済・地図キャッシュRedis などDBデータを保存キュー後で処理ワーカーメール送信インフラ(サーバー・ネットワーク・クラウド):すべての部品を動かす土台1本しかつながっていない箱は止まると全体が止まる場所かも
画面・API・DB・インフラの全体図(典型例)
部品役割PdM が気にすること
画面(Web・アプリ)表示と操作。ブラウザやスマホの中で動くアプリは審査があり、古い版が残る
CDN画像やページの写しを利用者の近くに置く更新の反映に時間差が出る
ロードバランサーリクエストを複数のサーバーに振り分けるアクセス集中に耐えられるか
アプリサーバー(API)ビジネスのルールを実行する仕様変更の多くはここに入る
DBデータを保存する項目の追加・移行は時間がかかる。個人情報の置き場所
キャッシュ(Redis など)よく使う結果を一時的に置き、速くする古いデータが見えることがある
キュー・ワーカーメール送信など時間のかかる処理を後で行う「すぐには終わらない」処理がある
外部サービス決済・地図・メール・AI など止まったときの体験、料金、契約

構成図の読み方:箱は部品、矢印はリクエストの向きです。まず「ユーザーの1つの操作が、どの箱をどの順に通るか」を指でたどります。1本の矢印しかつながっていない箱は、そこが止まると全体が止まる場所(単一障害点)かもしれません。

SRE の「典型的な Web サービスの構成と各層の冗長化」

SRE の「URL 入力から表示まで」

下の「ブラウザで試す」の図は、ブラウザに URL を入れてからページが表示されるまでを、通信の順番どおりに追うものです。DNS で名前を IP アドレスに変え、ロードバランサーと接続し、アプリサーバーが DB に問い合わせて HTML を返し、最後に CSS や画像を CDN から取ります。途中の TCP・TLS の手順は細かく読まなくてかまいません。上の表の部品(CDN・ロードバランサー・アプリサーバー・DB)が、1つの操作でどの順に出てくるかに注目してください。

面接ではこう答える

Web サービスは、画面が API を呼び、サーバーがビジネスのルールを実行して DB を読み書きし、結果を返す形で動いています。その手前には CDN やロードバランサーがあり、時間のかかる処理はキューとワーカーで後回しにし、決済や地図などは外部サービスに任せます。PdM としては、ユーザーの1つの操作がどの部品を通るかを知っておくと、仕様変更や障害のときに影響の範囲をすぐ考えられます。

別のページで開く →

ネットワーク図を読み込んでいます…

ひとことで

画面がリクエストを送り、サーバーがステータスコードと中身をつけたレスポンスを返す、Web のやりとりの基本。

画面とサーバーは HTTP という決まりでやりとりします。画面が「何をしたいか」をリクエストで送り、サーバーは結果をステータスコード(3けたの番号)と中身をつけたレスポンスで返します。

画面は「リクエスト」を送り、サーバーは「ステータスコード+中身」を返す画面ブラウザ・アプリサーバーAPIリクエスト:GET /items/42(商品42をください)レスポンス:200 OK + 商品の中身(JSON)失敗すると 404(ない)・401(ログインが必要)・500(サーバーの不具合)などが返る
リクエストとレスポンスの往復
コード意味PdM が気にすること
200 台成功—
301・302別の URL へ移動ページの URL を変えるときは移動の設定がないと検索や外部のリンクが切れる
400リクエストの形が正しくない入力の確認(必須・文字数)の仕様
401・403ログインが必要・権限がない誰が何を見られるかの仕様
404見つからない削除した商品のページをどう見せるか
429回数の上限を超えた外部 API の制限、連打への対策
500 台サーバー側の不具合・混雑エラー率の監視の対象。障害のサイン

400 台は利用者側、500 台はサーバー側の問題とおおまかに分けられます。障害の判断やエラー率の目標では、主に 500 台の割合を見ます。

面接ではこう答える

Web の画面とサーバーは HTTP でやりとりしていて、画面が送るリクエストに対して、サーバーはステータスコードと中身を返します。200 台は成功、400 台は権限がない・見つからないといった利用者側の問題、500 台はサーバー側の不具合です。PdM としては、エラー率を見るときは 500 台を中心に見ること、権限や削除されたページの見せ方は 400 台の仕様として決めることを意識しています。

2.3キャッシュと CDN

用語★☆☆ 発展
ひとことで

一度作った結果を近くに置いて使い回す仕組み。速くなるが、更新が反映されるまで時間差が出る。

「さっき直したはずの価格が、まだ古いまま表示されている」という問い合わせは、多くの場合バグではなく、キャッシュの仕様どおりの動きです。キャッシュはサービスを速く・安くするために欠かせない一方で、少し古い内容が見えることがあるという性質を持ちます。

PdM がこの性質を知っておくと、問い合わせへの答え方や、仕様で決めるべきこと(どのデータはどれくらい古くてよいか)が分かります。

キャッシュは、一度作った結果を近くに置いて使い回す仕組みです。CDN は世界各地のサーバーに画像やページの写しを置き、利用者の近くから返して速くします。サーバーの中では Redis などに DB の結果を一時的に置き、DB の負荷を減らします。

更新してもキャッシュの期限が切れるまでは古いものが見えるTTL 5分の例元のサーバー新しい内容CDN の写し古いまま新しい内容パージした場合古い新しい内容10:0010:0110:0510:1010:00 に更新
キャッシュの時間差:期限切れまたはパージまで古い内容が返る

「更新したのに反映されない」のは、たいていキャッシュの有効期限(TTL)が切れるまで古い写しが返っているからです。CDN・ブラウザ・アプリ・Redis のどこかに古いものが残っています。急ぐときは CDN の写しを消す(パージ)こともできます。

キャッシュの場所どこにあるか古いものを消す方法の例
CDN利用者の近くのサーバーパージ(写しを消す)
ブラウザ利用者の PC・スマホファイル名に版を付けて別物にする
アプリスマホの中次に開いたときに取り直す・アプリの更新
Redis などサーバーの中データを変えたときにキーを消す・期限を短くする

PdM が仕様で決めるのは「どれくらい古くてよいか」です。お知らせやランキングは数分遅れても困りませんが、価格・在庫・権限は古いと事故になります。データごとに許せる遅れを伝えると、エンジニアがキャッシュの置き方を決めやすくなります。

Web の「HTTP キャッシュ」

SRE の「Redis の運用」

下の「ブラウザで試す」の図では、画像を CDN に要求すると、最初はオリジン(S3)から取ってきて CDN とブラウザに保存し、次からはブラウザのキャッシュや、別の利用者でも CDN の写しから返る様子を見られます。後半では、ログイン後のページのように人ごとに変わる応答はキャッシュさせないこと、更新するときはファイル名を変えるか CDN の写しを消す(パージ)ことが出てきます。上の表の「CDN」「ブラウザ」の行がどの手順にあたるかを見てください。Redis やアプリの中のキャッシュは図には出てきません。

面接ではこう答える

キャッシュは、一度作った結果を近くに置いて使い回す仕組みで、CDN は利用者の近くのサーバーから画像やページの写しを返します。速くなり、サーバーや DB の負荷も減りますが、有効期限が切れるまでは古い内容が見えるという時間差が出ます。PdM としては、データごとに「どれくらい古くてよいか」を決めて伝えるのが仕事で、価格や在庫、権限のように古いと事故になるものは特に気をつけます。

別のページで開く →

ネットワーク図を読み込んでいます…

ひとことで

時間のかかる処理を、キューに入れて裏で順に片付け、画面には「受け付けた」だけ先に返す作り方。

メール送信・CSV の作成・画像の変換のような時間のかかる処理は、画面を待たせずに非同期(後で裏で処理する)にすることがよくあります。頼まれた仕事をキュー(順番待ちの列)に入れ、ワーカー(裏で動く処理役)が順に片付けます。

時間のかかる処理は「受け付けた」だけ先に返し、裏で続ける同期画面APICSV を作る数分かかる画面は待ったまま時間切れのことも非同期画面すぐ戻るAPI受け付けキュー順番待ちワーカー裏で作る通知メール「受け付けました」をすぐ返す
同期と非同期の違い
処理の例仕様で決めること
CSV・レポートの作成完成をどう知らせるか(画面・メール)、何日でファイルを消すか
メール・プッシュの一斉送信全員に届くまでの時間の目安、送り直しのルール
画像・動画の変換変換中の見せ方(処理中の表示・元の画像を仮に出す)
決済の確定・外部への連携失敗したときのやり直し、二重に処理されないこと

非同期にすると、「受け付けた」と「終わった」の間に状態ができます。その間の見せ方、失敗したときの知らせ方、同じ処理が2回走っても結果が変わらないこと(冪等性)を、仕様の段階でエンジニアと決めておきます。

面接ではこう答える

非同期処理は、メール送信や CSV 作成のように時間のかかる仕事をキューに入れ、ワーカーが裏で順に処理する作り方です。画面をすぐ返せるので体験が良くなり、アクセスが集中しても処理を順番にさばけます。その代わり、受け付けてから終わるまでの間の見せ方や、失敗したときの知らせ方、二重に処理されないことを仕様で決める必要があるので、PdM としてはそこを最初に確認します。

ひとことで

サーバーの台数や性能を増やして、多くのアクセスに耐えること。自動で増やす仕組みは急な集中には間に合わないことがある。

「テレビで紹介されたらサイトが落ちた」「セールの開始と同時につながらなくなった」は、よくある障害です。アクセスの集中は、前もって分かっていれば準備で防げることが多く、その情報をいちばん早く持っているのは、PdM やマーケティングの側です。

ここでは、なぜ急な集中に弱いのか、エンジニアに何をいつ伝えればよいかを押さえます。

サーバーの台数や性能を増やして多くのアクセスに耐えることをスケールといいます。クラウドには自動で台数を増やす仕組み(オートスケール)がありますが、増えるまでに数分かかることが多く、テレビ放映やセール開始の瞬間のような急な集中には間に合いません。また、DB は画面やサーバーのように簡単には増やせません。

急な集中は、事前に知らせて増やしておけば耐えられる時間アクセスいつもの台数で耐えられる量事前に増やした台数テレビ放映・セール開始
急なアクセス集中と事前の準備
事前にエンジニアへ伝えること例
日時11月20日 20:00 のテレビ放映の直後
見込みいつもの何倍の人が、何分のうちに来るか
対象の画面トップ・キャンペーンページ・購入
外部サービス決済・メール配信の上限にも連絡が要るか
あふれたとき順番待ちの画面を出すか、一部の機能を止めるか

大きな集中が分かっているなら、数週間前には伝えて、負荷試験や台数の増強、待合室(順番待ちの画面)の準備の時間を取ってもらいます。

下の「ブラウザで試す」の図は、台数を増やすときの土台になるロードバランサー(リクエストを複数のサーバーに振り分ける装置)の動きです。リクエストが2台のサーバーに交互に振り分けられ、片方が故障するとヘルスチェック(定期的な生存確認)で自動で外されて、残りの1台が全部を受けます。「1台になっても全部をさばける余力があるか」は、集中に耐えられるかと同じ問いである点に注目してください。オートスケールや待合室そのものは図には出てきません。

面接ではこう答える

スケールは、サーバーを増やしたり強くしたりして多くのアクセスに耐えることです。オートスケールで自動的に台数を増やせますが、増えるまでに数分かかるので、テレビ放映やセール開始のような急な集中には事前の準備が必要です。また DB は簡単には増やせないことが多いです。PdM としては、キャンペーンの日時と見込みの人数を早めにエンジニアに伝え、あふれたときの見せ方も一緒に決めておくようにしています。

別のページで開く →

ネットワーク図を読み込んでいます…

2.6なぜ遅くなるのか

用語★★☆ 重要
ひとことで

距離(通信)・処理(サーバー)・データ(DB)・画面(ブラウザ)のどこかで時間がかかる。

「遅い」の原因は、大きく通信の距離・サーバーの処理・データ(DB)・画面(ブラウザ)の4か所に分けられます。どこで時間がかかっているかで直し方も工数も変わるので、エンジニアと「どの部分が何秒か」を見ながら話すのが近道です。

「遅い」を4か所に分けると、どこを直すかが決まる1回の表示 1.2秒の内訳(例)通信200ms遠い・往復が多いサーバー150ms重い計算・外部 APIDB450ms索引なし・N+1画面400ms大きい JS・描画01.2秒この例では DB がいちばん長い → まずクエリとインデックスを見る
遅さの原因の地図:通信・サーバー・DB・画面のどこで時間がかかるか
場所よくある原因直し方の例
通信サーバーが遠い、往復の回数が多い、画像や動画が重いCDN、画像の圧縮、まとめて取得
サーバー重い計算、外部 API を1つずつ順番に呼ぶ並列化、結果のキャッシュ、後で処理(非同期)
DBインデックス(索引)がない、1件ずつ何百回も問い合わせる(N+1)インデックスの追加、クエリの見直し
画面JavaScript が大きい、表示に必要ないものまで先に読む分割して読み込む、表示の順番を変える

直す前に、まず計測して、どこで何秒かかっているかを確かめます。思い込みで直すと、効かないところに工数を使ってしまいます。

SRE の「レイテンシの正しい見方」

Web の「Core Web Vitals」

面接ではこう答える

「遅い」の原因は、通信の距離、サーバーの処理、DB、画面の4か所に分けて考えます。どこで何秒かかっているかによって、CDN を使う、クエリを直す、JavaScript を減らすなど、直し方も工数も大きく変わります。PdM としては思い込みで直す場所を決めず、まず計測してもらい、内訳を見てから優先順位を付けるようにしています。

ひとことで

速さは平均ではなくパーセンタイル(p75・p95・p99)で見る。Web 画面は Core Web Vitals の p75 がよく使われる。

速さは平均ではなく、パーセンタイルで見ます。p95 は「遅い方から5%の境目」、つまり95%の人はこれより速いという値です。平均が速くても、一部の人がとても待たされていることがあるからです。

多くの人は速いが、右の長いすそで一部の人が長く待っている表示にかかった時間の分布(例)中央値p75p95p99遅い →速い
分布で見ると、平均では見えない「待たされている人」が分かる

Web 画面では Google の Core Web Vitals がよく使われ、実際の利用者の p75(4回の表示のうち3回がこれより速い)で判定します。

指標測るもの「良い」の基準
LCP主要な内容が表示されるまで2.5秒以下
INP操作への反応の速さ200ミリ秒以下
CLS表示のずれ(ガタつき)0.1以下

Web の「Core Web Vitals」

SRE の「レイテンシの正しい見方」

面接ではこう答える

速さは平均ではなく、p95 や p99 のようなパーセンタイルで見ます。平均は一部のとても遅い人を隠してしまうからです。Web 画面では Core Web Vitals がよく使われ、表示の速さの LCP、操作への反応の INP、表示のずれの CLS を、実際の利用者の p75 で判定します。PdM として目標を決めるときも、「どの画面のどの指標を、どのパーセンタイルで何秒以下に」と数字で決めるようにしています。

表示が遅いと離脱が増え、購入や登録の率が下がる傾向は多くの事例で報告されています。ただし効き方はプロダクトごとに違うので、まず自社のデータで「速さと CVR(購入などに進む率)の関係」を見てから、どこにどれだけ投資するかを決めます。

伝え方例
悪い例「全体的にもっと速くして」
良い例「商品詳細の LCP を、モバイルの p75 で 2.5秒以下に。今は 4.1秒」
理由も添える「LCP が 4秒を超える人は購入率が半分。商品詳細は売上の入口なので最優先」
守り方を決める新しい機能で遅くならないよう、画面ごとの上限(パフォーマンス予算)を決めて監視する

画面・指標・目標値・理由の4つがそろうと、エンジニアは見積もりと方法を決めやすくなり、終わったかどうかも数字で判断できます。

この章のまとめ

🖨 まとめシート(印刷・PDF)
  • 画面・API・DB・インフラの役割と、ユーザーの1つの操作がどの部品を通るか
  • 時間のかかる処理・アクセス集中・キャッシュで、仕様として決めること
  • 「遅い」を4か所に分け、p75・p95 と目標値で改善を依頼する

この章のクイズ

面接ではこう聞かれる

まず答えを見ずに声に出して答え、そのあと開いて比べる。

Q1機能の要件を決めるとき、技術面で確認することは?

模範回答

4つを確認します。1つ目はデータで、新しく保存する項目、既存データの移行、個人情報を含むかです。2つ目は性能で、件数や利用が増えたときの速さ、許せる表示の遅れや「どれくらい古くてよいか」を数字で決めます。

3つ目は外部依存で、外部サービスや他チームの API を使うなら、止まったときの体験、料金や回数の制限を確認します。4つ目はリリースの影響で、API の後方互換、アプリの古い版への対応、段階的に出せるか・すぐ戻せるかを確かめます。これらを仕様の段階でエンジニアと話しておくと、見積もりの精度が上がり、手戻りが減ります。

深掘りされたら

  • 非機能要件はどう決めますか?
  • 外部サービスが止まったときの仕様はどう決めますか?

見られているポイントデータ・性能・外部依存・リリースの影響

Q2「サイトが遅い」という声が増えています。PdM として何をしますか?

模範回答

まず、どの画面で・誰が・どれくらい遅いのかを数字で確かめます。平均ではなく p95 や p99 を見て、一部のユーザーだけが遅いのか全体なのかを分けます。そのうえでエンジニアに、時間が通信・サーバー・DB・画面のどこにかかっているかを見てもらいます。

原因が分かったら、遅さが離脱や CVR にどれくらい効いているかを見て、他の開発と比べて優先順位を決めます。要望は「速くして」ではなく、「商品詳細の LCP を p75 で 2.5秒以下に」のように画面・指標・目標値で伝えます。

深掘りされたら

  • 速くする施策の効果は、どう確かめますか?

見られているポイント数字で確かめる・原因の場所を分ける・ビジネス指標とつなげる

Q3キャッシュとは何ですか?仕様で気をつけることはありますか?

模範回答

キャッシュは、一度作った結果を近くに置いて使い回す仕組みです。CDN が画像やページの写しを利用者の近くに置いたり、サーバーが DB の結果を Redis に置いたりして、速くし、負荷を減らします。

その代わり、期限が切れるまで古い内容が見えることがあります。そこで仕様では、データごとに「どれくらい古くてよいか」を決めて伝えます。お知らせやランキングは数分遅れても困りませんが、価格・在庫・権限は古いと事故になるので、キャッシュしないか、更新したらすぐ消す作りにしてもらいます。

深掘りされたら

  • 「更新したのに反映されない」と問い合わせが来たら、どう説明しますか?

見られているポイントキャッシュの利点と時間差、仕様で「許せる古さ」を決められるか