EXERCISE 90分

ストーリー

高橋アーキテクト
ここからはレベルが上がる。停止が許されないシステム、データの不整合が致命的なシステム。ミッションクリティカルの世界だ
高橋アーキテクト
全てのケーススタディで、可用性、一貫性、災害対策を意識して設計してほしい

ミッション一覧

#ミッション難易度推定時間
1オンライン銀行の振込システムを設計せよ応用25分
2航空券予約システムを設計せよ応用25分
3スマート工場のIoT監視システムを設計せよ発展20分
4グローバル分散データベースを設計せよ発展20分

Mission 1: オンライン銀行の振込システム

要件

  • 口座間の振込処理(同一銀行内 + 他行宛)
  • 残高の一貫性保証(二重引き落とし禁止)
  • 取引の完全な監査証跡
  • 1日100万件の振込処理
  • 可用性 99.99%

設計すべき項目

  1. 振込処理のトランザクション設計(Saga or 2PC)
  2. 冪等性の保証方法
  3. 他行振込の非同期処理(全銀ネット連携)
  4. 監査ログの設計
回答例

トランザクション設計: Sagaパターンを採用。

  1. 送金元口座の引き落とし(ローカルトランザクション)
  2. 送金先口座への入金(ローカルトランザクション)
  3. 失敗時は補償トランザクション(引き落とし額の戻し入れ)

冪等性: 振込リクエストIDをユニークキーとして管理。同一リクエストIDの再送時は既存結果を返す。

他行振込: メッセージキュー経由で非同期処理。全銀ネットのバッチウィンドウに合わせて送信。ステータスは「処理中→完了/失敗」で管理。

監査ログ: 全操作をイベントソーシングで記録。改ざん防止のため追記専用(Append-Only)。口座残高はイベントの集約から導出。


Mission 2: 航空券予約システム

要件

  • 座席指定付きの予約
  • 同一座席の二重予約防止
  • 仮予約(15分の決済猶予)
  • 国際フライトの時差対応
  • ピーク時(セール時)5万同時アクセス

設計すべき項目

  1. 座席在庫管理のロック戦略
  2. 仮予約→決済→確定のフロー
  3. フライト検索の最適化
  4. セール時の高負荷対策
回答例

座席在庫管理: 悲観的ロック(SELECT FOR UPDATE)で座席単位のロック。座席テーブルに status カラム(AVAILABLE, RESERVED, BOOKED)を持つ。

予約フロー:

  1. 座席選択 → 悲観的ロックで座席確保 → status = RESERVED、15分TTL設定
  2. 決済画面へ遷移(15分以内)
  3. 決済成功 → status = BOOKED、チケット発行
  4. 15分経過 → スケジューラが status = AVAILABLE に戻す

検索最適化: フライト・日付・価格を事前集計してElasticsearchに格納。在庫数はRedisでリアルタイム管理。

高負荷対策: 仮想待合室(Queue-it方式)でフロント制御。リクエスト流量をバックエンドの処理能力内に制限。座席マップのキャッシュは5秒TTL。


Mission 3: スマート工場のIoT監視システム

要件

  • 1万台の製造装置からのリアルタイムデータ収集
  • 異常検知から3秒以内にアラート
  • 装置故障の予知保全
  • 生産ライン停止コマンドの送信
  • データの7年間保存(法規制対応)

設計すべき項目

  1. テレメトリデータの収集と処理パイプライン
  2. リアルタイム異常検知のアルゴリズム
  3. 予知保全のためのMLモデル基盤
  4. 緊急停止コマンドの確実な配信
回答例

データ収集: 各装置 → エッジゲートウェイ(ローカル前処理) → MQTT → IoT Core → Kafka → Flink(ストリーム処理)。エッジで第一次フィルタリングを行い、帯域を最適化。

異常検知: 3層構造

  • Layer 1 (エッジ): 単純閾値チェック(温度 > 100度で即座にローカルアラート)
  • Layer 2 (ストリーム): 時系列パターン分析(直近5分の移動平均の急変)
  • Layer 3 (バッチ): MLモデルによる予知保全(Random Forest / LSTM)

予知保全: 過去の故障データとテレメトリを教師データとして学習。故障確率が70%を超えたら保全アラート。モデルは月次で再学習。

緊急停止: MQTT QoS 2(Exactly Once配信)で送信。ネットワーク障害時はエッジゲートウェイが自律判断でローカル停止。ACKが返るまでリトライ。


Mission 4: グローバル分散データベース

要件

  • 5リージョン(東京、シンガポール、フランクフルト、バージニア、サンパウロ)
  • 各リージョンで読み書き可能
  • 書き込み競合の自動解決
  • RPO < 1秒、RTO < 30秒
  • 1リージョン障害時もサービス継続

設計すべき項目

  1. データレプリケーション戦略
  2. 競合解決のアルゴリズム
  3. グローバルルーティングとフェイルオーバー
  4. 一貫性レベルの選択
回答例

レプリケーション: Active-Active構成。Raft/Paxosベースのコンセンサスプロトコルで3リージョン以上の合意で書き込みコミット。残り2リージョンには非同期伝播。

競合解決: リージョンシャーディング + CRDTの組み合わせ。

  • ユーザーデータ: ユーザーの地域に基づくオーナーリージョンで書き込み
  • カウンター系: CRDTのG-Counter/PN-Counterで競合なし集約
  • その他: Lamport Timestampによるlast-write-wins

ルーティング: Anycast DNS + ヘルスチェック。障害検知後30秒以内にDNS更新。トラフィックは自動的に正常リージョンに振り分け。

一貫性: データ種別により選択。

  • 決済データ: Quorum Read/Write(強い一貫性)
  • ユーザープロファイル: 結果整合性(数秒のラグ許容)
  • セッション: Sticky Sessionで同一リージョンに固定

達成チェックリスト

  • Mission 1: 銀行振込システムの設計を完了した
  • Mission 2: 航空券予約システムの設計を完了した
  • Mission 3: IoT監視システムの設計を完了した
  • Mission 4: グローバル分散データベースの設計を完了した
  • 全てのミッションで可用性・一貫性・災害対策を考慮した
  • トレードオフを明示的に記述した

次のステップへ

次はStep 4のチェックポイントです。ミッションクリティカルシステムの知識を確認しましょう。


推定所要時間: 90分