トラフィック急増に耐えるサーバーシステム設計 - Coupon発行サービス

先着順クーポンシステムの実装を通じて、同時実行性の問題、データ整合性、ピークトラフィックへの対応など、実践的なバックエンドの核心課題を解決します。実際にコードを書きながら問題を発見し、同期・非同期処理やキュー管理など、実務に不可欠な技術を身につけます。ジュニア開発者や就職活動中の方が実践経験を積める、プロジェクトベースの講座です。

難易度 初級

受講期間 無制限

Java
Java
Kotlin
Kotlin
MySQL
MySQL
Docker
Docker
Spring Boot
Spring Boot
Java
Java
Kotlin
Kotlin
MySQL
MySQL
Docker
Docker
Spring Boot
Spring Boot

学習した受講者のレビュー

4.9

5.0

SPRING

100% 受講後に作成

システムアーキテクチャの流れをよく理解できました。 講義の難易度は初級とされていますが、 活用されているインフラは初級レベルではないように感じました。 個人的には、 AIコードのレビューよりも、実際にライブコーディングする形式のほうを好むため、 その点は良かったです。 ただ、Javaには慣れているため、Kotlinの文法には馴染みがありませんでした。 また、パッケージ名を自分の都合で変更して学習を始め、 Windows Git Bash上でK6をコンテナとして起動して 進めたこともあり、 シェルスクリプトのテストがかえって学習を難しくしました。 シェルスクリプトのテストをコピー&ペーストすることで便利だと感じる人もいると思いますが、 私はあまり好みではありませんでした。 K6とシェルスクリプトのテストの流れは思ったよりも読み取りにくく、 時間が経ってから見ると、またテストの流れを忘れてしまいそうです。 しかし、受講者にとっては、 アーキテクチャの観点やRedisの活用方法という面で 大いに役立つと思うため、良い講義だと思います。

5.0

maruhxn

61% 受講後に作成

大規模トラフィックで発生しうる問題が頭の中で整理できていなかったのですが、この講義一つでバラバラだった知識が一つにまとまるような気分です。このような講義を受けられるという事実に、本当に感謝しています。

5.0

AKBA

100% 受講後に作成

[総評] アーキテクチャを全体的に紹介するだけでなく、問題状況を作りながらWhat、Why、Howを深く説明してくれる講義でした。何を使うのかだけでなく、なぜ必要なのか、どのように適用するのかまで考えながら学ぶことができました。 私は主にPythonを使っていますが、KotlinとSpringも別途勉強しているため、講義についていくうえで大きな問題はありませんでした。個人的に学ぶことが多く、その分、一度の受講ですべての内容を十分に消化するのは難しかったです。少なくとも2回は受講して復習したいと思うほど、深みのある講義でした。難易度については、入門者には少し難しいかもしれませんが、それだけの難しさがあっても受講する価値のある講義です。 [残念だった点および改善してほしい部分] Windows環境で実習しましたが、後半のテストスクリプトの中には、PowerShellでそのまま実行するのが難しく、別の方法に変更して進めなければならない場合がありました。AIの助けで解決することはできましたが、環境に合わせて修正するのに少し時間がかかりました。今後、Windows用のテストスクリプトや実行方法を別途提供していただけると、大きな助けになると思います。 私は自分でコードを書きながらロジックをできるだけ理解しようとするタイプなので、30分を超える講義は、1つの講義を学習するうえで少し負担に感じることもありました。もちろん、1つのテーマを流れを途切れさせずに説明しようとされている意図も理解できます。 良い講義でした。

受講後に得られること

  • 同時実行の問題解決とデータ整合性保証の手法

  • 同期・非同期処理によるトラフィック負荷分散設計

  • キューシステムとピークトラフィック防御アーキテクチャの実装


普段は問題ないサーバーが、イベントが始まるとなぜダウンするのでしょうか? 🚦


  • 先着順クーポンイベントが始まると、無数のリクエストが同じ在庫に同時にアクセスします。

  • 用意した数量を超えて発行されたり、同じユーザーが2枚受け取ったり、複数のストレージ間で記録に食い違いが生じたりする可能性があります。



この講義では、完成されたアーキテクチャを暗記する代わりに、1つのクーポン発行サービスを実際に壊し、再設計します。


問題を再現し、TPS、P99、エラー率、実際の発行精度を測定したうえで、DB Lock、Redis、Kafka、Cache、仮想待合室を選択し、同じ負荷で再度検証します。


トラフィック急増に耐えるサーバーシステム設計 - Coupon発行サービス

  • KotlinとSpring Bootでコードを作成します。

  • Docker ComposeでMySQL、Redis、Kafkaを起動し、RedisとKafkaが初めてでも、HTTP、RDB、Spring Bootの基礎があれば段階的についていけます。


この講義の特徴


📌 1つのクーポンサービスを基本実装から同時実行性、非同期処理、キャッシュ、整合性の復旧、トラフィック制御まで継続的に発展させます。

📌 問題の再現 → ボトルネックの測定 → 設計の選択 → 同じ条件での再検証という流れを、すべてのパートで繰り返します。

📌 TPSやP99だけを見ません。正確にN枚発行されたか、1人1枚が守られたか、イベントがMySQLまで漏れなく保存されたかも併せて確認します。

📌 DBの悲観ロックとRedis Lua、インメモリキューとKafkaのように、複数の選択肢を実際に比較し、いつ何を選ぶべきかを判断します。

📌 理論で終わらせません。動作するコード、実行環境、k6負荷シナリオ、変更前後の検証結果を1セットとして残します。

こんな方におすすめです

ピークトラフィックが初めてのジュニアバックエンド開発者

リクエストが集中したときに、DB、キャッシュ、キューのどこから手をつければよいか途方に暮れている方にぴったりです。

設計力を高めたいバックエンド就職準備生

技術名を列挙するのではなく、課題・選択・結果をプロジェクトを通じて説明したい方におすすめです。

パフォーマンスを数値で検証したいサーバー開発学習者

CRUDを超えて、負荷テストや障害の再現によってシステムを発展させたい方に役立ちます。

単純な実装には慣れているものの、トラフィックが集中した状況でどこから確認し、どの技術を選べばよいのか分からず途方に暮れている方におすすめです。問題を自ら再現し、測定結果をもとに設計を改善するプロセスを通じて、実務で活用できる判断基準を身につけます。


受講後には

✓ 同時リクエスト時にも正確な数量と1人1枚のルールを同時に守る発行ロジックを実装できます。

✓ DB悲観ロック、Redis分散ロック、Redis Lua原子演算の長所と短所を比較し、状況に応じた方式を選択できるようになります。

✓ KafkaでユーザーへのレスポンスとDB保存を分離し、失敗したメッセージをDLTと再処理フローで復旧します。

✓ Cache Stampede、完売後のリクエスト急増、RedisとMySQLの不整合を検知し、対応できます。

✓ 仮想待機室とGateway Rate Limitを連携させ、正常なユーザーは待機させ、アビューザーは入口で遮断します。

✓ TPS、P99、エラー率だけでなく、発行数、重複の有無、保存漏れまで測定し、設計改善の効果を結果で証明できます。


このような内容を学びます

問題を再現し、数値で原因を見つけます

クーポンの過剰発行とボトルネックを意図的に発生させてみます。TPS、P99、エラー率、正確性の指標を読み取り、設計前後を同じk6負荷条件で比較します。感覚ではなく測定値をもとに、次の選択の根拠を作ります。

基本実装からトラフィック制御まで6段階で成長します

クーポン要件の実装、同時実行制御、非同期処理、キャッシュ戦略、整合性の復旧、トラフィック制御の順に進めます。各段階の限界を確認しながら、次の設計が必要な理由を自然に理解できます。

複数の技術を1つのクーポン発行フローに結び付けます

Gatewayと仮想待合室がアクセス速度を制御し、Redisが在庫と重複発行をアトミックに処理します。Kafka WorkerはMySQLに保存し、バッチスケジューラーは2つのストレージ間の不整合を確認します。

コードと検証結果が一緒に残ります

KotlinとSpring Bootでアプリケーションを作成します。Docker ComposeでMySQL、Redis、Kafkaを起動し、k6で実際に負荷をかけてTPS、P99、エラー率、発行数、重複の有無、保存漏れを確認します。

この講義を作った理由

  • 完成したアーキテクチャを見ると、すべての選択が当然のように思えますが、実務では原因を突き止め、複数の選択肢から1つを選ばなければなりません。

  • 有名な技術をもう一つ追加する方法よりも、どこでリクエストを制御し、どの状態をどこに置き、何をもって成功と判断するかを決める力を伝えたいと考えました。

この講義では扱いません

  • 決済や配送といったクーポン周辺のドメインや、分散システムの理論をすべて幅広く扱うわけではありません。

  • あらかじめ決められた数量のクーポン発行、1人1枚、定められた開始時刻、完売時に終了するという条件に集中します。

受講前の参考事項

実習環境

• Kotlin、Spring Boot、Gradleを使用します。

• MySQL、Redis、KafkaはDocker Composeで実行します。

• 負荷テストにはk6を使用します。

• Dockerを実行できるWindows、macOS、Linux環境であれば実習できます。

• スムーズに実習を進めるため、8GB以上のメモリを推奨します。

学習資料

• 講義スライドと全ソースコードを提供します。

(講義はKotlinで進めますが、演習コードはKotlin版とJava版の両方を提供します。)

• パートごとの実行環境とDocker Composeの構成を提供します。

• 直接繰り返し実行できるk6負荷テストシナリオがあります。

• 各段階の設計ドキュメントと変更前後の検証結果を併せて確認します。

前提知識および注意事項

• HTTPとREST APIの基本概念が必要です。

• リレーショナルデータベースとSELECT、UPDATEレベルのSQLを使用します。

• JavaまたはKotlinの文法を知っている必要があります。

• Spring Bootの基礎知識を推奨します。

• RedisとKafkaの経験は必須ではありません。




こんな方に
おすすめです

学習対象は
誰でしょう?

  • 実務経験を積みたいジュニアバックエンド開発者

  • 並行性制御と大容量トラフィック処理を学びたいバックエンド就職準備生

  • 実務レベルのバックエンドシステム設計を経験したいコンピュータ工学専攻の大学生

前提知識、
必要でしょうか?

  • バックエンドプログラミング言語(Java、Pythonなど)の基本文法の理解

  • データベースとSQLの基礎知識

  • REST APIとHTTP通信に関する基本概念

こんにちは
apieceです。

インフラン認証

キャリア認証

1,770

受講生

62

受講レビュー

53

回答

4.9

講座評価

7

講座

こんにちは、開発者のハンジョガクです。
KakaoとSKを経て、実際のサービス環境でさまざまなバックエンドシステムの設計・運用に携わってきました。

その過程で直面した問題や試行錯誤、技術を選択する際の悩みを、知識共有コンテンツにまとめています。
技術をいつ、なぜ使うのかから、どのような基準でシステムを設計するのかまで、実務の文脈とともにお伝えしたいと考えています。

私が経験した悩みや経験が、皆さんの試行錯誤を減らし、
より良い選択をするうえで役立つことを願っています。

コンテンツをご覧になっていて気になった点や物足りなかった部分があれば、いつでも気軽にお聞かせください。
皆さんの率直なフィードバックをもとに、より良いコンテンツを作っていきたいと思っています。

ありがとうございます。

apiece.dev.ai@gmail.com

もっと見る

カリキュラム

全体

59件 ∙ (10時間 17分)

講座資料:

授業資料
講座掲載日: 
最終更新日: 

受講レビュー

全体

22件

4.9

22件の受講レビュー

  • gylim78265525님의 프로필 이미지
    gylim78265525

    受講レビュー 21

    ∙

    平均評価 5.0

    5

    31% 受講後に作成

    もともとJavaを学んでいましたが、Kotlinに移ってコードを写しながら学んでいます。大きな違いはないので難しさはなく、並行性についても概念を整理できるようになりました(笑)

    • apiece
      知識共有者

      こんにちは、갭알자さん! JavaからKotlinへ移行されたにもかかわらず、大きな困難もなくしっかりついてきてくださったとのことで、安心しました。何より、講義を通じてサーバー開発に必要な概念の一つである並行性について理解を深めるお手伝いができたようで、うれしく思います🙂 これからも学習のお役に立てる講義を作れるよう努めてまいります。ありがとうございます。

  • maruhxn님의 프로필 이미지
    maruhxn

    受講レビュー 13

    ∙

    平均評価 5.0

    5

    61% 受講後に作成

    大規模トラフィックで発生しうる問題が頭の中で整理できていなかったのですが、この講義一つでバラバラだった知識が一つにまとまるような気分です。このような講義を受けられるという事実に、本当に感謝しています。

    • apiece
      知識共有者

      こんにちは、maruhxnさん。 バラバラだった知識が一つに繋がったとのこと、講義を作った意図がしっかり伝わったようで本当に嬉しいです。 大規模トラフィックの問題を見極める基準を立てるのに、お役に立てれば幸いです。 受講評を残していただきありがとうございました! 😊

  • lv032k34님의 프로필 이미지
    lv032k34

    受講レビュー 9

    ∙

    平均評価 5.0

    修正済み

    5

    100% 受講後に作成

    [総評] アーキテクチャを全体的に紹介するだけでなく、問題状況を作りながらWhat、Why、Howを深く説明してくれる講義でした。何を使うのかだけでなく、なぜ必要なのか、どのように適用するのかまで考えながら学ぶことができました。 私は主にPythonを使っていますが、KotlinとSpringも別途勉強しているため、講義についていくうえで大きな問題はありませんでした。個人的に学ぶことが多く、その分、一度の受講ですべての内容を十分に消化するのは難しかったです。少なくとも2回は受講して復習したいと思うほど、深みのある講義でした。難易度については、入門者には少し難しいかもしれませんが、それだけの難しさがあっても受講する価値のある講義です。 [残念だった点および改善してほしい部分] Windows環境で実習しましたが、後半のテストスクリプトの中には、PowerShellでそのまま実行するのが難しく、別の方法に変更して進めなければならない場合がありました。AIの助けで解決することはできましたが、環境に合わせて修正するのに少し時間がかかりました。今後、Windows用のテストスクリプトや実行方法を別途提供していただけると、大きな助けになると思います。 私は自分でコードを書きながらロジックをできるだけ理解しようとするタイプなので、30分を超える講義は、1つの講義を学習するうえで少し負担に感じることもありました。もちろん、1つのテーマを流れを途切れさせずに説明しようとされている意図も理解できます。 良い講義でした。

    • apiece
      知識共有者

      こんにちは、AKBAさん。心のこもった受講レビューをありがとうございます! 何度も復習したくなるほど講義の深さを感じていただけたとのことで、大変うれしく思います。 ご自身でコードを書きながらロジックを理解しようとされた点も、私が講義を作る際に意図していた部分と重なっており、お役に立てたのではないかと思います。難易度や講義の長さについてのご意見も、次回の講義を準備する際にぜひ参考にさせていただきます。 Windowsでの実習でご不便をおかけした点については、最近のテストスクリプトはGit Bashで動作するように準備していたのですが、ご案内が不足していたようです。今後はWindowsでの実行方法もより簡単に見つけていただけるよう改善してまいります。 心のこもった受講レビューを改めてありがとうございます。また、良い講義だと言っていただき、ありがとうございました😊

  • devdev123님의 프로필 이미지
    devdev123

    受講レビュー 1

    ∙

    平均評価 5.0

    5

    100% 受講後に作成

    [良かった点] - アーキテクチャを段階的に発展させていく方式なので、各段階で何がなぜ改善されるのかを明確に実感できる - 特にRedis、Kafkaをいつ、どの箇所に導入すべきかの判断基準を学べるため、設計の観点で非常に役立つ [惜しかった点] - Windows環境ではシェルスクリプトをGit Bashなどで迂回して実行する必要があり、それでも途中で行き詰まる箇所があるため、直接修正しながら進める必要がある [難易度] - 初級と表記されているが、実際には中級に近い。初級者の場合、説明を十分に理解するのは難しい可能性がある

    • apiece
      知識共有者

      こんにちは、開発中さん! アーキテクチャを段階的に発展させていく過程や、どのツールをいつ、どのような理由で導入すべきかという点について、しっかり学んでいただき、また心のこもった受講レビューもお寄せくださりありがとうございます! 😊 お話しいただいたWindows環境でのシェルスクリプトの使用や難易度については、受講生の皆さんがよりスムーズに学習を進められるよう、改善していきたいと思います。貴重なフィードバックをお寄せくださり、改めてありがとうございます! 🙏

  • s1121238291님의 프로필 이미지
    s1121238291

    受講レビュー 100

    ∙

    平均評価 4.9

    5

    100% 受講後に作成

    システムアーキテクチャの流れをよく理解できました。 講義の難易度は初級とされていますが、 活用されているインフラは初級レベルではないように感じました。 個人的には、 AIコードのレビューよりも、実際にライブコーディングする形式のほうを好むため、 その点は良かったです。 ただ、Javaには慣れているため、Kotlinの文法には馴染みがありませんでした。 また、パッケージ名を自分の都合で変更して学習を始め、 Windows Git Bash上でK6をコンテナとして起動して 進めたこともあり、 シェルスクリプトのテストがかえって学習を難しくしました。 シェルスクリプトのテストをコピー&ペーストすることで便利だと感じる人もいると思いますが、 私はあまり好みではありませんでした。 K6とシェルスクリプトのテストの流れは思ったよりも読み取りにくく、 時間が経ってから見ると、またテストの流れを忘れてしまいそうです。 しかし、受講者にとっては、 アーキテクチャの観点やRedisの活用方法という面で 大いに役立つと思うため、良い講義だと思います。

    • apiece
      知識共有者

      こんにちは、SPRINGさん!高い評価とともに、詳しい受講レビューをお寄せいただきありがとうございます! システムアーキテクチャの流れやRedisの活用という点でお役に立てたこと、またライブコーディング形式についても良かったと感じていただけたことをお聞かせくださり、ありがとうございます。 一方で、講義内で扱ったインフラ部分が初級レベルより難しく感じられる可能性があるという点にも共感しております。今後は難易度や講義構成にもより注意を払っていきたいと思います。また、慣れていないKotlinの文法やシェルスクリプトベースのテストが学習の流れを難しくする可能性があるというフィードバックも、参考にさせていただきます。 それにもかかわらず、講義を最後まで受講してくださり、高い評価とともに詳しいフィードバックまでお寄せいただき、ありがとうございます。いただいたフィードバックをもとに、今後さらに良い講義へと改善してまいります。ありがとうございます 🙇‍♂️

apieceの他の講座

知識共有者の他の講座はこちら

似ている講座

同じ分野の他の講座を見てみましょう!