
【この記事はこんな方に向けて書いています】
- サービスが成長し、既存のシステム(モノリシックアーキテクチャ)に限界を感じているエンジニア
- マイクロサービスという言葉は聞くけど、そのメリット・デメリットを正しく理解したい方
- 技術選定やアーキテクチャ設計に関わるテックリードやマネージャー
- 巨大サービスの裏側の仕組みに興味がある、すべての開発者
機能を追加するたびに、予期せぬバグが発生する…。ちょっとした修正なのに、デプロイに半日かかる…。特定の機能にアクセスが集中しただけで、サービス全体がダウンする…。あなたの開発現場は、そんな「モノリシック地獄」に陥っていませんか?
その根深い問題を解決するアーキテクチャとして、今、大きな注目を集めているのが「マイクロサービス」です。NetflixやAmazonといった巨大企業が採用していることでも有名ですよね。
しかし、その本質を理解しないまま「流行っているから」という理由で飛びつくと、かえって開発が複雑化し、悲惨な結果を招きかねません。マイクロサービスは、決して銀の弾丸ではないのです。
この記事では、巨大なECサイトを例に、マイクロサービス化の本当の目的と、そのメリット・デメリットを、初心者にも分かりやすく解説します。
モノリシックなECサイト:一枚岩の“巨大な”アプリケーション
まず、マイクロサービスの比較対象となる、従来の「モノリシックアーキテクチャ」について理解しましょう。モノリシックとは「一枚岩」という意味です。
ECサイトを例にとると、「商品管理」「在庫管理」「注文管理」「ユーザー管理」「決済」といった全ての機能が、一つの大きなアプリケーションとして、ガッチリと結合している状態を指します。
これは例えるなら、全部署がワンフロアで壁もなく働いている「巨大なオフィス」のようなもの。開発初期は、部署間の連携が取りやすく、意思決定も速いため、スピーディーにビジネスを立ち上げられるというメリットがあります。
しかし、事業が拡大し、社員(機能)が増えてくると、様々な問題が発生します。営業部(注文機能)が電話対応で騒がしいと、隣で集中したい開発部(商品管理機能)の仕事に支障が出る。オフィスの改修(機能修正)をするにも、全社員に影響が出るため、調整が大変でなかなか進まない。これが「モノリシック地獄」の正体です。
マイクロサービスなECサイト:小さな専門店が集まる“ショッピングモール”
このモノリシック地獄を解決するのが、マイクロサービスです。先ほどのECサイトの各機能を、「商品サービス」「在庫サービス」「注文サービス」といったように、それぞれが独立した小さなサービス(=マイクロサービス)として分割して開発します。
これは、例えるなら「ショッピングモール」です。
モールの中には、「アパレル店(商品サービス)」や「レストラン(注文サービス)」、「書店(ユーザーサービス)」といった様々な専門店が独立して運営されています。各店舗は、それぞれ独自のやり方(プログラミング言語やデータベース)で経営でき、内装の変更(デプロイ)も他の店舗に影響を与えずに自由に行えます。
レストランが大行列(高負荷)になっても、隣の書店が閉店(障害発生)することはありません。これが、マイクロサービスの最大の強みである「耐障害性」と「スケーラビリティ」です。Amazonでは、このアーキテクチャにより、1年間に数千万回という驚異的な頻度のデプロイを実現していると言われています。
マイクロサービス化:本当にあなたの組織に必要か?
ここまで聞くと、マイクロサービスは良いこと尽くめのように思えますが、当然、光があれば闇もあります。
(メリット)
- チームごとに独立して高速に開発・デプロイできる
- サービスごとに最適な技術(言語、DB)を選べる
- 一つのサービスの障害が全体に波及しにくい
- 負荷に応じて必要なサービスだけを拡張できる
(デメリット)
- 全体のアーキテクチャが複雑になる
- サービス間の通信(API連携)の管理が大変
- テストやデバッグが難しい
- 運用・監視のコストが増大する
ショッピングモールを運営するには、各店舗の管理だけでなく、モール全体の警備や清掃、案内所といった、モノリシック時代には不要だった多くの追加コストと複雑性が生まれるのです。
マイクロサービス化の本質は、「技術」の問題以上に「組織」の問題です。サービスを分割することは、チームの責任と権限を分割することに他なりません。組織がそれに追いついていなければ、導入は必ず失敗します。あなたのチームは、本当にマイクロサービスを導入できるほど成熟していますか?その問いに自信を持って「イエス」と答えられないなら、まずは目の前のモノリシックなシステムを、いかに綺麗に保つか。そこから考えるべきなのかもしれません。
コメント