ストーリー
ミッション一覧
| # | ミッション | 難易度 | 推定時間 |
|---|---|---|---|
| 1 | ECサイトのアーキテクチャをレビューせよ | 基本 | 20分 |
| 2 | ユーティリティツリーを作成せよ | 応用 | 20分 |
| 3 | 技術戦略を策定せよ | 応用 | 25分 |
| 4 | ADRを3件作成せよ | 発展 | 25分 |
Mission 1: ECサイトのアーキテクチャレビュー
レビュー対象のアーキテクチャ
graph LR
SPA["SPA"] --> API["モノリシックAPI<br/>Node.js"]
API --> PG[("PostgreSQL<br/>単一インスタンス")]
API --> Redis[("Redis<br/>単一インスタンス")]
API --> S3["S3<br/>画像ストレージ"]
- デプロイ: EC2 x 2台 (ALB背後)
- 1日の注文数: 1万件
- DAU: 10万人
- 今後12ヶ月で10倍に成長予定
レビュー項目
- このアーキテクチャのリスクを5つ以上特定せよ
- 各リスクの重要度(高/中/低)を判定せよ
- 各リスクの緩和策を提案せよ
- 10倍成長に耐えるための改善ロードマップを作成せよ
回答例
特定されたリスク:
-
[高] PostgreSQL単一インスタンスがSPOF
- 緩和策: リードレプリカ追加、自動フェイルオーバー(Aurora移行)
-
[高] Redis単一インスタンスがSPOF
- 緩和策: Redis Sentinel or ElastiCache Cluster化
-
[高] モノリスがスケーラビリティのボトルネック
- 緩和策: まずステートレス化。成長に応じてドメイン境界でサービス分割
-
[中] EC2 2台では10倍の負荷に耐えられない
- 緩和策: Auto Scalingグループ導入、最低4台に増強
-
[中] DBの書き込みスケーラビリティ
- 緩和策: 読み書き分離 + 注文テーブルのパーティショニング
-
[低] 画像配信のレイテンシ
- 緩和策: CloudFront CDN導入
改善ロードマップ:
- Q1: SPOF解消(DB/Redis冗長化、Auto Scaling)
- Q2: パフォーマンス最適化(CDN、キャッシュ戦略、読み書き分離)
- Q3: モノリスの段階的分割準備(ドメイン境界整理、API仕様策定)
- Q4: 最初のサービス分割(検索 or 在庫管理)
Mission 2: ユーティリティツリー作成
対象システム
オンラインチケット販売プラットフォーム(ライブイベントのチケットを販売)
要件
- 発売開始時にアクセスが集中(通常の100倍)
- 二重販売の防止が必須
- クレジットカード決済に対応
- モバイルアプリとWebの両方に対応
タスク
- 品質属性を4つ以上特定せよ(パフォーマンス、可用性、セキュリティ等)
- 各品質属性に対して具体的なシナリオを2つ以上記述せよ
- 各シナリオにビジネス優先度と技術難易度を付けよ(H/M/L)
- 上位3つのシナリオに対するアーキテクチャ上の対策を提案せよ
回答例
ユーティリティツリー:
| 品質属性 | シナリオ | ビジネス | 技術 |
|---|---|---|---|
| パフォーマンス | 発売開始時(通常100倍)でもp99 < 3秒 | H | H |
| パフォーマンス | 通常時のページ表示がp99 < 1秒 | M | L |
| 可用性 | 発売中にDBが障害でも購入フローを継続 | H | H |
| 可用性 | 99.99%の年間稼働率を達成 | H | M |
| セキュリティ | クレジットカード情報のPCI DSS準拠 | H | M |
| セキュリティ | Bot対策(転売目的の自動購入を防止) | H | H |
| 一貫性 | 同一座席の二重販売を完全に防止 | H | M |
| 変更容易性 | 新しい決済手段を2週間以内に追加可能 | M | L |
上位3シナリオの対策:
- ピーク時パフォーマンス: 仮想待合室 + Auto Scaling + CDN
- 発売中のDB障害: Multi-AZ配置 + 在庫キャッシュ + 自動フェイルオーバー
- Bot対策: CAPTCHA + デバイスフィンガープリント + レート制限
Mission 3: 技術戦略の策定
シナリオ
あなたは50人のエンジニア組織のアーキテクトです。以下の現状があります。
- 主要言語: PHP (Laravel)、一部Python
- DB: MySQL 5.7(EOL間近)
- デプロイ: 手動(FTP + SSH)
- テスト: ほぼなし(カバレッジ5%)
- モニタリング: サーバーのCPU/メモリのみ
タスク
- 技術原則を3つ策定せよ
- 技術レーダー(Adopt/Trial/Assess/Hold)を作成せよ
- 1年間の技術ロードマップを四半期ごとに作成せよ
- 技術的負債の優先順位付けを行え
回答例
技術原則:
- 「自動化ファースト」: 手作業は全て自動化の対象。CI/CDを最優先で導入
- 「段階的モダナイゼーション」: ビッグバンリプレイスではなく、段階的に改善
- 「計測駆動」: 監視・メトリクスなしに判断しない
技術レーダー:
- Adopt: Docker, GitHub Actions, Laravel 11, MySQL 8, Datadog
- Trial: TypeScript (新規マイクロサービス向け), Terraform
- Assess: Next.js (フロントエンド刷新), Kubernetes
- Hold: PHP 7.x (8.xに移行), FTPデプロイ, 手動テスト
ロードマップ:
- Q1: CI/CD導入 (GitHub Actions), MySQL 8移行, 監視導入 (Datadog)
- Q2: テスト基盤構築(カバレッジ30%目標), Docker化, Laravel 11移行
- Q3: IaC導入 (Terraform), ステージング環境整備, テストカバレッジ50%
- Q4: 初のマイクロサービス分離検討, フロントエンド刷新PoC
Mission 4: ADRを3件作成せよ
タスク
Mission 3のシナリオに対して、以下の3件のADRを作成せよ。
- データベースの移行先の選定
- CI/CDツールの選定
- モニタリングツールの選定
各ADRには Context, Decision, Consequences, Alternatives を含めること。
回答例
ADR-001: データベースの移行先
- Context: MySQL 5.7がEOLを迎える。新バージョンへの移行が必須
- Decision: MySQL 8.0に移行する(PostgreSQLへの変更は行わない)
- Consequences: 既存のクエリとORMの互換性を維持。新機能(CTEなど)が利用可能に
- Alternatives: PostgreSQL(学習コスト高)、Aurora MySQL(コスト増だがマネージド)
ADR-002: CI/CDツール
- Context: 手動FTPデプロイを自動化したい。GitHubを使用中
- Decision: GitHub Actionsを採用
- Consequences: GitHubとの統合がシームレス。月2000分の無料枠あり。YAML定義
- Alternatives: Jenkins(管理コスト高)、CircleCI(外部サービス依存増)
ADR-003: モニタリングツール
- Context: CPU/メモリのみの監視では障害検知が遅い。APM、ログ集約、アラートが必要
- Decision: Datadogを採用(APM + ログ + インフラ監視を統合)
- Consequences: 月額コスト増($23/host)。だが障害検知時間の短縮と運用効率化で相殺
- Alternatives: Grafana + Prometheus(OSS、運用コスト高)、New Relic(同等だが高価格)
達成チェックリスト
- Mission 1: アーキテクチャレビューでリスクを5つ以上特定した
- Mission 2: ユーティリティツリーを作成した
- Mission 3: 技術戦略(原則、レーダー、ロードマップ)を策定した
- Mission 4: ADRを3件作成した
- 全てのミッションで根拠を明記した
次のステップへ
次はStep 5のチェックポイントです。アーキテクチャレビューとキャリアの知識を確認しましょう。
推定所要時間: 90分