LinuCレベル4 システムアーキテクト システムアーキテクチャ 問22
システムアーキテクチャ/アーキテクチャの設計原則と主要パターン受注・在庫・会員・配送の4機能が1つのモノリスアプリケーションに統合されている。エンジニアチームは少人数であり、全機能を一括して新アーキテクチャへ移行するリスクを避けたい。サービスを止めることなく、機能単位で段階的にマイクロサービスへ切り出す方針を採用した。採用する方式として最も適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル4 システムアーキテクトの出題範囲「システムアーキテクチャ」に対応。実際の試験問題ではありません)
- A先に共有データベースを機能ごとのDBに分割してから、各機能を順にマイクロサービスとして切り出す
- B全機能の新マイクロサービスを並行開発し、テスト完了後に一括でモノリスから切り替えてモノリスを廃止する
- C各機能について、モノリスと新サービスの両方でDBへ書き込む(デュアルライト)構成を全機能に適用し、データの一致を確認してからモノリスを廃止する
- Dモノリスの前段にリバースプロキシを置き、切り出し済み機能を新サービスへ転送し、残りはモノリスへルーティングしながら段階的に縮小していく
正解:D
解説
Strangler Figパターンは、既存のモノリスを停止せずに前段のルーティング層を介して機能ごとに新サービスへ段階的に移行する手法。プロキシが切り出し済みの機能を新サービスへ、まだ残っている機能をモノリスへ振り分ける。切り出しが完了した機能のモノリス側コードを削除していくことで最終的にモノリスがなくなる。ダウンタイムなしに段階的な移行が可能なため、少人数チームや段階的リスク軽減の要件に合致する。
選択肢ごとの解説
- A誤り。DB分割をサービス分割より先に行う方式は、アプリとDBの整合性を同時に維持しなければならず難易度が高い。実際にはまずサービス境界のAPIを外出しにし、共有DBを後から段階的に分離していくほうが現実的な順序。
- B誤り。全機能の同時移行(Big Bang移行)は、テスト・ロールバックのコストが高く「全機能の一括移行リスクを避けたい」という前提に反する。
- C誤り。デュアルライトによる並行稼働は特定の局面では使われる技術だが、4機能すべてに長期間デュアルライトを維持すると整合性保証と保守コストが膨大になり現実的でない。
- D正しい。Strangler Figパターンの典型的な実装。プロキシがモノリスと新サービスへのルーティングを切り替える役割を担い、機能の切り出しが完了するごとにモノリスの対応コードを廃止できる。段階的かつダウンタイムなしという要件を満たす。