技術共有

マイクロサービスにおける「サービス発見メカニズム」の紹介

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

  • マイクロサービスのサービス検出メカニズムは、マイクロサービス アーキテクチャで通信するサービス インスタンスを動的に見つける方法です。

  • これは主に登録センターに依存してサービスの登録、クエリ、およびサポートの負荷分散を実装し、それによってシステムのスケーラビリティと柔軟性を向上させます。

1. 基本的な考え方

サービス検出とは、分散システム内で利用可能なサービスを自動的に検出して識別するプロセスを指します。

マイクロサービス アーキテクチャでは、サービスが異なるサーバーに分散された複数の小規模な自律サービスに分割されるため、サービス間の効果的な通信を確保するにはサービス検出メカニズムが必要です。

2. 主な手順

  • サービス登録

    • マイクロサービス インスタンスが開始されると、そのネットワークの位置情報 (IP アドレスやポート番号など) とサービス ID がサービス登録センターに登録されます。
    • この登録プロセスは通常自動で行われ、人間の介入は必要ありません。
    • 登録センターは、すべてのサービス インスタンスの登録情報を維持し、サービス インスタンスの動的な登録と登録解除をサポートする責任を負います。
  • サービスのお問い合わせ

    • マイクロサービスが別のマイクロサービスを呼び出す必要がある場合、サービス レジストリにクエリを実行して、必要なサービスの現在利用可能なネットワーク アドレスを調べます。
    • 登録センターはサービス インスタンスのアドレス リストを返し、呼び出し元は負荷分散ポリシーに従って通信するサービス インスタンスを選択できます。

3. 主要なコンポーネント

  • サービスレジストリ

    • これはサービス検出メカニズムの中核コンポーネントであり、すべてのサービス インスタンスの登録情報の管理と保存を担当します。
    • サービス インスタンスが操作を登録およびキャンセルするための API インターフェイスを提供し、サービス コンシューマがサービス インスタンスの登録情報をクエリすることもサポートします。
  • サービスプロバイダー

    • 特定のサービスを提供するマイクロサービス インスタンスです。
    • 起動時に自身のサービス情報をサービスレジストリに登録し、終了時に自身のサービス情報を登録解除します。
  • サービス利用者

    • これは、他のサービスを呼び出す必要があるマイクロサービス インスタンスです。
    • サービス レジストリに問い合わせて必要なサービスのネットワーク アドレスを取得し、そのサービスとの通信を確立します。

4. サービス検出メカニズムの実装方法

サービス検出メカニズムは、実装方法に応じて、クライアント検出とサーバー検出の 2 つのタイプに分類できます。

  • クライアント検出モード

    • クライアントは、登録センターに問い合わせ、利用可能なサービスのリストを取得し、負荷分散ポリシーに従ってサービス インスタンスと直接対話する責任があります。
    • 利点は、クライアントが柔軟に負荷分散戦略を策定できるため、サービス登録センターへの依存が軽減されることです。
    • 欠点は、クライアントが複雑な検出ロジックを実装する必要があるため、コードが複雑になり、メンテナンスのコストが増加することです。
  • サーバー検出モード

    • クライアントはサーバー (通常は API ゲートウェイまたはサービス プロキシ) にリクエストを送信し、サーバーは登録センターにクエリを実行し、リクエストを実際のサービス インスタンスに転送する責任を負います。
    • 利点は、クライアントの実装が簡素化され、コードの複雑さとメンテナンスのコストが削減されることです。
    • 欠点は、すべてのリクエストをサーバー経由で転送する必要があるため、システムの遅延と障害ポイントが増加することです。

5. サービス検出メカニズムの利点

  • サービス間の結合を減らす

    • マイクロサービスは、互いのネット​​ワーク アドレスを直接知る必要はなく、サービス登録センターを通じて通信するだけで済みます。
  • システムの拡張性と柔軟性を向上させる

    • サービスが動的に変更されると (拡張、縮小、移行など)、サービス登録センターはサービス インスタンス情報をリアルタイムで更新して、サービス間の通信が影響を受けないようにすることができます。
  • ロードバランシングとフェイルオーバーをサポート

    • クライアントは、サービス登録センターから複数のサービス インスタンスのアドレス リストを取得し、負荷分散ポリシーに基づいてそのうちの 1 つを通信用に選択できます。サービス インスタンスが利用できない場合、サービス レジストリは自動的にそのインスタンスを異常としてマークし、そのインスタンスへのリクエストの送信を回避できます。

6. 共通サービス検出ツール

  • ユーレカ

    • Netflix によって開発された、クライアント検出モードを使用するサービス検出ツール。非常に軽量で、統合と使用が簡単です。
  • 領事

    • HashiCorp によって開発されたサービス検出および構成センター ツール。サービス健全性チェックやその他の機能を含む比較的完全なソリューションを提供し、HTTP および DNS プロトコルをサポートします。
  • 飼育係

    • Apache ZooKeeper は、サービス検出にも使用できるオープンソースの分散調整サービスです。分散ロック、ネーミング サービス、その他の機能を提供し、さまざまなクライアント ライブラリをサポートします。

マイクロサービス アーキテクチャでは、サービス ディスカバリ メカニズムにより、登録センターを介してサービス インスタンスの動的な登録およびクエリ機能が実現され、サービス間の結合が軽減され、システムのスケーラビリティと柔軟性が向上します。