3層アーキテクチャとマイクロサービスアーキテクチャ、どちらを選ぶべきか類似点と違いを比較

3層アーキテクチャとマイクロサービスアーキテクチャを細かく比較し、どちらをいつ使用するかを考える。

» 2023年10月11日 08時00分 公開
[Chris TozziTechTarget]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

 高いレベルのモジュール性を求めるのであれば、マイクロサービスアーキテクチャが適している。だが、複雑さが増すことに価値があるかどうかや、どのように呼び出すかを検討しなければならない。

 アプリケーションアーキテクチャの選択は重要な決定事項だ。どの程度の複雑さまで対処するつもりがあるか、アプリケーションにどの程度の柔軟性を持たせるか、アプリケーションをどのようなタイプの環境でホストするかによって、その答えは変わってくる。

 モジュール型のアプリケーションを設計するのであれば、アプリケーションを3つの主要コンポーネントに分割する3層アーキテクチャを選択できる。あるいは、さらにモジュール性を高めるのであれば、マイクロサービスアーキテクチャも選択できる。

 本稿では、3層アーキテクチャとマイクロサービスアーキテクチャを細かく比較し、どちらをいつ使用するかを考えてみる。

3層アプリケーションアーキテクチャとは

 3層アプリケーションアーキテクチャでは、1つのアプリケーションを次の3つの主要部分に分割する。

  1. プレゼンテーション層:ユーザーに表示されるフロントエンドをホストする
  2. アプリケーション層:内部のデータ処理を担当する
  3. データ層:アプリケーションに必要な全ての永続データを格納する

 3層アーキテクチャでは、この各層のコンポーネントを個別に実装する。つまり、3層アプリケーションは、全ての機能を単一のプロセスとして実行するモノリスとはこの点が異なる。

 3層アプリケーションでは、各層を別々にデプロイすることを選択できる。例えば、あるサーバでデータベースをホストし、データ層を実行する。一方、別のサーバでプレゼンテーション層とアプリケーション層を実行し、LAN(Local Area Network)で3つの層を相互接続する構成も可能だ。このアプローチによってアプリケーションの各層をある程度分離できるため、セキュリティ上のメリットを得られる可能性もある。

 また、アプリケーションの3層全てを同じサーバにデプロイし、各層を異なるプロセスで実行することもできる。このシナリオでは各層の分離は実現できないが、各層をネットワークで接続する必要がなくなる。そのため、ネットワークのパフォーマンスが内部アプリケーションのパフォーマンスに悪影響を与えることはない。

マイクロサービスアーキテクチャとは

 マイクロサービスアーキテクチャとは、アプリケーションを複数の独立した部分に分割するアプリケーション設計手法だ。この独立した部分をマイクロサービスと呼ぶ。

 1つのアプリケーションに含めるマイクロサービスの数を厳密に定めるルールはない。通常、マイクロサービスの数は3つよりも多い。この点が3層アーキテクチャとは異なる。例えば、プレゼンテーション層を複数のマイクロサービスに分けても構わない。その場合、アプリケーション内の主要ページやコンテンツの種類ごとに1つずつマイクロサービスを用意できる。内部ロジックを担うアプリケーション層で複数のマイクロサービスを利用し、データのバックエンドとなるデータ層でもデータ処理のさまざまな側面に応じてさまざまなマイクロサービスを用意するのが一般的だ。

3層アーキテクチャとマイクロサービスアーキテクチャの類似点

 3層アプリケーションとマイクロサービスアプリケーションは、モノリシックアーキテクチャとは異なり、アプリケーションを複数のモジュールに分割する点が似ている。そのため、両アーキテクチャは以下のようなメリットをもたらす。

(1)アプリケーションのコードベースを個別のパーツに分離できる。そのため、開発やソースコードの管理がシンプルになる。

(2)アプリケーションの各コンポーネントを個別にデプロイできる。そのため、デプロイメントとアップデートのプロセスがシンプルになる。

(3)アプリケーションの各パーツをある程度分離できる。分離することで、一部のパーツが侵害を受けても他のパーツに影響が及ぶ可能性が減るため、セキュリティ上のメリットがもたらされる。1つのパーツでメモリリークが発生するなどの問題が起きても、必ずしもその問題がアプリケーション全体の障害につながるわけではないので、パフォーマンスも向上する。

 端的にいえば、どちらのアーキテクチャもモノリスに比べて柔軟性とアジリティが高まる。

 一方、3層アーキテクチャとマイクロサービスアーキテクチャはどちらも複雑さを伴う。開発チームは、アプリケーションのビルド、デプロイ、管理の各プロセスで複数のパーツを扱う必要がある。

3層アプリケーションアーキテクチャとマイクロサービスアーキテクチャの主な違い

 3層アプリケーションとマイクロサービスアプリケーションの主な違いは、構成するモジュールの数で、マイクロサービスアプリケーションの方がモジュール数が多くなる。

 マイクロサービスアプリケーションでは、前述のメリットとデメリットの両方が倍増する。マイクロサービスアーキテクチャでは、アプリケーションを細かいパーツに分割できるため、柔軟性やアジリティは3層アーキテクチャよりも高くなる。

 ただし、個別のパーツが非常に多くなるため、アプリケーションの作成と管理が複雑化する。また、デプロイして追跡するパーツも多くなる。さらに、マイクロサービス同士の依存関係の管理も必要になる。事実、マイクロサービスアプリケーションは極めて複雑になるため、オーケストレーターやサービスメッシュなどの特殊なツールの使用が必要になることも多い。通常、3層アプリケーションにそのようなツールは必要ない。

いつどちらを使用するか

 では、開発するアプリケーションには3層アーキテクチャとマイクロサービスアーキテクチャのどちらが適しているのだろうか。どちらを選択するかは、次の点を考慮する。

アプリケーションの機能の複雑さ

 基本的なWebコンテンツを提供するなど、わずかなことしか行わないアプリケーションには3層アーキテクチャが適している。マイクロサービスアーキテクチャでは、機能単位に個別のマイクロサービスを作成できるため、多種多様な処理を行う必要のある複雑なアプリケーションに適している。

アプリケーションのスケーラビリティ

 どちらのアーキテクチャもモノリスよりはスケーラビリティが高い。だが、マイクロサービスアプリケーションの方が効率よくスケーリングできる。個々のパーツをさらにスケーリングできるため、より細かい単位でスケールアップとスケールダウンが可能になる。

アプリケーションのデプロイ先

 ホスト環境が1〜数台のサーバで構成される場合は、マイクロサービスを大規模なクラスタに分散させることができないため、3層アーキテクチャの方が効率が高くなる可能性がある。マイクロサービスを大規模クラスタに分散できれば、スケーラビリティと回復力が最大限に高まる。マイクロサービスではこのスケーラビリティと回復力が最大のメリットになる。

ソフトウェア開発プロセスの洗練度

 複数のマイクロサービスを同時に開発できる高度なCI/CDパイプラインを利用できるのであれば、マイクロサービスアーキテクチャの方が適している。開発作業にシンプルさを求めるチームには、ソフトウェアのデリバリーパイプラインに複雑さをそれほどもたらさない3層アーキテクチャの方がメリットは多い。

複雑なアプリケーションに対するITチームの準備状況

 3層アプリケーションはデプロイ、監視、管理がシンプルなため、小規模ITチームや、複雑なアーキテクチャに不慣れなITチームに適している。

Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。