SpringCouldの紹介

前書き

公式ウェブサイトhttps://spring.io/projects/spring-cloudSpring
は統合に最適です
。SpringCloudは、構成管理、サービスディスカバリ、インテリジェントルーティング、ヒューズ、負荷分散、制御バス、クラスターステータスなどの機能を実装します関連する主なコンポーネントは次のとおりです。

  1. Eureka:サービスガバナンスコンポーネント。登録サービスセンターの実現、サービス登録および発見メカニズムを含みます。
  2. Zuul:ゲートウェイコンポーネント。インテリジェントなルーティングおよびアクセスフィルタリング機能を提供します。
  3. リボン:クライアント負荷分散サービスコンポーネント。
  4. 偽:サービスコール、リボンとHystrixに与えられる宣言型サービスコールコンポーネント。
  5. Hystrix:フォールトトレラント管理コンポーネントは、サーキットブレーカーモードを実現し、サービスの依存関係の遅延を支援し、フォールトに対して強力なフォールトトレランスを提供します。

ユーレカ詳細

インフラ

Eurekaのアーキテクチャの3つのコアの役割:

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

  2. サービスプロバイダー
    はサービスアプリケーションを提供します。Restスタイルのサービスが外部で提供されている限り、SpringBootアプリケーションまたはその他のテクノロジーにすることができます。

  3. サービスコンシューマー
    コンシューマーアプリケーションは、レジストリからサービスのリストを取得します。これにより、各サービスパーティの情報がわかり、サービスパーティの呼び出し先がわかります。

ユーレカレジストリ

Eurekaレジストリは、サービスプロバイダーの情報の管理と記録を担当します。サービスの発信者は自分でサービスを見つける必要はありませんが、ユーリカに自分のニーズを伝え、ユーリカはあなたのニーズに合ったサービスを教えてくれます。
同時に、サービスプロバイダーとEurekaは*「ハートビート」*メカニズムによって監視されます。サービスプロバイダーに問題が発生すると、Eurekaは自動的にサービスリストから削除します。
これにより、サービスの自動登録、検出、およびステータス監視が実現されます。
基本的なアーキテクチャ図

  • ユーレカ:住所を外部に公開するのは登録センターです。
  • プロバイダー:起動後にEurekaに情報を登録します。
  • 消費者:Eurekaサービスに加入すると、Eurekaは対応するサービスのすべてのプロバイダーアドレスのリストを消費者に送信し、定期的に更新します。
  • ハートビート(更新):プロバイダーは、http経由でEurekaを介して定期的に自身のステータスを更新します。

ユーレカサーバー

Eurekaサーバー登録センター、実際、EurekaServiceはクラスターまたはクラスターであり、可用性の高いEurekaセンターを形成します。

| サービスの同期

複数のEurekaサーバーも相互にサービスとして登録されます。サービスプロバイダーがEurekaサーバークラスター内のノードに登録すると、ノードはサービス情報をクラスター内の各ノードに同期して、データの同期を実現します。したがって、クライアントがEurekaサーバークラスター内のノードにアクセスしても、サービスの完全なリストを取得できます。

| 高可用性EurekaServer
構築するための実践2つのEurekaServerクラスターを実行することを想定しています。ポートは10086と10087です。itcast-eurekaを2回開始するだけです。

  • 最初のeurekaServerを起動するには、元のEurekaServer構成を変更します。

    server:
      port: 10086 # 端口
    spring:
      application:
        name: eureka-server # 应用名称,会在Eureka中显示
    eureka:
      client:
        service-url: # 配置其他Eureka服务的地址,而不是自己,比如10087
          defaultZone: http://127.0.0.1:10087/eureka
    

    Eurekaサーバー自体がサービスとして登録され、Eurekaサーバーはお互いを検出してクラスターを形成できます

  • service-urlの値を別のサーバーのEurekaServerに変更します

  • クライアントがサービスクラスターに登録され、
    複数のEurekaサーバーが登録されます

eureka:
  client:
    service-url: # EurekaServer地址,多个地址以','隔开
      defaultZone: http://127.0.0.1:10086/eureka,http://127.0.0.1:10087/eureka

プロバイダーサービス

サービス提供者は、Eureka Serverにサービスを登録し、サービス更新などの作業を完了するものとします。

| サービス登録

サービスプロバイダーが起動すると、構成プロパティのeureka.client.register-with.eureka = trueパラメーターが正しいかどうかがチェックされますデフォルトはtrueです。trueの場合、RestリクエストをEurekaServerに送信し、独自のメタデータ情報を伝達します。EurekaServerは、この情報を2層のマップ構造で保存します。

  • 最初のレイヤーマップのキーはサービスIDであり、spring.application.name属性
  • 2番目のレイヤーマップのキーは、サービスのインスタンスID、たとえばhost + serviceID + portです。 localhost:service-provider:8081
  • 値はサービスのインスタンスオブジェクトです。これは、サービスがさまざまなインスタンスを開始してクラスターを形成できることを意味します。

| サービスの更新
サービスの登録が完了すると、サービスプロバイダーはハートビートを維持し、EurekaServerにRestリクエストを定期的に送信して、EurekaServerがまだ生きているかどうかを通知します。これは呼び出されます。renew

eureka:
  instance:
    lease-expiration-duration-in-seconds: 90
    lease-renewal-interval-in-seconds: 30
  • リース更新間隔秒単位:サービス更新間隔、デフォルトは30秒
  • Lease-expiration-duration-in-seconds:サービスの有効期限、デフォルト値は90秒です。
    デフォルトでは、ハートビートが30秒ごとにレジストリに送信されます。90秒以内に応答がない場合、EurekaServerはサービスを考慮します。ダウンすると、サービスリストから削除されます。
    生产环境下该参数不需要进行修改默认即可
    开发环境下时间太长,修改时间缩短进行测试

サービス消費者

| サービスコンシューマーの開始時にサービスのリストを取得し、パラメーター
eureke.client.fetch-registry=true
値を検出します(trueの場合)。読み取り専用バックアップのEurekaサーバーサービスリストをプルして、ローカルにキャッシュします。そして每隔30秒、データを再取得して更新します。

eureke:
	client:
		registry-fetch-interval-seconds:5

障害の排除と自己防衛

| サービスオフライン
サービスが正常にシャットダウンすると、サービスオフラインRestがトリガーされ、EurekaServerが要求され、サービスレジストリに「オフラインにする」と通知されます。サービスセンターがリクエストを受信すると、サービスはオフラインになります。

| 障害の除去
サービスプロバイダーは必ずしも正常にオフラインになるとは限りません。また、メモリオーバーフロー、ネットワーク障害などの理由により、サービスが正常に動作しない場合があります。Eureka Serverは、そのようなサービスをサービスリストから削除する必要があります。したがって、時限サービスが開かれ、60秒すべての無効なサービスが毎回削除されます
合格eureka.server.eviction-interval-timer-in-ms、ユニット毫秒(ms)

server:
	port:10086 #端口
spring:
	applicaiton:
		name:eureka-server #应用名称
eureka:
   server:
   	eviction-interval-timer-in-ms:10
   client:
   	service-url:
   		defalutZone:http://127.0.0.1:10086/eureka

| 自己保護
サービスをオフにすると、Eurekaパネルは警告します:
ここに画像の説明を挿入これがEurekaの自己保護メカニズムをトリガーしました。サービスが時間どおりにハートビートを更新しない場合、Eurekaは、過去15分間にハートビートに失敗したサービスインスタンスの割合が85%を超えるかどうかを計算します。実稼働環境では、ネットワークの遅延やその他の理由により、ハートビート障害インスタンスの割合が標準を超える可能性があります。ただし、サービスがダウンしていない可能性があるため、現時点でサービスをリストから削除することは適切ではありません。Eurekaは現在のインスタンスの登録情報を保護し、削除しません。これは実稼働環境で効果的であり、ほとんどのサービスが引き続き有用であることを保証します。

eureka:
	server:
		enable-self-preservation:false #关闭自我保护
		evication-interval-timer-in-ms:60 #扫描失效服务的间隔时间(缺省为60*1000)

おすすめ

転載: blog.csdn.net/weixin_42789301/article/details/105068569