モノリシックアプリケーションとは何ですか?

モノリシック アプリケーションは、複数の機能のユーザー インターフェイスとデータ アクセス レイヤーを 1 つのアプリケーションに統合します。 通常、モノリシック アプリケーションは、組織内の複数のチームによって変更される単一のコードベースとして存在し、それらのチームが管理するすべての機能を含む単一のユニットとして展開されます。

モノリシック アプリケーションは、コンポーネントが緊密に統合されているため、開発と展開が容易になることがよくあります。 ただし、アプリケーションの範囲とパフォーマンスの要求が増加すると、モノリスの保守と拡張が困難になる可能性があります。

モノリシック アプリケーション アーキテクチャの例

モノリシック システムは、迅速に拡張したり、定期的に保守する必要のない、小規模で複雑性の低いアプリケーションに適しています。 以下は、一般的にモノリシックな基盤を持つアプリケーションの例です (ただし、新しい機能は、よりコンテナ化されたインフラストラクチャに基づいている場合があります)。

  • 電子商取引プラットフォーム – モノリシック アプリケーションは、電子商取引でよく見られます。これは、インフラストラクチャ (オンライン ストアの構築、注文処理、支払い処理、顧客サービス) がセットアップされると、アーキテクチャの更新がほとんど必要なくなるためです。
  • コンテンツ管理システム (CMS) – この用語集のエントリは、モノリシック アプリケーション (WordPress) によって可能になりました。 CMS アプリケーションを展開すると、Web ページの形式でコンテンツ管理に必要なすべての機能が含まれます。
  • 銀行システム – 多くの金融システムは、エントリポイントが制限されているため、より安全となるモノリシック アプリケーションとして構築されています。 さらに、展開すると、コードベースには、金融取引の管理、支払い処理、追跡など、消費者がオンライン バンキング エクスペリエンスに期待するすべての機能が含まれます。
モノリシック アーキテクチャの利点

モノリシック アーキテクチャの一部は時代遅れになっていますが、依然として多くの目的と肯定的な特性が残っています。

モノリスの利点は次のとおりです。

  • シンプルさ - 集中型アーキテクチャにより、マイクロサービス アーキテクチャなどのより複雑なアーキテクチャと比較して、モノリスの開発、展開、保守が容易になります。
  • テストの高速化 - すべてのコンポーネントを 1 つのプログラムに統合することで、モノリシック アプリケーション全体を迅速にテストできます。 複数の小さなコンポーネント (マイクロサービスなど) で構成されるアーキテクチャとは異なり、複雑な通信プロトコルや複数のコード リポジトリに対する追加テストはありません。
  • セキュリティ – 悪意のある行為者の侵入ポイントが少ないため、モノリスは一般的にセキュリティ保護が容易です。 また、複数のセキュリティ構成を管理するよりも、1 つのアプリケーション全体にセキュリティ プロトコルを適用する方が簡単です。
  • コスト - モノリスは単一のユニットとして導入されるため、追加の通信プロトコルの導入と保護、より接続性の高いインフラストラクチャの構築、より専門的なスキルとトレーニングを受けた従業員の雇用に関連する余分なコストが削減されます。
モノリシック アーキテクチャの欠点

モノリスの単一性には利点もありますが、問題を引き起こす可能性もあります。

モノリスの欠点は次のとおりです。

  • 複雑さの増大– 時間の経過とともに、アプリケーションの成長と機能の追加により、モノリシック アーキテクチャが大きくなり、複雑になる可能性があります。 この無秩序な広がりにより、プログラム全体をスムーズに実行し続ける単一のコードベースが更新によって危険にさらされるリスクが増大します。
  • スケーラビリティの欠如- アプリケーションの 1 つの機能または領域を水平方向に拡張する必要がある場合、大規模なアプリケーション全体 (追加のリソースを必要としないサブシステムを含む) を拡張する必要があります。 これにより、デプロイメントに時間がかかるためスケーリングが遅くなるだけでなく、マイクロサービスと比較すると各インスタンスの実行に必要なハードウェア要件が大きくなるためコストが増加する可能性があります。
  • 回復力- モノリシック アーキテクチャでは、すべてのアプリケーション コンポーネントが緊密にリンクされ、中央のコードベースから実行されます。 したがって、1 つでも障害が発生すると、アプリケーション全体がダウンする可能性があります。
  • 完全な再デプロイメント- アプリケーション全体を表す単一のコードベースを持つモノリスでは、単一のコンポーネントが変更または更新されるたびに完全な再デプロイメントが必要になります。
  • テクノロジー スタック- 開発者は使用するツールや言語がモノリスに適合することを確認する必要があるため、選択肢が制限されます。 また、多くのモノリシック アプリケーションは、クラウド コンピューティングやコンテナ化などの新しい、より効率的なテクノロジと完全に互換性がない方法で作成されています。
  • 開発の速度低下- 複数の開発チームが 1 つの大規模なコードベースで作業する場合、インターフェースとドメイン境界が尊重され、維持されるように細心の注意を払う必要があります。 場合によっては、コードによって複雑な結合が生じ、チーム間の依存関係によって新機能の開発や重大な問題の修正が遅くなることがあります。
マイクロサービス アーキテクチャとは?

モノリシック アーキテクチャとは対照的に、マイクロサービスアーキテクチャがあります。 マイクロサービスとは、小さなコンポーネントから大規模で複雑なアプリケーションを構築するソフトウェア アーキテクチャへのアプローチです。 これらのコンポーネントはそれぞれ単一の機能 (認証、通知、支払い処理など) を実行することも、モノリス内でバンドルとして動作することもできます。 「マイクロサービス」(または単に「サービス」)は、小さなコンポーネント自体を指す用語でもあります。

モノリシック アプリは密結合されています (つまり、コンポーネントが相互接続されています) が、マイクロサービス アプリは分散されています (つまり、コンポーネントが独立して動作できます)。 アプリケーションが大規模かつ複雑になるにつれて、多くの組織はモノリスからの移行、またはマイクロサービス形式での新しいアプリケーションの組み込みを検討しています。

NGINXは、モノリシックおよびマイクロサービスを検討している方々のために、以下の無料教育リソースを提供できることを誇りに思います。