マイクロサービス アーキテクチャ: コンピテンシーの特徴

公開: 2022-08-02

モノリシック システムは、コンテナ化とクラウド コンピューティングの現代ではもはや実現可能ではありません。 近年、ソフトウェア システムの複雑さが増し、モノリシック システムの作成と保守がますます複雑になっています。

システム コンポーネントは、モノリシック システム内の 1 つのユニットとして製造およびバンドルされます。 1 つのコンポーネントが変更された場合、システム全体を再展開する必要がありました。 これにより、スケーリングがより困難になり、汎用性が低下します。 自己完結型システムの相互接続および相互関連構造は、包括的なアプリケーションを構築する場合、開発者にとって困難な作業になる可能性があります。 影響を受けるシステムでは、重要な変更、新しいテクノロジー スタックの採用、アップグレードやアップデートの出荷も困難になります。 システム内で相互に通信できるさまざまなサービスで構成されるサービス指向アーキテクチャは、そもそもモノリシック プログラミングから移行するためのフレームワークを設定します。

マイクロサービス アーキテクチャは、この分野の次のステップであり、成功するソフトウェア開発戦略を確立するための、より統一されていながらきめ細かな手段でした。 「マイクロサービス アーキテクチャ」という言葉は、ソフトウェア システムを個別に展開可能なサービスのスイートとして構築する特定の手法を表すために、ここ数年の間に出てきました。 このアーキテクチャ スタイルの特定の定義はありませんが、ビジネス機能、自動展開、エンドポイントのインテリジェンス、言語とデータの分散管理など、組織を取り巻くいくつかの同様の特徴があります。

これは、システムをより小さな独立したセクションに分割し、それらをリンクするソフトウェア開発アプローチです。 自律型サービスは、1 つの特定のセクターの特殊な要求を満たすために集められます。 Spotify、Amazon、PayPal、Netflix、および Twitter はすべて、この新しい発見に注目し、広く宣伝しています。

目次

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

「マイクロサービス アーキテクチャ」という言葉は、ソフトウェア プログラムのアーキテクチャに対する特定のアプローチを、互いに独立して展開できる一連のサービスとして言及するために、過去数年間でより一般的になってきました。 このアーキテクチャ スタイルを正確に定義することはできませんが、他のアーキテクチャ アプローチと特定の特徴を共有しています。 これらには、ビジネス機能、自動展開、エンドポイントのインテリジェンス、および言語とデータの分散制御に基づく組織が含まれます。 別の言い方をすれば、マイクロサービスが独立して動作する能力は、ソフトウェア開発シーンのトップに上り詰める原動力です。

単にマイクロサービスと呼ばれることが多いマイクロサービス アーキテクチャは、アプリケーション ソフトウェアの開発中に利用される設計パラダイムです。 マイクロサービスを使用すると、大規模なアプリケーションを複数の小さな自己完結型パーツに分割できます。各パーツは、独自の一連のタスクを担当します。 単一のユーザー要求により、マイクロサービス上に構築されたアプリケーションが、その応答を構築するために、独自の内部マイクロサービスに対して多くの呼び出しを行う可能性があります。

コンテナーは、サービスの依存関係について心配する必要がなくなり、サービス自体の開発に集中できるため、マイクロサービス アーキテクチャの好例です。 コンテナーは、多くの場合、マイクロサービスの形で最新のプラットフォーム用のクラウドネイティブ アプリケーションを開発するための最適なツールです。 「マイクロサービス アーキテクチャ」という用語は、アプリケーション自体がサービスの集合として構築されるタイプのアプリケーション アーキテクチャを指します。 これは、マイクロサービスのアーキテクチャ ダイアグラムとサービスを個別に構築、デプロイ、および管理するためのフレームワークを提供します。

マイクロサービス アーキテクチャの開発の必要性とモノリシック アーキテクチャの限界

モノリシック アーキテクチャとマイクロサービス
モノリシック アーキテクチャとマイクロサービス ミドルウェア

1. アプリケーションのスケーリング

Web スケール ビジネスの成功は指数関数的な拡大を経験するため、そのソフトウェアは優れた水平方向のスケーラビリティも備えている必要があります。 場合によっては、CPU または I/O が重いソフトウェアの一部のみをスケーリングして個別に処理する必要があります (ポリグロット プログラミングで実装)。 単一のエンティティとしてモノリシックに機能し、単一のプログラミング言語と技術スタックを利用して作成されるソフトウェア。 水平スケーリングを実現するには、アプリケーション全体をスケーリングする必要があります。 モノリシック ソフトウェアは 1 つのプログラミング言語しかサポートしていないため、異なるプログラミング言語または Tech Stack で単一のモジュールを開発することさえ不可能です。

2.開発速度

市場投入までの時間を短縮するために、今日のすべてのビジネスは迅速な機能開発を望んでいます。 大規模で複雑な、場合によっては数百万行のモノリシック アプリケーションでは、開発者に膨大な認知負荷がかかるため、新しい機能の追加が非常に遅くなります。 大規模なモノリシック プログラムのモジュールは緊密に接続されているため、新しい機能の開発がより困難になっています。 その結果、モノリシック プログラムに新しい機能を追加することは、多くの場合、処理が遅く、コストがかかります。

3. 開発スケーリング

競争力を獲得するため、または簡単に達成できる成果をつかむために、企業はより多くの開発者を雇って開発を並行化しようとすることがよくあります。 開発者は、大規模でモノリシックな密接に接続されたコード ベースで独立して作業することはできず、互いの作業に干渉しないように追加の同期と警戒が必要になることがよくあります。 開発者を追加しても機能が増えるわけではなく、場合によっては機能が少なくなることがあります。 同様に、モノリシック コード ベース全体を理解するには高い認知負荷が必要なため、通常、新入社員や新卒者が生産的なコードの最初の行を作成するにはかなりの時間がかかります。 2008 年、私はベルリンを拠点とする電気通信事業者とのインタビューを行いました。テクニカル マネージャーは、会社の C++ コード ベースには数百万行が含まれており、新しいエンジニアは 4 ~ 6 か月後にのみ生産的なコードを作成できるようになると、独善的な笑みを浮かべて私に言いました。

4. リリースサイクル

大規模なモノリシック プログラムのリリース サイクルは通常、6 年から 2 年半の範囲で非常に長く、そのサイズのためにさらに数か月から数年の遅れがあります。 大規模なリリース サイクルは、リリースのギャップの間に新しい競合他社が市場に参入する可能性があるため、現代では企業を競争上の不利な立場に置くことがよくあります。

5. モジュール化

モノリシック アーキテクチャでは、モジュール間の障壁は通常、内部インターフェイスです。 プログラムのサイズが大きくなるとすぐに、モジュール間の分離が崩れ始めます。 その結果、モノリシック アーキテクチャのモジュールは、疎結合で高度に結合されるのではなく、緊密に結び付けられることがよくあります。 ソフトウェア開発を社会に例えると、モノリシックなモジュール化は道徳や宗教の原則に類似しており、社会の法と秩序を保証することはできません。

6. 近代化

既存の成功したアプリは、さまざまな理由でモダナイゼーションを必要としました (たとえば、最新のハードウェア、ブラウザー、ネットワーク帯域幅、技術スタックを活用する、優れた開発者を引き付けるなど)。 サービスに影響を与えずにアプリケーション全体をビッグバンで最新化する必要があるため、モノリシック プログラムの最新化にはコストと時間がかかる可能性があります。

マイクロサービスの種類

差分マイクロサービスと統合マイクロサービスは、2 つの異なる種類のマイクロサービスです。

を。 微分

この形式のアーキテクチャでは、アーキテクチャは、トランザクションに分離できる独立したサービスに分解されます。 これにより、単一のトランザクションが多くのサービスに分散されます。

b. 積分

マイクロサービス アプリケーションは、多数のマイクロサービスを個別のユーザー エクスペリエンスに結合するように設計されています。 これらのプログラムは、サービス レベル管理、オンデマンド プロビジョニング、動的構成など、いくつかの明確なニーズに対応しています。

マイクロサービスの特徴

1. 自律的

マイクロサービス アーキテクチャでは、各サービス コンポーネントを他のサービスとは別に構築、デプロイ、管理、スケーリングできます。 サービスは、コードや他のサービスとの処理方法を共有する必要はありません。 異なる部分間のすべての通信は、明確に定義された API を介して行われます。

2.専門化

microservice_architecture
オラクル

各サービスは、異なる一連のスキルと異なる問題に基づいています。 時間が経つにつれて、開発者がサービスにさらにコードを追加すると、そのサービスは小さなサービスに分割される可能性があります。

3.サービスによる部品化

マイクロサービス アーキテクチャはライブラリを利用しますが、独自のソフトウェアをコンポーネント化する主な方法は、それをサービスに分解することです。 ライブラリは、プログラムにリンクされ、メモリ内関数呼び出しを使用して呼び出されるコンポーネントであり、サービスは、Web サービス リクエストやリモート プロシージャ コールなどのメカニズムと通信するプロセス外コンポーネントです。 ライブラリは、プログラムにリンクされ、メモリ内関数呼び出しを使用して呼び出されるコンポーネントとして定義します。 (これは、多くの OO システムでサービス オブジェクトと呼ばれるものとは異なる考え方です。ライブラリとは対照的に、サービスは個別に展開できます。これが、サービスがライブラリではなくコンポーネントとして使用される主な理由の 1 つです。コンポーネントの代わりにサービスを採用する利点は、より透過的なコンポーネント インターフェイスの生成です. 明示的な公開インターフェイスを確立するための適切な手法は、大部分のプログラミング言語には存在しません.

通常、顧客がコンポーネントのカプセル化を破るのを防ぐ唯一の方法は、文書化と規律です。これにより、コンポーネント間の結合が過度に緊密になります。 明示的なリモート呼び出しプロトコルを利用することで、サービスはユーザーがこれを簡単に回避できるようにします。 この種のサービスの使用には、特定の欠点が伴います。 リモートで行われる呼び出しは、同じプロセス内で行われる呼び出しよりもコストがかかるため、リモートで使用される API はより細かい粒度にする必要があり、利用が難しくなる可能性があります。 プロセスの境界を越えると、行動を変えるのが難しくなり、コンポーネント間で責任を分散する方法を変更する必要が生じた場合に困難になります。

4. プロジェクトではなく製品

私たちが遭遇するアプリケーション開発イニシアチブの大部分は、プロジェクトと呼ばれるパラダイムに従います。このパラダイムでは、ソフトウェアの一部を引き渡すことが主な目的であり、その後完成したと見なされます。 プロジェクトが終了すると、ソフトウェアは保守組織に引き渡され、構築を担当したチームは解散します。

マイクロサービスの支持者は通常、このアーキテクチャを避けて、チームが製品をそのライフスパン全体にわたって所有する必要があるという概念を支持します。 Amazon の「あなたが構築し、あなたがそれを操作する」という概念は、開発チームが製品で使用されている間、プログラムに対して完全な責任を負うものであり、このための優れたインスピレーションの源です。 これにより、開発者は、プログラムのサポートを提供する負荷の少なくとも一部を引き受ける必要があるため、ソフトウェアが本番環境でどのように機能するかについて日常的に触れ、ユーザーとのコミュニケーションを増やすことができます。

5. 分散型ガバナンス

さらに、マイクロサービス開発チームは、標準への明確なアプローチを好みます。 彼らは、成文化された一連の標準に頼るのではなく、他の開発者が直面している課題に匹敵する課題に対処するために使用できる便利なツールを提供することを好みます。 通常、これらのツールは実装から派生し、より大きなコミュニティと共有されますが、内部のオープン ソース パラダイムを常に利用しているわけではありません。 git と github が事実上のバージョン管理システムとして選ばれるようになった今、組織内でオープン ソース技術がますます普及しつつあります。

Netflix は、この原則を順守する企業の好例です。 貴重な、そして最も重要なことに、実戦でテストされたコードをライブラリとして共有することは、他の開発者が必要に応じて別の方法を選択できるようにしながら、同様の問題を同様の方法で処理するのに役立ちます。 以下でさらに詳しく説明するように、共有ライブラリは、データ ストレージ、プロセス間通信、およびインフラストラクチャの自動化に関する一般的な懸念事項に集中する傾向があります。

マイクロサービス コミュニティにとって、出費は特に望ましくありません。

6. 実戦でテスト済みの標準と強制された標準

マイクロサービス チームは、ビジネス デザイン グループによって課せられた厳密に適用される標準のタイプを回避することを好みますが、HTTP、ATOM、およびその他のマイクロフォーマットなどのオープン スタンダードを利用し、それを支持することさえあるため、これは少しパラドックスです。

主な違いは、標準が作成され、実装される方法です。 IETF などの組織によって管理されている標準は、オープンソース イニシアチブの成功の結果であることが多い、より大きな世界でいくつかの実際の実装が行われるまで、標準にはなりません。

これらの標準は、最近のプログラミングの専門知識が限られているか、ベンダーの影響力が過度に強い人々によって頻繁に作成される大部分のビジネス標準とは異なる世界です。

7. インフラストラクチャの自動化

継続的な配信と展開の結果としての自動化の増加に見られる副作用の 1 つは、開発者と運用担当者を支援する便利なツールの導入です。 アーティファクトの作成、コードベースの保守、基本サービスの開始、または標準の監視とロギングの追加のためのツールは、現在比較的広く普及しています。 Web で最も優れた例は、間違いなく Netflix のオープン ソース ツールのコレクションですが、他にも特に私たちが広く使用している Dropwizard があります。

アプリのアイデアを実現する

一緒に新しいアプリを作りましょう

始めましょう

マイクロサービス アーキテクチャにおける通信メカニズムの概要

マイクロサービス アーキテクチャを構成するサービスは、多数の異なるサーバーで実行されます。 これらの多くのサービス間の通信を容易にするために、HTTP、AMQP、および TCP などのプロトコルが利用されます。 最も広く採用されている 2 つのプロトコルは、HTTP/REST と非同期メッセージングです。 HTTP プロトコルは、多くの場合、オンライン サービスの REST アプリケーション プログラミング インターフェイス (API) で利用されます。 クライアントは、統一リソース ロケータを GET、POST、PUT、DELETE (URL) などの HTTP メソッドと組み合わせて利用することで、アプリケーションのリソースにアクセスして変更することができます。 REST アプリケーション プログラミング インターフェイス (API) は、アプリケーションの機能へのエントリ ポイントとして機能します。 クライアントは、リクエストを API に送信することで、サービスにニーズを伝えます。 クライアントは、マイクロサービスと直接通信するか、API ゲートウェイ経由で通信するかを選択できます。

API ゲートウェイ パターンを使用してサービスに対して行われるすべての要求に対して、単一のエントリ ポイントが指定されます。 アプリケーション プログラミング インターフェイス (API) ゲートウェイは、クライアントから要求を受信すると、その要求を適切なサービスに転送します。

API ゲートウェイ パターンにはさまざまなバリエーションがあり、そのうちの 1 つがフロントエンド パターンのバックエンドです。 この設計では、クライアントの種類ごとに個別の API ゲートウェイが作成されます (たとえば、モバイル クライアント用のゲートウェイと Web アプリケーション用の別のゲートウェイ)。

さまざまなサービス間の通信レベルを低く保つことをお勧めします。 非同期通信は、通信が必須の状況では同期通信よりも優れています。 要求を送信したサービスは、操作を続行する前に応答を待つ必要はありません。

メッセージング キューとストリーミング システムをデータベースに組み込むと、非同期通信を有効にするのに適した方法になります。 さらに、これらのシステムがデータ操作とメッセージの送信にトランザクション セマンティクスを提供する場合、これらの要件の両方を満たすことができます。 このため、マイクロサービスの展開がより簡単になり、よりスケーラブルになります。 REST API のみを使用すると、マイクロサービス間の通信は同期を余儀なくされ、多くの場合、成長が妨げられます。

マイクロサービス アーキテクチャは何に使用されますか?

マイクロサービスは、複雑なシステムを、マイクロサービスと呼ばれるきめ細かく疎結合されたソフトウェア アーティファクトのコレクションとして設計することを目的とした、流行のアーキテクチャ スタイルです。 各マイクロサービスは、アプリケーションのビジネス ロジックの一部または単一の機能を実装します。 マイクロサービスは、複雑なシステムをきめ細かく疎結合されたソフトウェア アーティファクトのコレクションとして設計することを目的としているため、人気が高まっています。 アプリケーション開発のプロセスを迅速化するために、マイクロサービスがよく使用されます。

マイクロのアイデアは、特に問題のビジネスが少なくとも 10 年間運営されている場合に、大部分の組織が最初に構築されたモノリシック インフラストラクチャに対応して開発されました。 マイクロサービス アーキテクチャの各コンポーネントには、モノリシック設計の代わりに次の機能が含まれています。

  • 独自のCPU
  • 独自のオペレーティング システムとランタイム環境
  • 多くの場合、各サービスが他のサービスと区別できるように、専門のチームが作業を行います。

この設計により、各サービスは次のことができます。

  • 独自の手順を実行
  • 他のマイクロサービスやアプリケーション全体の通信に依存する必要なく、相互に独立して通信します。

Java ベースのマイクロサービス アーキテクチャ、特に Spring Boot を使用して構築されたものが広く採用されています。 さらに、マイクロサービスとサービス指向アーキテクチャは、互いに比較されることがよくあります。 2 つのアプローチはどちらも、大規模なソフトウェア プログラムをより管理しやすい部分に分割するという同じ目的を持っていますが、方法論は異なります。 さらに、多くの企業は、システムの可用性に対する影響を最小限に抑えながら、できるだけ早くシステムを調整するように競合他社から圧力を受けています。 これには、適切な設計、アーキテクチャ スタイル、および開発技術が必要です。 ソフトウェア エンジニアリングは、これらのニーズを部分的に満たすことができるさまざまなパラダイムを提供します。 これらのパラダイムは、ソフトウェア システムをきめの細かいソフトウェア ユニットに分割します。これにより、モジュール性、保守性、および再利用性が向上し、その結果、製品を市場に投入するのに必要な時間が短縮されます。

マイクロサービス
アークシブ

一言で言えば、長期的に俊敏性を提供します。 マイクロサービスを使用すると、個別にデプロイ可能な多数のサービスに基づいたアプリケーションを作成できるようになるため、複雑で大規模な高度にスケーラブルなシステムの保守性を向上させることができます。各サービスには、独自の詳細で自律的なライフサイクルがあります。 これは、多数のサービスに基づくアプリケーションの作成を可能にすることによって実現されます。

マイクロサービスには、それ自体でスケールアウトできるという追加の利点があります。 代わりに個々のマイクロサービスをスケールアウトできるため、単一のエンティティとしてスケールアウトする必要がある単一のモノリシック アプリケーションを用意する必要はありません。 スケーリングを必要としないアプリケーションの他の部分をスケールアウトするのではなく、この方法で需要を満たすために追加の処理能力またはネットワーク帯域幅を必要とするプログラムの機能領域のみを拡張できます。 これにより、必要なハードウェアの量が減るため、コストが削減されます。

マイクロサービス アーキテクチャの例をいくつか示します。

を。 ウェブサイトの移転

ウェブサイトの移転が可能です。 たとえば、複雑なモノリシック プラットフォームでホストされている Web サイトは、クラウドベースおよびコンテナー ベースのマイクロサービス プラットフォームに再配置できます。

b. メディア コンテンツ

スケーラブルなオブジェクト ストレージ システムを使用して画像やビデオ アセットを保存したり、マイクロサービス アーキテクチャを使用してこれらの素材を Web またはモバイル デバイスに直接提供したりできます。

c. 金融交渉と請求

支払いの処理と注文を 2 つの別個のサービスとして扱うことができます。 これにより、課金システムに問題が発生した場合でも、支払いを受け取ることができます。

d. 情報処理

モジュラー データ処理サービスは、データ処理にも利用できるマイクロサービス プラットフォームを使用して、クラウド サポートを改善できます。

マイクロサービスの設計パターン

パターン言語はあなたのガイドです!

マイクロサービスの設計パターン
マイクロサービスの設計パターン

a) 分解パターン

  • バルクヘッドは、ワークロードまたはサービスごとに、接続プール、メモリ、CPU などの重要なリソースを分離します。 バルクヘッドをデプロイすると、1 つのワークロード (またはサービス) がすべてのリソースを使用できなくなり、他のリソースが不足します。 このアプローチは、1 つのサービスによって引き起こされるカスケード障害を排除することで、システムの堅牢性を高めます。 このパターンは、船体の分割された仕切りに似ているため、バルクヘッドと呼ばれます。 顧客の負荷と可用性のニーズに基づいて、サービス インスタンスを個別のグループに分割します。 このアーキテクチャは障害を分離するのに役立ち、故障時でも一部のユーザーのサービス機能を維持できます。
  • サイドカーは、アプリケーションの有用なコンポーネントを個別のコンテナーまたはプロセスとしてインストールし、分離とカプセル化を可能にします。 このパターンにより、アプリケーションを異種のコンポーネントとテクノロジで構成することもできます。 このパターンは、バイクに連結されたサイドカーに似ているため、サイドカーと呼ばれます。 設計では、サイドカーは親アプリケーションに結合され、アプリケーションのサポート機能を提供します。 サイドカーも同様に親アプリケーションと同じ存続期間に従い、親アプリケーションと共にビルドおよび終了されます。 サイドカー パターンはサイドキック パターンと呼ばれることが多く、記事で紹介する最後の分解パターンです。
  • Strangler Figは、特定の機能を新しいサービスに徐々に置き換えることで、アプリケーションのインクリメンタル リファクタリングをサポートします。
サイト遷移ストラングラー図パターン
IBM

b) 統合パターン

1.連鎖マイクロサービスパターン

単一のサービスまたはマイクロサービスにはいくつかの依存関係があります。たとえば、マイクロサービスの販売はマイクロサービスの製品と注文に依存しています。 チェーン化されたマイクロサービス設計パターンは、リクエストに対して統合された応答を提供するのに役立ちます。 マイクロサービス 1 は要求を受け取り、マイクロサービス 2 と通信します。 また、microservice-3 と通信する場合もあります。 これらのサービス呼び出しはすべて同期的です。

2. アグリゲーターのパターン

ビジネス アクティビティを多数の小さな論理的なコードに分割する場合、各サービスによって提供されるデータをどのようにマージするかを考慮することが重要になります。 お客様はこれについて責任を負うことはできません。

Aggregator パターンは、この問題への対処に役立ちます。 複数のソースからのデータを組み合わせて、最終的な結果をユーザーに提供する方法について説明します。 これには、次の 2 つの方法があります。

  • 複合マイクロサービスは、必要なすべてのマイクロサービスを呼び出し、データを集約して変更し、それを返します。
  • API ゲートウェイは、リクエストを複数のマイクロサービスに分割するだけでなく、データをコンシューマーに提供する前に集約することもできます。

3. プロキシ パターン

API ゲートウェイを介してマイクロサービスを提供するだけです。 GW がセキュリティや分類 API などの API 特性を取得することを許可します。 この例では、API ゲートウェイは 3 つの API モジュールで構成されています。

  • FTGO モバイル クライアント用の API を実装するモバイル API
  • ブラウザーで実行されている JavaScript アプリケーションに API を実装するブラウザー API
  • サードパーティ開発者向けの API を実装するパブリック API

4.分岐パターン

マイクロサービスは、他のマイクロサービスを含むさまざまなソースから必要なデータを取得する必要がある可能性があります。 ブランチ マイクロサービス パターンは、アグリゲーターとチェーンの設計パターンのハイブリッドです。 2 つ以上のマイクロサービスからの同時要求/応答処理を可能にし、両方の利点を組み合わせます。 呼び出されているマイクロサービスは、他のいくつかのマイクロサービスで構成されている場合があります。 Brach パターンは、会社の要件に応じて、単一のマイクロサービス チェーンまたは同じ種類の複数のチェーンを呼び出すために使用することもできます。

マイクロサービス パターン
マイクロソフト

マイクロサービス アーキテクチャの利点

近い将来、マイクロサービスの必要性は劇的に拡大します。 マイクロサービスを使用して、レガシー プログラムが更新されます。 リファクタリングにより、モノリシック アプリをマイクロサービスに分割できます。 これは、古いソフトウェアの漸進的なモダナイゼーションにつながり、マイクロサービスを使用して製品をゼロから再開発するよりも望ましい方法です。 アプリケーション開発は、マイクロサービス設計から大きな恩恵を受ける可能性があります。 主な利点の一部を以下に示します。

を。 優れた生産性

アプリケーションをより小さな自己完結型のセクションに分割すると、アプリケーションの作成と保守が容易になります。 要件に応じて、複数のプログラミング言語、テクノロジ、およびソフトウェア環境を使用して、各サービスを個別に開発、展開、および保守できます。 アプリケーションの各モジュラー コンポーネントのコードベースは小さいため、複数のサービスのリリース、スケーリング、展開、およびテストがより簡単になり、関連するタスクを開発チーム間で分割して同時に実行することができます。

b. 回復力の向上

マイクロサービス アーキテクチャの各マイクロサービスは、アプリケーションの機能を提供し、個別のタスクを実行するように設計された単一のサービスです。 各マイクロサービスは、シンプルなインターフェイスを使用して他のサービスとリンクし、ビジネス上の問題を処理します。 マイクロサービス ベースの設計を確立すると、パフォーマンス関連の問題を検出して対処するプロセス全体がかなり簡単になります。

さらに、この形式の設計は個々のモジュールに比べて強化された障害分離メカニズムを提供するため、大規模なアプリケーションは多くの場合、単一の障害の影響を受けません。 したがって、長期的には、開発者はプログラム全体を再起動することなく、更新をリリースしたり、モジュールを置き換えたりするための時間枠があるため、将来のダウンタイムのリスクは大幅に減少します。

c. 拡張されたスケーラビリティ

DevOps チームは、各サービスが異なるプログラミング言語またはテクノロジを使用して作成されている場合でも、非互換性を心配することなく、各モジュールに最適なテクノロジ スタックを選択できます。 個々のサービスは個別に拡張でき、システムのダウンタイムや再展開なしで新しいコンポーネントを追加できます。 さらに、サービスを多数のサーバーに分割して、要求の厳しいコンポーネントのパフォーマンスへの影響を緩和することもできます。 数秒以内に、マイクロサービスは水平スケーリングを実現できます。

実際には、Netflix、Spotify、Uber、Google などの組織がモノリシック アーキテクチャからマイクロサービス アーキテクチャへの移行を余儀なくされるのは、高度な水平スケーリングです。 第 2 に、1 つのマイクロサービスが CPU 負荷が高い場合、それは CPU に最適化されたプログラミング言語 (C/C++、Rust) で記述されている可能性がありますが、他のマイクロサービスはインタープリター言語 (Java、PHP) で記述されている可能性があります。

d. 継続的インテグレーション / 継続的デリバリー (CI/CD)

継続的なデリバリーと統合は、アジャイル手法と DevOps 哲学の両方の基本要素です。 マイクロサービス設計により、クロスファンクショナル チームがサービスを個別に構築、デバッグ、テスト、展開、および更新できるようになり、長期的には迅速なトラブルシューティングと展開が可能になります。

e. モジュール化

マイクロサービス アーキテクチャでは、マイクロサービス間のバリアは、交差が困難な物理 (ネットワーク) インターフェイスで構成されます。 その結果、適切に設計されたマイクロサービスは通常、「疎結合で一貫性の高い」モジュール化を提供します。 ソフトウェア開発を社会と比較すると、マイクロサービスの変調は、警察/罰則を伴う国内法および国際法に匹敵します。 私たちがすでに知っているように、厳格な国内および国際ルールは、しばしば社会秩序を維持することができます.

f. リリーススケジュール

マイクロサービス アーキテクチャの最も優れた点は、各マイクロサービスを個別にデプロイできることです。 その結果、マイクロサービス アプリケーションのソフトウェア リリース サイクルは大幅に短縮され、CI/CD を使用すると、毎日多くのリリースが行われる可能性があります。

マイクロサービス アーキテクチャの欠点

を。 サービス間の通信の複雑化

アプリケーションが小さな部分に分割されると、メッセージの送受信に時間がかかります。 異なるモジュール間でリクエストを処理する場合、開発者は特に注意する必要があります。 Different systems might talk to each other in different ways, so there might be a need for an interpreter. This can make it harder to set up the whole system all at once. One of the biggest problems with microservices is that it might be hard to switch from a monolith to microservices because it's hard to manage.

This basically means that a lot of services made by a lot of different teams are deployed in a lot of different places, making it very hard to manage them. For example, Monolithic Architecture gives the same answer whether a Web app has a few thousand lines of code or several million lines of code (Enterprise Java or Ruby on Rails or PHP). But in Microservice Architecture, there are many possible solutions depending on the applications and use cases.

So, Microservice Architecture is doomed to fail if the wrong solution is used for the wrong application size or type (like putting a child's clothes on an adult man or the other way around). Also, it's hard to design Microservices because they have a lot more moving parts than Monoliths. Most of the time, a Microservice with bad design is worse than a Monolith.

Increased Complexity of Communication Between the Services
Increased Complexity of Communication Between the Services MartinFowler

b. 複雑な構成

Despite being isolated and self-contained, a microservice must be regularly configured, especially when it is moved from development to test to staging to production. This arrangement may be rather intricate. Moreover, if a microservice must utilize other microservices, these bindings must be defined before deployment or even during runtime.

c. Context Boundary Translation

Despite the fact that it would be ideal if all microservices within a MOA used the same data structures and communication protocols to interact with one another, this is typically not the case.

d. More Assets in Return for More Autonomy

MOAs demand a great deal of horsepower. Remember that each MOA microservice has its own runtime environment and data storage. In some instances, even the most streamlined microservice might consume the same amount of resources as a single monolithic program.

e. Unfeasible for Small Applications

Larger applications can benefit from microservices design. However, implementation will likely be more time-consuming and difficult for smaller applications.

f. Relatively Complex Deployment

The deployment might be a difficult and complicated process. During deployment, coordination between numerous services would be required. Deploying a WAR file in a container would not be as straightforward as it sounds.

g. Distributed Debugging

The difficulty of troubleshooting a MOA including hundreds of microservices communicating in concert is one of the downsides of microservices. Tracing the course of a request into and out of a MOA is challenging due to the independence of each container. The MOA is opaque if there is no effective monitoring mechanism in place. Logging the internals of a MOA offers a limited perspective, but MOA monitoring requires a comprehensive view.

h. Contributes to Enhanced Fault Tolerance

Large applications with several services deployed have more fault tolerance in the event that any one module fails. Microservices allow applications to continue functioning even if one service fails. This is because the services are not tightly coupled.

私。 高価な

An improper service partition might be expensive. For instance, if an application is improperly partitioned, the services are connected to a certain degree, and they will create numerous inter-service interactions via the network, which can degrade performance.

j. Greater Security Risks

Lastly, because microservices will reside across several environments, computers, and API requests, they provide a greater number of entry points for an attacker to compromise the system.

k. Communication Complexities

Microservices accomplish rigorous modularity and development independence via process/network barriers, as previously mentioned. The disadvantage is that services may only communicate over the physical network, resulting in increased network latency. Microservices may connect with one another in a variety of methods, including synchronous communication using REST, gRPC, and asynchronous communication using Message Queue and Message Broker, each of which has advantages and disadvantages.

Synchronous communication is simpler to build, but it might result in a Distributed Monolith. Asynchronous Communication via Messaging provides greater flexibility at the expense of increased implementation complexity. In Microservice Architecture, choosing the appropriate Communication channel based on the application is equally tough.

l. 複雑な構成

マイクロサービスは分離され、自己完結型であるにもかかわらず、定期的に構成する必要があります。特に、開発からテスト、ステージング、運用に移行する場合はそうです。 この配置はかなり複雑かもしれません。 さらに、マイクロサービスが他のマイクロサービスを利用する必要がある場合、これらのバインディングはデプロイ前または実行時に定義する必要があります。

マイクロサービス ツール

1.オペレーティングシステム

アプリケーションを開発する上で最も重要な側面は、アプリケーションの強固な基盤を構築することです。これは、オペレーティング システムが実行する役割を果たします。 Linux は、アプリケーション開発プロセス全体で頻繁に使用されるこのタイプのオペレーティング システムの例です。 Linux コンテナーを使用すると、自己完結型の実行環境にアクセスできます。 これにより、ストレージやネットワークからセキュリティや認証まで、幅広いサービスを調整できます。

2. プログラミング言語

Emizentech を使用すると、プログラミングのレパートリーをシームレスに拡張できます。 この機器は実用的で最新のものです。 一般に、すべてのプログラミング言語で使用できるように設計されています。 さらに、Erlang 仮想マシンとも呼ばれる BEAM に表示されるバイトコードと互換性があります。

3. API 管理およびテスト ツール (API ゲートウェイ)

API の構築とリリース、使用基準の適用、アクセスの制限、開発者コミュニティの育成、使用統計の収集と分析、およびパフォーマンスの報告は、すべて API 管理の構成要素です。

実際には、API 管理プラットフォームは次の要素で構成されています。

  • 開発者ツール
  • ゲートウェイ
  • レポートと分析

4. メッセージング ツール (メッセージングおよびイベント ストリーミング)

通信を行うために、マイクロサービス システムは独立したサービスを利用する必要があります。 これは、メッセージ キューがユーザーに何を要求するかを決定する主な要因です。 RabbitMQ と Apache Kafka は、メッセージングの目的で利用される最も一般的なソリューションの 2 つです。

LinkedIn は、後に Apache コミュニティに貢献した Apache Kafka として知られるテクノロジの作成を担当しています。

パターンは、多数のマイクロサービス間での通信を容易にするために、RabbitMQ ツールによって利用されます。 それに加えて、アプリケーションを同時にスケーリングするプロセスを支援します。

5. ツールキット

簡単に言うと、ツールキットは、特定の手順の実行全体で使用されるツールの集まりです。 Toolkit は、多くのアプリの構築を可能にするマイクロサービス アーキテクチャのコンポーネントです。 このため、多種多様なツールキットが存在し、それぞれがそのアプリケーションで明確な目的を果たします。 Fabric8 および Seneca 内から選択できる多くのツール。

  • Fabric8 は、Git の支援により、ソフトウェア開発者がアプリケーションの構成管理システムを作成できるようにするサービス テクノロジとしてのプラットフォームです。
  • Node として動作する Seneca は、メッセージ指向のマイクロサービスを開発するプロセスで使用されます。

6. アーキテクチャ フレームワークと Js ツールキット

マイクロサービスはアーキテクチャ スタイルであるため、使用するアーキテクチャ フレームワークに注意を払うことが不可欠です。 これらは、最新のアプリケーションを構築するために現在のテクノロジーと組み合わせて使用​​されるフレームワークです。 Goa と Kong は現在、最も人気のあるアーキテクチャ フレームワークです。

7. オーケストレーション ツール

コンテナーとマイクロサービスが連携して機能する一般的な方法のため、コンテナー オーケストレーションは検討すべき非常に重要なトピックです。 Conductor、Kubernetes、および Istio は、コンテナー オーケストレーションに最もよく使用される 3 つのマイクロサービス オーケストレーション ソリューションです。 ただし、他にも多くのツールを利用できます。 Netflix が維持するオープン ソース ソフトウェア (OSS) エコシステムの一部として、コンダクターはマイクロサービス オーケストレーション エンジンとして機能します。 コンダクターは、クラウドで実行されるプログラムであり、フロー オーケストレーターと呼ばれる実装を使用して、マイクロサービスを使用してさまざまなアクティビティを実行します。 これに加えて、マイクロサービス全体で発生するすべての相互作用を管理および確認することが容易になります。

8. 監視ツール

マイクロサービス アプリケーションが構築されたら、それに関連するタスクを処理する必要があります。 同じことを行うには、マイクロサービスの監視ツールが必要になります。 Prometheus と Log Stash は、最も頻繁に使用されるマイクロサービスを監視するための 2 つのテクノロジです。 Logstash は優れたソフトウェアです。 これは、データを統合、保存、および操作できるプラットフォームであり、オープン ソースです。

9. サーバーレス ツール

SA マイクロサービスの重要なコンポーネントは、サービスとしての機能として知られるサーバーレス テクノロジです。 オブジェクトを最も基本的なコンポーネントに分解するプロセスの効率が向上します。 Claudia と AWS Lambda はどちらも、マイクロサービスの開発に広く使用されているサーバーレス ツールの例です。 AWS Lambda と API Gateway のインストールも Claudia の責任の一部です。 これに加えて、Claudia は、「すぐに使える」機能を維持しながら、エラーが発生しやすい展開およびセットアップ アクティビティを自動化することができます。

10. コンテナー、Docker、および Kubernetes

  • コンテナー:コンテナーは、基本的にホスト オペレーティング システム (またはカーネル) を仮想化し、アプリケーションのニーズを、同じコンピューター上で実行されている他のコンテナーのニーズから分離します。
  • Docker: Docker は、dockerd と呼ばれるコンテナー ランタイム、BuildKit と呼ばれるコンテナー イメージ ビルダー、ビルダー、コンテナー、およびエンジンとの対話に使用されるコマンド ライン インターフェイスなど、いくつかの異なる部分で構成されています。 (ドッカーと呼ばれます)。
  • Kubernetesは、コンピューターのグループをコンピューティング リソースの単一のプールに結合する無料のオープンソースのコンテナー管理テクノロジです。 Kubernetes は Google によって開発されました。 Kubernetes を使用すると、アプリケーションをコンテナーのグループの形式で構造化できます。コンテナーのグループは、Docker エンジンによって実行されます。 Kubernetes は、指定した方法でアプリケーションが機能し続けることを保証します。

マイクロサービス アーキテクチャの一般的なパターン

を。 バックエンド フォー フロントエンド (BFF) パターン

BFF は、フロントエンドとマイクロサービスの間の簡単なインターフェイスを提供します。 理想的なシナリオでは、フロントエンド チームが BFF の管理も担当します。 1 つの BFF は、1 つの UI のみに関係します。 その結果、フロントエンドを簡素化し、バックエンドを介して単一のデータ ビューを持つことができます。

b. エンティティと集計のパターン

エンティティは、そのアイデンティティに基づいた別個のものです。 たとえば、e コマース Web サイトでは、Product オブジェクトは、製品の名前、タイプ、および価格によって識別される場合があります。 集合体とは、1 つの単位と見なすべきもののグループです。 したがって、e コマース Web サイトの場合、Order は顧客が購入したもの (エンティティ) のコレクション (集合体) になります。 これらのパターンは、意味のあるデータの分類に使用されます。

c. サービス検出パターン

これらは、サービスとアプリケーションの発見を促進する上で重要な役割を果たします。 サービス インスタンスは、サービスの障害、スケーラビリティ、サービスの終了、アップグレードなどの原因により、マイクロサービス アーキテクチャのコンテキストで異なる場合があります。 これらのパターンは、この一過性に対処するための発見のためのツールを提供します。 ヘルス チェックとサービスの障害をトラフィックの再分散のトリガーとして使用することで、ロード バランシングはサービス検出技術を採用する場合があります。

d. アダプターのマイクロサービス パターン

Adapter Microservices の設計は、必要に応じて、RESTful または軽量のメッセージング技術を使用して構築されたビジネス指向の API (一般的なマイクロサービスと同じドメイン駆動型の方法論を使用) と、レガシー API または従来の WS-* ベースの SOAP サービスとの間で調整されます。 たとえば、開発チームがアプリケーションのデータ ソースに対する分散型の制御を欠いている場合、適応が必要です。

e. ストラングラーの適用パターン

Strangler パターンは、特定の機能を新しいサービスに置き換えることにより、モノリシック アプリケーションをゆっくりとマイクロサービスに変換するためのよく知られたアーキテクチャ パターンです。

マイクロサービス アーキテクチャのアンチパターン

を。 凝集カオス

サービスはビジネス機能に明確に適合する必要があり、その範囲外のことを達成しようとしてはなりません。 関心の機能的な分離は、アーキテクチャが管理するために重要です。 そうしないと、俊敏性、パフォーマンス、およびスケーラビリティが台無しになり、配信エントロピーと結束の混乱を伴う緊密に接続されたアーキテクチャになります。

b. レイヤード サービス アーキテクチャ

最も一般的な SOA の間違いの 1 つは、サービスの再利用性を実現する方法を誤解していたことです。 チームは主に、機能の再利用性よりも技術的な結束性に関心を持っていました。

c. 複雑

マイクロサービス アーキテクチャをサポートするもう 1 つの重要な要素は、組織の成熟度です。 開発チームは、単に一方通行のチケットをインフラストラクチャ チームに提出するのではなく、完全なスタックである DevOps に対してより大きな責任を負うように改革する必要があります。

d. 貧弱なバージョン管理戦略

バージョニング戦略が効果的でない場合、コードと依存関係が管理不能になります。 その結果、マイクロサービス アーキテクチャの効率的なバージョン管理アプローチを導入する必要があります。 最も基本的なアプローチの 1 つは、API バージョンを作成し、そのバージョンをルート URL に含めることです。

e. マイクロサービス ワークロード データ アクセス パターンの不適切な設計

不適切なマイクロサービス ワークロード データ アクセス パターン: マイクロサービスのアーキテクチャは、組織のデータベースに依存しています。 マイクロサービス全体のデータ アクセス パターンは明確に分離する必要があります。 データが適切に分割されたテーブル/コレクションにある限り、複数のサービス インスタンスで単一のデータベースを使用することは、多くの場合許容されます。

f. 依存症

依存性障害は、適切に機能するためにサービスを特定の順序で展開する必要があることを認識している場合に発生するアンチ パターンです。 関心事の機能分離を制御できない場合、凝集カオスが発生する可能性があります。

このアンチパターンを回避する良い方法は、API ゲートウェイを導入することです。

モノリシック、マイクロサービス、およびサービス指向アーキテクチャの違い

モノリスとマイクロサービス
モノリスとマイクロサービス MartinFowler
マイクロサービスSOA モノリシック
デザインサービスは小さな単位で構築され、ビジネス指向の API で正式に表現されます。 サービスのサイズは、小規模なアプリケーション サービスから、より多くのビジネス機能を含む非常に大規模なエンタープライズ サービスまでさまざまです。 モノリシック アプリケーションは巨大なサイズに進化し、アプリケーション全体を理解することが困難な状況になります。
使いやすさサービスは、RESTful API などの標準プロトコルで公開され、他のサービスやアプリケーションによって消費/再利用されます。 SOAP などの標準プロトコルで公開され、他のサービスによって消費/再利用されるサービス – メッセージング ミドルウェアを活用します。 モノリシック アプリケーション全体で限定的な再利用が実現されます。
限定
スケーラビリティサービスは独立したデプロイ アーティファクトとして存在し、他のサービスとは独立してスケーリングできます。 サービスと再利用可能なサブコンポーネント間の依存関係により、スケーリングの問題が発生する可能性があります。 モノリシック アプリケーションのスケーリングは、多くの場合、困難な場合があります。
機敏小規模な独立した展開可能なユニットにより、ビルド/リリース管理が容易になり、運用の機敏性が向上します。 依存関係を増やし、管理機能を制限するコンポーネント共有を強化します。 モノリシックなアプリケーション アーティファクトを繰り返しデプロイする場合、運用の俊敏性を実現するのは困難です。
発達サービスを個別に開発することで、開発者は目の前のタスクに適切な開発フレームワークを使用できます。 再利用可能なコンポーネントと標準的なプラクティスは、開発者の実装に役立ちます。 モノリシック アプリケーションは、単一の開発スタック (つまり、JEE または .NET) を使用して実装されるため、「ジョブに適したツール」の可用性が制限される可能性があります。
分散データ
分散データ MartinFowler

マイクロサービスを必要とする主要な垂直市場

ヘルスケア: ヘルスケア マイクロサービス市場は、2015 年の 1 億 3000 万ドルから 2025 年までに 5 億 1900 万ドルに成長すると予測されています。 ヘルスケア業界は、データ セキュリティと規制遵守のニーズに対する答えと、実装上の問題を克服する方法を求めています。

銀行、金融、保険: Aspen Mesh は、金融サービス向けのマイクロサービスの 3 つの重要な利点を特定しています。個別の ID サービスの作成によるセキュリティの向上、新機能の迅速な提供、管理しやすい API レイヤーです。

政府: 政府機関は、マイクロサービス アーキテクチャのさまざまな利点に加えて、ビジネス目標に対応する機能を設計する能力から利益を得ることができ、IT チームは構成員の要求に応じてサービスを確立または改善できます。

小売: Amazon と eBay は、アクセスしやすくスケーラブルなサービスや、より効果的なバグとエラーの管理など、小売業界向けのマイクロサービスの利点を証明しています。

メディアとエンターテイメント: 2009 年に Netflix はマイクロサービスに移行し、現在、サービスは 500 を超えるマイクロサービスを使用して毎日 20 億のエッジ リクエストを処理しています。 この変更により、速度、スケーラビリティ、およびアクセシビリティが向上します。

マイクロサービス アーキテクチャを採用した企業の例

Amazon、Coca-Cola、Zalando などは、IT インフラストラクチャをマイクロサービス アーキテクチャに変更しています。 さらに、彼らは内部の組織構造を再編成し、企業を市場の最前線に押し上げています。 マイクロサービス アーキテクチャの実装は、業界最高の専門家から知識を得ることができれば楽しいものです。 マイクロサービスの最も効果的な例をいくつか紹介します。

#1。 ユーバー

Jaeger による 2018 年半ば頃の Uber のマイクロサービス アーキテクチャ
Jaeger による 2018 年半ば頃の Uber のマイクロサービス アーキテクチャ

所有権の概念は、絡み合ったモノリシックな依存関係によって破壊されました。 移行は困難になりました。 新しい開発者はモノリスに貢献できませんでした。 小さなエラーが壊滅的な結果につながりました。 Uber は、クラウドベースのサービスの実装を選択しました。 Uber は、請求、乗客および旅行の管理など、いくつかの業務用のマイクロサービスを開発しました。 API ゲートウェイは、サービスとの通信に使用されます。

さらに、Uber はマイクロサービスの世界標準を確立しました。 ドキュメント、信頼性、フォールト トレランスなどの定量的な基準を提供します。 これらの特性は、ページ訪問などの商業指標を使用して監視されました。 すぐに、彼らのサービスは卓越性の頂点に達しました。

#2。 ネットフリックス

その後、Netflix はクラウドベースの分散データ インフラストラクチャに移行しました。 AWS は、水平方向にスケーラブルなシステムと追加のサービス/機能を提供するために使用されました。 2009 年に、Netflix はその譲渡を開始しましたが、これはほぼ 3 年後に完了しました。 その後、Netflix はユーザー向けアプリケーションをすべて自律型マイクロサービスに変換しました。 2012年に、イメージチェンジが完了しました。 2015 年までに、Netflix はすべてのサービス中断を解消し、1 日あたり約 20 億の API クエリを処理できるようになりました。 現在、Netflix には 190 か国に 1 億 3900 万人を超えるユーザーがいます。 現在、Netflix は約 700 のマイクロサービス システムを個別に運用しています。

#3。 アマゾン

Amazon は 2001 年に大きなモノリスを持っていました。2021 年には、事実上すべての人がアマゾン ウェブ サービス (AWS) に精通しています。これは、その優位性により商用クラウド コンピューティング サービスとなった内部ソリューションです。 マイクロサービスは、ユーザーのアクティビティ、購入、および販売ファネル全体を追跡できるため、e コマースに最適です。 Amazonのシニアプロダクトマネージャーによると

次に、製品のプレゼンテーションと販売プロセス自体を最適化するのに役立つデータを生成します。 Amazon は、マイクロサービスが組織全体の変化に重要な役割を果たした最初の企業の 1 つです。 世界的な巨大企業は、モノリス設計が情報技術システム構築の「標準」であった時代に驚くべき成功を収めました。

すべての重要なコード変更は、ユーザーが利用できるようになるまでの数週間、展開プロセスで停止されました。 Amazon はマイクロサービスを採用して、プロセスを合理化し、時間を短縮しました。 構造を個々のアプリに分割することで、開発者はボトルネックがどこにあるか、スローダウンの性質を特定し、それぞれが 1 つのサービスに専念する小さなチームを持つサービス指向アーキテクチャとして構造を再構築することができました。

システムのクリーンアップとして始まったものは、現代建築における主要なオンライン プレーヤーの 1 つを成長させました。 Amazon は、現在普及している AWS (Amazon Web Services) などの一連のオープンソース テクノロジをリリースすることで、他のビジネスへの道を開拓しました。

#4。 イーベイ

eBay システムは、約 1,000 のマイクロサービスをサポートしています。 Web やネイティブの iOS および Android アプリケーションなどのフロントエンド エクスペリエンスは、呼び出しを調整する中間サービスに接続し、その後バックエンド サービスと通信します。 各サービスには、独自の自律開発グループがあります。 eBay のマイクロサービスの大部分はアーキテクトなしで進化し、システムは常にボトムアップで設計されました。 eBay のような大企業の大半は、顧客の要求に従って機能し、もちろん常に変化している多言語マイクロサービスのコレクションにたどり着きました。

eBay マイクロサービス
eBay マイクロサービス Dzone

#5。 サウンドクラウド

各サービスは個別に開発および展開され、JSON や Thrift などの軽量のデータ交換標準を使用して、ネットワーク経由で他のサービスと接続します。 移行期間中、新しいマイクロサービスは MySQL のリレーショナル モデルを変更することができず、さらに悪いことに、別のストレージ エンジンを利用することもできませんでした。 スレッドベースのモデルがチャットのようなモデルに置き換えられたユーザー間のメッセージングなどの極端な状況では、同社は cronjobs を使用して個別のデータベースを同期させました。

#6。 Spotify

社内の同期地獄を防ぐために、Spotify は自律的なフルスタック チームが担当するマイクロサービス アーキテクチャで設計されています。 Spotify はマイクロサービス アーキテクチャを採用しており、すべてのソフトウェア開発者が独自の機能を持つ閉じた「領域」に書き込みます。 各マイクロサービスには、単一の単純な責任があり、ほとんどの場合、別のプロセスからアクセスできないデータベースとロジックがあります。

マイクロサービスはどのような課題を克服するのに役立ちますか?

これは、「マイクロサービスはどのような問題を解決するのか?」という質問に対する解決策です。 マイクロサービス アーキテクチャが克服するのに役立った障害を調べてみましょう。

CASE 1 eBay の残高が回復した

eBay はほぼ 1,000 のサービスを利用しています。 多くのフロント エンド サービスは API 呼び出しを送信しますが、バック エンド サービスは管理および配送関連の操作を行います。 eBay は当初、Perl と C++ のモノリシック プログラムを使用していました。 eBay の Web サイトは、他の多くのインターネット大手と同様に主要な製品です。 eBay Web サイトにいくつかの追加機能を追加する必要性が高まり続けました。 さらに、このタイプの Web サイトは、新しい機能が追加されている場合でも、1 日 24 時間、週 7 日アクセスできる必要がありました。

ダウンタイムを最小限に抑える必要があるため、eBay はマイクロサービス アーキテクチャへの切り替えを選択しました。 これにより、サイトがより安定し、非同期統合が促進されました。 展開の柔軟性とリリース サイクル期間が大幅に改善されました。 サービスが分離されると、パフォーマンス効率が向上し、スケールアウトが容易になりました。

CASE 2 Uber と急速な拡大

最も人気のあるタクシー配車サービスである Uber は、最初に実装されたサンフランシスコの通勤者にサービスを提供する単一のパッケージから始まりました。 この密接に接続されたソフトウェアは、請求、支払い、ドライバー接続サービスなど、すべてではないにしても大部分のビジネス活動を管理することができました。 しかし、会社が発展するにつれて、物事は衰退し始めました。 Uber はサービスエリアを拡大し、他のサービスを提供していました。

さらに機能が追加されるにつれて、パッケージはよりまとまりのあるものになりました。 すべてのロジックが 1 つの場所に格納され、問題が発生し始めました。 すぐに、わずかな変更でもプログラム全体を再デプロイする必要がありました。 継続的インテグレーションは、すぐに重大な問題になります。

所有権モデルが存在しないのは、モノリスの多くの相互依存関係が原因でした。 したがって、移行は困難でした。 また、新しく採用された開発者がモノリスに貢献できないことも発生しました。 些細なミスがあったとしても、その結果は深刻でした。 これが、マイクロサービスの実装を決定したときです。 彼らの動きには時間がかかりました。 サービス全体を分解し、モノリシック アプリケーションを、Python、Node.js、および Apache Thrift を使用して構築されたマイクロ サービス指向のアーキテクチャに移行しました。

CASE 3 Twitterのアップタイム改善

それは同じ古い話でした.Twitterは最初にモノリシックなデザインを利用しました.これは非常に理にかなっています. しかし、Twitter に登録する個人が増えると、問題が発生しました。 SDLC はより大きく、より扱いにくくなり、ビルド時間が長くなり、スケーラビリティが大幅に低下し、容量超過エラーの警告が時折表示されました。

Twitter は、この問題を解決するためにアーキテクチャをマイクロサービスに変更することにしました。 各マイクロサービスは、モジュール化され、明確に定義され、自律的に作成されました。 各コンポーネントを個別にテストして展開する場合があります。 それらは独立して測定されることもあります。 すぐに、エラー警告は完全に消えました。

ケース 4 KarmaWifi とスパゲッティ コード

Karma には人、ガジェット、お店があります。 ある時点で、モノリシックなプログラムが利用可能になり、ユーザー関連のコードがデバイス関連の部分になってしまいました。 さらに、ストア API はデバイス API に従いました。 すぐに、何が変更され、誰が変更したかを判断することが難しくなりました。 当初の目的はモノリスを機能的なライブラリに分割することでしたが、新しいソフトウェア バージョンへの拡張と適応は困難であることがわかりました。 さらに、市場に導入される将来のイノベーションを試すことができなくなります。

その時までに、彼らはマイクロサービスに基づくアーキテクチャを使用することを選択していました. 必要不可欠であると判断した場合、バックエンド アプリケーションの一部を個々のサービスに分割しました。 パーツは最初は巨大でしたが、時間の経過とともに小さなサービスに分割されました。 最終的に、すべてのマイクロサービスには 1 つのタスクと、考慮すべき最大サイズがありました。

CASE 5 ウォルマートの業績改善

ウォルマートのマイクロサービスへの冒険は、OneOps と呼ばれる小さな企業から DevOps プラットフォームを買収したことから始まりました。 彼らは、コミュニティに貢献できるように、それをオープンソースのイニシアチブにすることを選択しました。

Node.js や Cassandra データベースなどのテクノロジーを利用して、API を介して動的にトリガーできるさまざまなマイクロサービスを作成し始めました。 その目的は、ウォルマートの多くの事業部門で働く開発者が自分のアプリを所有することをより簡単にし、その権限を与えることでした。 彼らは、これにより集中型の IT グループへの依存が減少することを発見しました。

最終的に、組織の e コマース製品のバックエンド機能を拡張する開発者の能力は、ビジネスの俊敏性の向上に貢献しました。

Android と iOS でマイクロサービス アーキテクチャを実装する方法

  1. ステップ 1: それが本当にあなたのビジネスに必要なものかどうかを判断します。
  2. ステップ 2: はいの場合、既存のインフラストラクチャを調べます。
  3. ステップ 3: チームがメソッドを使用する準備を整えます。
  4. ステップ 4: モノリシック システムからマイクロサービス システムに切り替える場合は、データ管理者に十分な情報があり、タスクを理解しているかどうかを確認してください。
  5. ステップ 5: コーディング用の言語とフレームワークを選択します。
  6. ステップ 6: サービス、コンテナ、および仮想マシン テンプレートを使用して基本アーキテクチャをセットアップします。
  7. ステップ 7: アーキテクチャが「モノリス」の場合は、データベースを多数の小さなデータベースに分割します。
  8. ステップ 8: API ゲートウェイを配置します。
  9. ステップ 9: トラッキングを追跡し、そのマップを作成します。
  10. ステップ 10: 自動化を使用してテストします。

マイクロサービスは未来ですか?

この記事の主な目的は、マイクロサービスの基本的な概念と原則を説明することです。 これを達成するために努力することで、マイクロサービス アーキテクチャ スタイルが不可欠な概念であり、企業アプリケーションが慎重に検討されるべきものであると私たちが考えていることは明らかです。 最近、私たちはこの方法を採用した多くのシステムを開発しました。また、この方法を高く評価している他のシステムも認識しています。 Amazon、Netflix、The Guardian、英国政府デジタル サービス、realestate.com.au、Forward、comparethemarket.com などは、何らかの形で建築様式を開拓していることを認識しています。

マイクロサービスは定着しています。 今後 2 年以内に、非ユーザーの 56% がマイクロサービスを採用する可能性が高く、ユーザーの 78% がマイクロサービスへの投資を増やし、59% オフのアプリケーションがマイクロサービスで作成されます。 IBM

多くの場合、アーキテクチャに関する決定の実際の影響は、数年後まで明らかになりません。 モジュール性を強く求める優れたチームは、時間の経過とともに劣化するモノリシックな設計を構築することがあります。 多くの人は、サービスの境界が明確で修正が難しいため、マイクロサービスではそのような劣化は起こりにくいと主張しています。 ただし、十分な年齢の十分な数のシステムが揃うまで、マイクロサービス アーキテクチャの成熟度を正確に評価することはできません。

マイクロサービスがゆっくりと発展すると予想される理由は確かにあります。 コンポーネント化の試みが成功するかどうかは、ソフトウェアがコンポーネントにどれだけうまく適合するかにかかっています。 コンポーネントの境界線をどこに配置するかを決定するのは困難です。 進化的デザインは、正しい境界を確立することの難しさを認識しており、したがって、それらを簡単に作り直すことの重要性を認識しています。 ただし、コンポーネントが外部通信を伴うサービスである場合、リファクタリングは、インプロセス ライブラリを操作する場合よりもはるかに困難です。

サービスの境界を越えてコードを移動するのは複雑です。インターフェイスの変更は参加者間で調整する必要があり、追加の互換性レイヤーを確立する必要があり、テストは複雑です。 コンポーネントがきちんと構成されていない場合は、複雑さをコンポーネント内からコンポーネント間のリンクに移しているだけです。 これは複雑さをシフトするだけでなく、より明示的ではなく、管理がより困難な場所にシフトします。 小さくて単純なコンポーネントの内部を調べると、サービス間の複雑な連携を見過ごして、実際よりも優れていると結論付けてしまいがちです。

最後に、考慮すべきチームの能力があります。 熟練したチームは、新しいプラクティスを受け入れる可能性が高くなります。 ただし、スキルの高いチームにとってより効果的なアプローチが、スキルの低いチームにとって常に有効であるとは限りません。 無能なチームがずさんなモノリシック構造を構築している例をいくつか見てきましたが、マイクロサービスでこの種の混乱が発生した場合に何が起こるかを判断するには時間がかかります. お粗末なチームは常に貧弱なシステムを生み出します。 この状況で、マイクロサービスが状況を改善するか悪化させるかを言うのは困難です。

 したがって、慎重な楽観主義でこれを書きます。 私たちは、マイクロサービスが定着すると信じています!

EmizenTech を選ぶ理由

Emizentech は、モノリシック アーキテクチャからマイクロサービス アーキテクチャへのアプリケーションの移行を支援します。 企業アプリケーションを簡単に維持し、スケーラブルにするお手伝いをいたします。 ビジネスを成長させ、発展させたいと考えていて、そのための新しい方法を探しているなら、emizentechは正しい方法であなたを助け、長期的な成長を確実にします。 また、当社の Web サイトにアクセスして、マイクロサービスの詳細を確認したり、会社がマイクロサービスを受け入れる準備ができているかどうかを確認したり、このアーキテクチャの実装方法について話し合ったりすることもできます。 これは、アプリケーションを 1 つのことだけを行い、明確に定義されたインターフェイスを持つモジュールに分割することに重点を置いたソフトウェアを作成する方法です。

当社のサービスの際立った特徴は次のとおりです。

  • アプリケーションの障害を防ぐためのドメイン駆動型アーキテクチャ
  • 高度なスケーラビリティを確保
  • 分散型データベース設計
  • 単純な障害分離を有効にし、
  • DevOps カルチャを使用して継続的デリバリーを有効にします。

最後に

次のステップへ!

このブログでは、マイクロサービス アーキテクチャのいくつかの側面と、それがもたらす可能性を調査する努力をしました。 アプリケーション システムの機能は、マイクロサービスと呼ばれるアーキテクチャ アプローチを使用すると、多数の小さな機能単位に分割できます。 サービスの実装と管理は、互いに個別に処理されます。 モノリシック システムがマイクロサービス アーキテクチャを使用して小さな断片に分割されると、個々のコンポーネントの数が劇的に増加します。

したがって、それらの間に存在する依存関係を効率的に管理する必要があります。 モノリシックなソフトウェア アーキテクチャと比較すると、マイクロサービス アーキテクチャの作成と実行には多くの課題があり、パラダイム シフトが必要であることは事実です。 同様に、マイクロサービス アーキテクチャは、あらゆる種類のシステムで発生する複雑さの問題を解決できる特効薬ではありません。

すべてを考慮すると、マイクロサービス アーキテクチャは、現代のソフトウェア開発にとって非常に便利で便利なツールであると考えています。 マイクロサービス アーキテクチャは、複雑さに効果的に対処し、市場での競争力を維持するための唯一の方法であるため、一般に複雑なソフトウェアを生成する大企業にとって唯一の実行可能な戦略です。 マイクロサービス アーキテクチャは、大企業だけでなく中小企業にも長期的なメリットをもたらす持続可能なソフトウェア開発に利用する必要があります。

Spotify、Netflix、LinkedIn、Amazon、Google などのマイクロサービス アーキテクチャを早期に採用した企業は、マイクロサービス アーキテクチャを採用した結果、ライバルに対して大きな競争上の優位性を得ることができたことに注意することが重要です。 アーキテクチャ モデルの開発と検討は、この取り組みを支援するための実行可能なオプションです。 この方法は、企業が新たな激しい競争の時代に突入している現在、収益に悪影響を与えることなく、物事を簡素化し、開発者の生活をよりシンプルにすることを約束します。

大多数の企業はコスト効率の向上に関心を持っており、このような背景から、サーバーレス アーキテクチャは今後数年間でさらに人気が高まると予想されます。 世界の将来におけるマイクロサービスの潜在的なリーチは、かなり有望であるように思われます。

マイクロサービスはビジネスの前進に役立ちますか? 解体のご相談もお気軽にどうぞ!

読んでくれてありがとう!

マイクロサービス アーキテクチャに関するよくある質問

  1. マイクロサービス アーキテクチャを選択する理由は何ですか?

    マイクロサービスの設計には、堅牢性、生産性、柔軟性、スケーラビリティ、速度、ダイナミズム、最小限のメンテナンスなど、モノリシック アーキテクチャに勝るいくつかの利点があります。

  2. マイクロサービス アーキテクチャの 5 つのコンポーネントとは?

    マイクロサービス アーキテクチャの 5 つの基本コンポーネントは、マイクロサービス、コンテナー、サービス メッシュ、サービス ディスカバリー、および API ゲートウェイです。

  3. REST API はマイクロサービスですか?

    はい。REST API は、マイクロサービス アプリケーションの構築に使用される最も一般的な API の 1 つです。

  4. マイクロサービスと API の違いは何ですか?

    API とマイクロサービスの主な違いは、後者は単一のアプリケーションを構築するために使用されるのに対し、前者は独立しているが相互接続されたサービスのコレクションで構成されていることです。 API は、他のソフトウェア プログラムとの通信を容易にするアプリケーションのコンポーネントです。 したがって、マイクロサービスの作成を容易にするために API を利用できます。

  5. Is Kubernetes a microservice?

    Yes, Kubernetes is an open-source orchestrator for deploying containerized applications (microservices).

  6. What language is used in microservices?

    C++ is a good language for microservices in domains that require the characteristics of C++, such as runtime speed and direct memory access, and C++, like other languages, has a variety of infrastructures available to help you get started with developing microservices. C++ is a good language for microservices in domains that require the attributes of C++, such as runtime speed and direct memory access.

  7. マイクロサービス アーキテクチャを選択する理由は何ですか?

    >>俊敏性の向上と市場投入までの時間の短縮
    >>効果的なスケーラビリティとアプリケーションの更新
    >>最適化された開発コスト
    >>高い信頼性、安定性、保守性
    >>テクノロジーの選択における柔軟性
    >>個々のビジネス機能に焦点を当てる
    >>チームの自律性
    >>自動展開とテスト
    >>より良いリソース管理
    >>技術的負債の削減/回避

あなたも読みたいかもしれません
  • フルスタック アプリ開発: 完全ガイド
  • ヘッドレス コマース: 従来のコマースのソリューション
  • コンポーザブルコマース
  • モバイルアプリのバックエンド開発
  • アプリ開発のための技術スタックの選び方