マイクロサービスとモノリシックアーキテクチャ:より高速でスケーラブルなアプリケーションのデプロイが最優先事項ですか?

現在の競争が激しく、変化の速いビジネス環境において、マイクロサービスは、市場へのより迅速なデプロイ時間を求めるアプリケーションビルダーの要求を満たすために、従来のソフトウェアモノリスをしのぐ勢いです。

マイクロサービスは、Amazon、Google、PayPal、Netflixなどの主要ブランドからの支持を受けて、その人気を高め続けています。2018年には、Camundaが354の企業を対象にグローバル調査を実施し、回答者の60%がマイクロサービスフレームワークをプロセスに組み込むことに意欲的であることが明らかになりました。

そして、それが現在のグローバルなアプリケーション環境において明白な選択肢である理由を知るために、まず基本を理解する必要があります。

では、モノリシックアプリケーションとは一体何でしょうか?

企業のビジネス規模に関係なく、スタートアップ、中小企業、大企業を含むほとんどの組織は、問題点を分析し、それに応じて複数の機能を持つシステムを設計することにより、モノリシックアプリケーションを構築または構築してきました。

アプリケーションを設計する従来のアプローチは、プレゼンテーション、サービス、永続性などのレイヤーで設計し、そのコードベースを単一のファイルとしてデプロイすることです。それがまさにモノリシックアプリケーションの名前の由来であり、「モノ」は複数の機能に対する単一のコードを表しています。

モノリシックアプリケーションでは、すべての機能が1か所で管理および提供されます。データベース、クライアント側のインターフェース、ビジネスロジックで構成されるアプリの内部構造は、不可分なユニットのままであり、そのコンポーネントは通信にAPIを必要としません。

モノリシックからマイクロサービスアーキテクチャへの移行を決断した理由は何ですか?

モノリシックアーキテクチャは、複数の機能/特徴を持つ単一のコードベースを持つという利点がある小規模アプリケーションに適した選択肢です。しかし、アプリケーションが追加の機能と特徴で進化し始めると、すぐに混沌として制御不能になります。

従来からのモノリシックアーキテクチャのアプローチには、次のような特定の制限があります。

サイズとスケーラビリティ

  • コードベースは時間の経過とともに著しく大きくなり、理解するのが難しくなります。最終的に、統合開発環境が過負荷になり、アプリケーションの起動時間が遅くなります。
  • 開発者は新しいインスタンスを作成し、負荷を分散してトラフィックを分散させるオプションがありますが、モノリシックアーキテクチャは、負荷の増加と異なるモジュールのリソース要件の競合により、スケーリングが困難になります。

フォールトトレランスと信頼性

  • モノリシックアプリケーションに信頼性を期待することはできません。モジュールの1つに単一のバグがあると、アプリケーション全体が停止する可能性があります。
  • アプリケーションの特定の部分が大量の負荷/トラフィックに直面している場合、ルーティングと配信を最適化するために、アプリケーション全体の新しいインスタンスを複数のサーバーにデプロイする必要があります。これにより、不要なリソースが必要になり、コストと稼働時間に影響します。

柔軟性と管理

  • モノリシックアプリケーションの各モジュールは、不可分なユニットです。したがって、特定の機能を構築するために新しい開発者がプロジェクトに割り当てられた場合、不要な時間とコストを費やしながら、大規模なモノリシックアプリケーションのロジックを理解する必要があります。
  • モノリシックアプリケーションでは、特定の機能に適した新しいテクノロジーを採用することが制限されます。チームは、プロジェクトの開始時に決定された同じ技術スタックに従う必要があり、アップグレードがほぼ不可能なタスクになります。

市場投入までの時間の増加

  • 各モジュールが相互に接続されているため、モノリシックアプリケーションは、コードベース全体が開発されるまでデプロイできません。
  • また、テスト段階で特定の機能が動作しなくなった場合。アプリケーション全体を分析する必要があり、デプロイ時間がさらに長くなります。

マイクロサービスアーキテクチャはどのように異なりますか?

現在のマイクロサービスアーキテクチャは、モノリシックアーキテクチャで直面した制限に対処するために2000年代初頭に導入されたSOA(サービス指向アーキテクチャ)の進化形です。マイクロサービスアーキテクチャでは、ビジネスロジックは、複数の軽量で単一目的の自律的なサービスに分割されます。

以前のSOAでは、複数のサービス間の通信は、独立したデータベースのガイドラインなしに、異なるメッセージング標準を持つミドルウェアとして機能するESB(エンタープライズサービスバス)を介して行われていました。時間の経過とともに進化するにつれて、SOAはマイクロサービス向けにきめ細かくなり、各サービスはESBへの中心的な依存なしに互いに直接通信できるようになりました。

各モジュールが密結合されているモノリスと比較して、マイクロサービスフレームワークでは、モジュールの依存関係はそれほど明確ではなく、疎結合になっています。したがって、特定の機能のアップグレードは、アプリケーション全体に影響を与えることなく、より簡単なタスクになります。これは、マイクロサービスベースのアーキテクチャへの移行を検討する必要がある主な理由の1つです。

アプリケーションの構築段階に関係なく、マイクロサービスを優先する理由は何ですか?

多くの組織は、最初にモノリスでアプリケーションの構築を開始し、次にマイクロサービスフレームワークに移行するというアプローチに従います。

しかし、ここに考えがあります – より大きなシステムを構築する開始時に、より小さな部分を切り出す適切な時期は、適応しやすく、「優れたアーキテクチャ」がどのように見えるかを決定しやすくすることではないでしょうか?

また、同じライブラリを使用して共有される抽象化に基づいて相互に通信しているモノリス内の非常に密結合された部分を切り出すことは、非常に困難になる可能性があります。

したがって、マイクロサービスを使用して、大規模システム内の各モジュールの高速で独立した配信を許可してみませんか!マイクロサービスアプリケーションの潜在的な利点は、多くのアプリケーションにとって確かに欠点を上回ります。それらのいくつかを以下に概説します –

開発者の独立性

  • マイクロサービスは、より小規模なチームを活用して、作業している機能/部分とは独立して、異なる言語とさまざまなストレージテクノロジーを使用して並行開発を開始します。それは基本的に「ポリグロット」スタックを持つことです。
  • より小規模なクロスファンクショナルチームは、アプリケーション全体に関する決定を下すために大規模で複雑なチームを待つのではなく、独自のサービスを拡張できます。

フォールトアイソレーション

  • テクノロジーが古くなったらどうなるでしょうか?または、コードをさらに開発できない場合はどうでしょうか?サービスが互いに独立していることの最大の利点は、アプリケーションの残りの部分が引き続き動作している間、開発者がコードを変更できることです。
  • システム全体を停止または再起動せずに、新しいサービスをデプロイできます。

スケーラビリティ

  • モノリシックアーキテクチャとは対照的に、開発者はシステム全体を拡張する必要なく、システムのいずれかの要素を自由に変更できます。
  • システムの要件の増加に応じて、新しい機能を統合または追加するのが簡単です。

自律的に開発

  • マイクロサービスの自律的な性質は、より小さな個々の部分を複雑な配信システムに適合させやすいため、継続的な配信の明らかな利点を提供します。特定のサービスが失敗した場合、または要件が変更された場合、システム全体を中断することなく、特定のサービスを変更して再デプロイできます。
  • 割り当てられたサービスで独立して作業するチーム間で必要な調整は限られており、企業がより効率的かつ分散化されるのに役立ちます。

進化的

  • 将来、アプリケーションがどのデバイスからアクセスされるかわからない場合は、いつでも迅速に変更を許可し、ダウンタイムなしでアプリケーションを制御する自由があります。

より迅速なデプロイ

  • マイクロサービスアプリケーションは自己完結型であり、独立してデプロイできます。それらの起動時間とデプロイ時間は比較的短いです。

AWS – マイクロサービスのマーケットプレイス

Amazon Web Servicesは、マイクロサービスアプリケーションをデプロイするための最良の選択肢の1つです。これは、IaaS、PaaS、SaaSソリューション、およびSDKパッケージの膨大な種類を提供するためです。

モノリシックアプリケーションは、異なるレイヤー、ユーザーインターフェースレイヤー、ビジネスレイヤー、および永続レイヤーを使用して構築されます。マイクロサービスフレームワークの中心的なアイデアは、特定のドメインを実装することにより、機能をレイヤーではなく、まとまりのある垂直方向に分割することです。

AWSでのマイクロサービスの実装に関する優れた非常に徹底的なステップバイステップガイドがあります。時間を節約するための要点を次に示します。

出典:AWSでのマイクロサービスの実装

AWSには、あらゆる複雑さと規模のマイクロサービスアプリケーションの開発をサポートする広範な統合ビルディングブロックがあります。

  • コンピューティング能力:AWS EC2 Elastic Container ServiceおよびAWS Lambda Serverless Computing
  • ストレージ:セキュアストレージ(Amazon S3)およびAmazon ElastiCache
  • データベース:Amazon RDB、Amazon Aurora、Amazon DynamoDBなど多数
  • ネットワーキング:Amazon Service DiscoveryおよびAWS App Mesh、AWS Elastic Load Balancing、Amazon API Gateway、およびDNS用のAWS Route 53
  • メッセージング:メッセージキューイング用のAmazon SQSおよび公開と通知用のSNS
  • モニタリング:APIモニタリング用のAWS Cloudtrailおよびインフラストラクチャモニタリング用のAmazon CloudWatch
  • DevOpsおよびCI/CD:Amazon Container Image Repository(Amazon ECR)およびCI/CDワークフローを有効にするためのその他のDevOpsツール。

SourceFuseは、One CallのドライバーネットワークにAWSでマイクロサービスをどのように実装しましたか?

マイクロサービスがより良い選択肢であるという考えを裏付ける実際の経験はありますか?はい、最近関わったいくつかのシステムがあり、マイクロサービスが明白な選択肢であることが証明されています。

SourceFuseは、One CallのドライバーネットワークにAWSでマイクロサービスアプリケーションアーキテクチャを採用しました。マイクロサービスアーキテクチャパターンにより、各マイクロサービスを独立してデプロイできるようになりました。機能の総量は変わらないままですが、アプリケーションは管理可能なチャンクまたはサービスに分割され、各サービスを独立して拡張できるようになりました。

マイクロサービスに関するSourceFuseオープンソース貢献

SourceFuseは、世界中でスケーラブルなデジタルソリューションを提供することに焦点を当てたオープンソーステクノロジーを活用し、提供しています。Sourcefuseの開発者がコミュニティ向けに作成したマイクロサービスのカタログを次に示します。

後書き

結局のところ、マイクロサービスは単なるテクノロジーではなく、組織がビジネスロジックの複雑さに基づいて採用できるアジャイルな概念です。これにより、ソリューションが成長する際にアプリを簡単に分解し、プロジェクトの迅速な配信を維持できます。

マイクロサービスアーキテクチャの概念に慣れていない場合は、アプリケーションをより信頼性が高く、効率的かつ迅速な方法でデプロイできるようにお手伝いします。