シェア

はじめに

アプリケーションアーキテクチャへの最も一般的な 2 つのアプローチは、機能が単一の大規模なアプリケーションによって提供されるモノリシックアプリケーションと、機能が相互に連携する小さなユニットに分割されるマイクロサービスアーキテクチャです。これらの設計上の選択は、開発エクスペリエンス、デプロイの容易さ、および運用フットプリントの点で広範囲に影響を与える可能性があります。

アプリケーションアーキテクチャが環境に影響を与える最も重要な方法の 1 つは、データベースの操作方法に影響を与える方法です。アプリケーション構造は、データ構造に影響を与え、データが保存される可能性のある場所と操作方法にも影響を与えます。このガイドでは、モノリシックとマイクロサービスの違い、特にこれらの決定がデータベースにどのように影響するかについて説明します。

モノリスとマイクロサービスとは?

ソフトウェア開発において、モノリスとマイクロサービスはどちらもアプリケーションアーキテクチャを記述します。

モノリシックアプリケーション

モノリシックアプリケーションは、従来のアプリケーション開発およびデプロイのスタイルです。モノリシック設計では、有用な作業を実行するために必要な処理、通信、および調整のほとんどは、単一のアプリケーション内で内部的に行われます。アプリケーションは、外部世界とインターフェースして、ユーザーからの入力とコマンドを受信し(多くの場合、Web サーバーエンドポイントを介して公開されます)、データベースなどの他のサービスと対話します。

モノリスは、十分に理解された開発パターンに従い、デバッグとトラブルシューティングに役立つ大規模なツールスイートがあるため、人気があります。モノリシックアプリケーションの統合された性質は、運用環境でのデプロイと管理も比較的簡単にします。さまざまなチームが同じアプリケーションで作業する場合に変更を調整するために注意が必要ですが、可動部品の数は比較的少なくなっています。

そうは言っても、単一の包括的なアプリケーションを使用することには、多くの欠点もあります。特定の機能に関連するすべてのコードが互いに歩調を合わせていることを保証するために、アプリケーション開発は緊密に調整する必要があります。アプリケーション全体をさまざまな要求に合わせてスケーリングする必要がある場合、スケーリングも非常に困難になる可能性があります。特に、複数のコピーを実行する必要がある場合に、アプリケーションに調整に必要なインターフェースまたはロジックがない可能性があるためです。

マイクロサービス

マイクロサービスは、アプリケーションの機能を多くの個別の「サービス」に分割することを伴う、アプリケーションを構築するための代替アプローチです。これらのサービスはそれぞれ、狭く定義された責任を持ち、ネットワーク経由で相互に連携して、有用な作業を完了します。ある意味で、マイクロサービスは、アプリケーションを分解し、内部通信をネットワーク通信として再実装する開発スタイルです。

人々がモノリシックアプリケーションよりもマイクロサービスを選択する理由はたくさんあります。マイクロサービスを使用すると、個々のパフォーマンスと負荷特性に応じてサービスを個別にスケーリングできます。スケーラビリティ自体の利点に加えて、さまざまなホストで小さなコンポーネントの複数のコピーを実行すると、アプリケーションの回復力が高まり、ハードウェア障害がダウンタイムを引き起こさないようにすることができます。

この柔軟性により、さまざまなコンポーネントのスケーリングだけでなく、開発自体も分離できます。異なるサービスは、他のコンポーネントが通信できるインターフェースを提供する限り、完全に異なる言語を使用して構築できます。これは、チームがコンポーネントに対して持つことができる経験豊富な「所有権」に大きな影響を与える可能性があり、迅速なイテレーションや、他の領域に影響を与えることなくサービスを完全に書き換える能力などの利点を可能にします。

マイクロサービスには、独自の課題も導入されています。たとえば、多数のサービスをデプロイおよび管理する運用の複雑さは、特にチームに強力な運用バックグラウンドがない場合、圧倒される可能性があります。サービス間通信の重要性は、ネットワーク層に課せられる要求とトラフィック量の両方の複雑さを増大させます。同時に、従来のツールが分散環境では適用できないことが多いため、デバッグとテストがより困難になります。

マイクロサービスはデータベースアーキテクチャにどのように影響するか?

上記で説明したアーキテクチャオプションは、開発プロセスがどのように見えるか、および本番環境でアプリケーションを運用することがどのようなものかに大きな影響を与えます。特に影響を受ける可能性のあるコンポーネントの 1 つはデータベースです。

モノリシックアプリケーションは、多くの場合、集中型データベースとともにデプロイされます。アプリケーションは、負荷をより均等に分散するために読み取り操作をレプリカに渡す場合がありますが、一般的に、データはすべて 1 か所に配置されます。この場合の集中型データベースは、多くの異なるアプリケーションコンテキストと機能に関連付けられた情報を管理する責任があります。

ただし、マイクロサービスは、より複雑なデータ環境と組み合わされることがよくあります。個々のマイクロサービスは、多くの場合、特定のサービスのデータのみを管理する独自のデータベースインスタンスとともにデプロイされます。

サービス固有のデータベースを使用する利点と欠点

このパターンが人気があるのは、開発者が各マイクロサービスを独立して反復処理およびデプロイできるためです。開発における最大の調整ポイントの 1 つは、データベースを変更するコードです。変更はアプリケーションの多くの異なる部分に影響を与える可能性があるためです。あるチームがデータベーススキーマを変更すると、以前のスキーマを想定して作成された機能が壊れる可能性があります。

各マイクロサービスに独自のデータベースを提供することで、このカスケード効果を分離し、開発者が調整を減らし、自信を高めて必要な変更を加えることができるようにします。これは、サービスを、適切に定義されたインターフェースを通じてのみ相互に対話する、個別の焦点を絞ったコンポーネントとして管理するという目標をさらに推進します。

ただし、データベースごとのマイクロサービスパターンには、独自の課題がないわけではありません。マイクロサービスの数が増えるにつれて、個々のデータストアの数も増えます。チームは、新しいサービスごとにデータベースのデプロイ、バックアップ、フェイルオーバー、およびその他の懸念事項を管理する必要があるため、運用要件が倍増します。十分に開発されたツールと専門知識がなければ、これは非常に早く手に負えなくなる可能性があります。

開発者は、複数のマイクロサービスに触れる可能性のあるクエリと更新を調整する方法も理解する必要があります。たとえば、注文が行われる場合、顧客のデータ、在庫データ、および注文情報自体が異なるマイクロサービスによって管理されている可能性があります。

結論

マイクロサービスパターンは、アプリケーションをスケーリングするのに役立ち、組織として特定の開発およびデプロイタスクを調整しやすくすることができます。新しいコードがアプリケーションの他の部分に与える影響を制限しながら、より迅速に反復処理と変更のリリースを行うのに役立ちます。

アーキテクチャの選択が開発プロセス、インフラストラクチャ、および運用要件のさまざまな部分にどのように影響するかを理解することが重要です。マイクロサービスの場合、データベース環境はモノリシックデプロイメントとは大きく異なることがよくあります。生産性を維持するために、どのような変更を予測し、課題を管理する方法を理解することが重要です。

著者について
Justin Ellingwood

Justin Ellingwood

Justin は、2013 年からデータベース、Linux、インフラストラクチャ、および開発者ツールについて執筆しています。現在、妻と 2 羽のウサギと一緒にベルリンに住んでいます。彼は通常、三人称で書く必要はありません。これは関係者全員にとって安心です。