ユーレカ登録センター-SpringCloud(4)

ユーレカとは?

  EurekaはDidi Chuxingのようなもので、サービスプロバイダーに関する情報の管理と記録を担当しています。

  サービスの呼び出し元は自分でサービスを見つける必要はありませんが、ユーレカに自分のニーズを伝え、ユーレカはあなたのニーズを満たすサービスを教えてくれます。

  同時に、サービスプロバイダーとEurekaは「ハートビート」メカニズムを通じて監視され、サービスプロバイダーに問題が発生すると、Eurekaがサービスリストから自動的に削除します。

  これにより、サービスの自動登録、検出、およびステータス監視が可能になります。

 

ユーレカのインフラ

  ユーレカアーキテクチャの3つの中心的な役割:

  サービス登録センター:

    Eurekaのサーバーアプリケーションは、サービスの登録および検出機能を提供します。

  サービスプロバイダー:

    このサービスを使用する必要があります。これは、SpringBootアプリケーションにすることも、Restスタイルのサービスを提供する限り、他のテクノロジーで実装することもできます。

  サービス利用者:

    コンシューマアプリケーションは、各サービスパーティの情報を知り、サービスパーティの呼び出し先を知るために、登録センターからサービスリストを取得します。

 

高可用性Eurekaサーバー

  EurekaServerはサービスのレジストリです。EurekaServerをクラスターにして、可用性の高いEurekaセンターを形成できます。

  複数のEurekaServerが相互にサービスを登録します。サービスプロバイダーがEurekaServerクラスター内のノードに登録されると、ノードはサービス情報をクラスター内の各ノードに同期して、データの同期を実現します。

  したがって、クライアントがEurekaServerクラスター内のノードにアクセスしても、完全なサービスリスト情報を取得できます。  

  いわゆる高可用性登録センターは実際にはEurekaServer自体をサービスとして登録しているため、複数のEurekaServerがお互いを検出してクラスターを形成できます。

 

サービスプロバイダー

  サービスプロバイダーは、EurekaServerにサービスを登録し、サービスの更新やその他のタスクを完了する必要があります。

  サービスプロバイダーが起動すると、eureka.client.register-with-eureka = trueパラメーターが正しいかどうかが確認されます。実際、デフォルトはtrueです。 

  値がtrueの場合、EurekaServerへのRestリクエストが開始され、独自のメタデータ情報が送信されます。EurekaServerは、この情報を2層のマップ構造に格納します。

    最初のレイヤーマップのキーは、サービスのIDです。通常、構成では、spring.application.nameプロパティです。

    2番目のレイヤーマップのキーはサービスインスタンスIDであり、通常はホスト+ serviceld +ポートです。例:localhost:service-provider:8081

    値はサービスのインスタンスオブジェクトです。つまり、サービスは複数の異なるインスタンスを同時に開始してクラスターを形成できます。

  登録サービスが完了すると、サービスプロバイダーはハートビートを維持し(Rest要求はEurekaServerに定期的に送信されます)、サービスがまだ存在することをEurekaServerに通知します。この動作はサービスの更新と呼ばれます。

  サービスの更新の動作を変更できる2つの重要なパラメーターがあります。

ユーレカ:
  インスタンス:
    lease -expiration-duration-in-seconds:90#サービス障害の間隔、デフォルトは30秒
    リース -renewal-interval-in-seconds:30#サービスの更新時間、デフォルトは90秒

  つまり、デフォルトでは、サービスは30秒ごとにレジストリにRestリクエストを送信して、それがまだ生きていることを証明します。

  90秒以上送信されない場合、EurekaServerはサービスがダウンしていると見なし、サービスリストから削除されます。

  本番環境ではこれらの2つの値を変更しないでください。デフォルトのみです。 

  開発環境では、この値は長すぎます。サービスをオフにすることがよくありますが、Eurekaはまだサービスがまだ有効であると考えているため、適切に調整できます。

 

消費者へのサービス

  サービスコンシューマーが開始すると、eureka.client.fetch-registry = trueパラメーターの値を検出します。trueの場合、読み取り専用バックアップ用のEurekaServerサービスのリストをプルし、それをローカルにキャッシュします。

  さらに、データは30秒ごとに取得および更新されます。これは、次のパラメーターで変更できます。

ユーレカ:
  クライアント:
    レジストリ -fetch-interval-seconds:5

  本番環境では、この値を変更する必要はありません。

  開発環境では、サービスのステータスをすばやく取得するために、サービスを小さく設定できます。

 

失敗の拒否

  サービスが正常にシャットダウンすると、サービスのRest要求がオフラインでEurekaServerに送信され、サービス登録センターに「オフラインになります」と通知されます。

  リクエストを受信すると、サービスセンターはサービスをオフラインステータスに設定します。

  場合によっては、サービスプロバイダーが正常にオフラインにならず、メモリオーバーフローまたはネットワーク障害が原因でサービスが正しく機能しないことがあります。

  EurekaServerは、このようなサービスをサービスリストから除外する必要があります。

  したがって、EurekaServerはタイマーサービスを開始して、失敗したすべてのサービスを60秒ごとに削除します。

  eureka.server.eviction-interval-timer-in-msパラメーターで変更できます。単位はミリ秒です。

  本番環境は変更しないでください。

  ただし、この速度では開発に大きな不便が生じ、サービスの再起動後、Eurekaは60秒で反応するため、開発段階で適切に調整できます。

 

自己防衛

  サービスをシャットダウンすると、Eurekaパネルに警告が表示されます。

  これがEurekaの自己保護メカニズムのトリガーです。サービスが時間どおりにハートビートを更新できなかった場合、Eurekaは過去15分間にハートビートエラーが発生したサービスインスタンスの割合が85%を超えているかどうかをカウントします。

  本番環境では、ネットワークの遅延やその他の理由により、失敗したハートビートインスタンスの割合が標準を超える可能性がありますが、現時点ではサービスを除外することは適切ではありません。

  サービスがダウンしていない可能性があるため、Eurekaは現在のインスタンスの登録情報を保護し、削除しません。

  本番環境では非常に効果的であり、ほとんどのサービスが引き続き利用可能であることを保証しますが、開発に問題が発生します。

  したがって、開発段階では自己保護モードがオフになります。

ユーレカ:
  サーバ:
    enable -self-preservation:false #自己保護モードを無効にします(デフォルトはオンです)
    eviction -interval-timer-in-ms:1000#無効なサービスをスキャンする間隔時間(デフォルトは60 * 1000ms)

 

おすすめ

転載: www.cnblogs.com/guancangtingbai/p/12690859.html