springcloud登録センターEurkaを実現します。


EurekaはNetflixオープンソースのサービス登録と発見を提供する製品で、完全なService RegistryとService Discoveryを提供しています。springcloudシステムの中で最も重要な最も核心的なコンポーネントの一つです。
背景の紹介
サービス?センター
サービスセンターは登録センターとも言われています。サービスの登録、発見、溶断、負荷、降格などの各種サービス機能を管理しています。
サービスセンターの呼び出し関係が変化したら、いくつかの略図を描いて理解してください。
プロジェクトA呼び出し項目B
正常起動項目A要求項目B

サービスセンターがあったら、どのサービスも直接キャンセルできません。全部サービスセンターを通じて呼び出さなければなりません。

プロジェクトAはプロジェクトBを呼び出し、プロジェクトBはプロジェクトCを呼び出しています。

このときに呼び出すステップは2ステップになります。まず、プロジェクトAはサービスセンターからプロジェクトBサーバを要求し、プロジェクトBはサービスセンターからプロジェクトCサービスを要求します。

上の項目は2つか3つの相互間の簡単な呼び出しですが、もしプロジェクトが20個以上30個を超えたら、15年の末に分散型のプロジェクトが20個に達します。図を描いて、数十個のプロジェクトの間の相互呼出関係は全部ラインです。いずれの項目も変更されたら、いくつかの項目に関連して再起動されます。面倒臭い上に、間違いやすい。サービスセンターを通じてサービスを取得します。あなたが呼び出した項目のIPアドレスに関心を持つ必要はありません。何台かのサーバーで構成されています。毎回直接サービスセンターに行って利用できるサービスを取得して呼び出してもいいです。
各種サービスがサービスセンターに登録されているので、多くの高級機能を作る条件があります。例えば、何台かのサービスは同じサービスを提供して、バランス負荷を作ります。サーバーの成功率を監視して溶断し、サービスリストの故障点を除去します。サービス呼び出し時間を監視して、異なるサーバに対して重みなどを設定します。
Eurekaの話をする前にNetflixの話をします。
Netflix
百度の百科事典から紹介します。
Netflixは、米国、カナダでインターネットを提供しています。選択されたストリームに合わせて、DVD、ブルーレイディスクをカスタマイズしてオンラインレンタルします。同社は1997年に設立され、カリフォルニア州に本社を置き、1999年から購読サービスを開始した。2009年には、同社は最大10万本のDVD映画を提供し、1千万人の加入者がいる。2007年2月25日、Netflixは10億枚目のDVDを販売したと発表しました。HISの報告によると、2011年のNetflixネット映画の販売台数は米国のオンライン映画の総販売量の45%を占めている。
この単語を初めて見た時は、様々なドラマや映画の冒頭で、Netflixで撮影された代表的な美劇は「カルタハウス」、「毒フクロウ」、「怪奇物語」があります。その後、springcloudを研究している時にNetflixを発見しました。彼らは同じ会社かと思っています。githubをチェックした後、メールの拡張子は確かに同じ会社だと判定しました。実はsprigcloudのマイクロサービスはNetflixのオープンソース製品に基づいて作られました。
NetflixのオープンソースフレームのコンポーネントはすでにNetflixの大規模な分散式マイクロサービス環境の中で長年の生産を経て実戦検証され、コミュニティにマイクロサービスの枠組みを構築する標準コンポーネントとして受け入れられています。Spring Cloudオープンソース製品は、主にNetflixのオープンソースコンポーネントの更なるパッケージに基づいており、Spring開発者がマイクロサービスの基礎フレームを構築するのに便利である。いくつかのマイクロサービスのフレームワークシステムを構築しようとする会社にとっては、Netflixのオープンソースマイクロサービスコンポーネント(またはSpring Cloud)を十分に利用または参考にし、その上で必要な企業カスタマイズを行うことが、マイクロサービスアーキテクチャへの近道に違いない。
エウレカ
公式の紹介によると:
Eureka is a REST(Representational State Transfer)based service that is prmarity used in the AWS cloud for locating services for the purpose of load balancing and failover of middle-tier server.
EurekaはRESTベースのサービスであり、主にAWSクラウドで使用され、サービスを位置決めして中間層サーバの負荷バランスと障害転送を行う。
Spring CloudはNetflix社が開発したEurekaモジュールをカプセル化してサービス登録と発見を実現します。EurekaはC-Sの設計アーキテクチャを採用している。サービス登録機能としてのEureka Serverは、サービス登録センターです。システム内の他のマイクロサービスは、Eurekaのクライアントを使ってEureka Serverに接続し、心拍接続を維持します。このようにシステムのメンテナはEureka Serverを通じてシステム中の各マイクロサービスが正常に運行されているかどうかを監視することができます。Spring Cloudのいくつかの他のモジュール(例えばZuul)は、Eureka Serverを通じてシステム内の他のマイクロサービスを発見し、関連するロジックを実行することができます。
Eurekaは二つのコンポーネントから構成されています。EurekaサーバとEurekaクライアントです。Eurekaサーバはサービス登録サーバとして機能します。Eurekaクライアントは、サーバーとの相互作用を簡略化し、ポーリング負荷イコライザとして、サービスのフェイルオーバサポートを提供するjavaクライアントである。Netflixは、その生産環境において他のクライアントを使用し、トラフィック、リソース利用率、およびエラー状態に基づく重み付け負荷バランスを提供する。
一枚の図で以下を認識します。

上の図は、Eurekaの基本的なアーキテクチャを簡単に説明し、3つのキャラクターから構成される。
1、Eureka Server
  • サービス登録と発見
  • を提供します。
    2、Service Provider
  • サービス提供者
  • は、自身のサービスをEurekaに登録し、サービス消費者が
  • を見つけることができるようにする。
    3、Service Consmer
  • サービス消費者
  • は、Eurekaから登録サービスリストを取得することにより、消費サービス
  • を提供することができる。
    実例と実践
    Eureka Server
    spring cloudはすでにサービス登録センターを実現してくれました。簡単なステップが必要です。
    1、pomに依存を追加
    
    <dependencies>
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter</artifactId>
      </dependency>
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka-server</artifactId>
      </dependency>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
      </dependency>
    </dependencies>
    2、起動コードに@EnableEurekaServerの注釈を追加する。
    
    @SpringBootApplication
    @EnableEurekaServer
    public class SpringCloudEurekaApplication {
    
      public static void main(String[] args) {
        SpringApplication.run(SpringCloudEurekaApplication.class, args);
      }
    }
    3、プロファイル
    デフォルトの設定では、サービス登録センターも自分をクライアントとして登録しようとするので、そのクライアント登録行為を無効にする必要があります。以下の構成をapplication.propertiesに追加します。
    
    spring.application.name=spring-cloud-eureka
    
    server.port=8000
    eureka.client.register-with-eureka=false
    eureka.client.fetch-registry=false
    
    eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/
  • eureka.client.register-with-eureka:Eureka Serverに自分を登録するかどうか、デフォルトはtrueです。
  • eureka.client.fetch-registry:Eureka Serverから登録情報を取得するかどうか、デフォルトはtrueです。
  • eureka.client.serviceUrl.defaultZone:Eureka Serverと相互作用するアドレスを設定し、問合せサービスと登録サービスはこのアドレスに依存する必要があります。デフォルトはhttp://localhost:8761/eureka ;複数のアドレスが使用され、分離されます。
  • プロジェクトを開始したら、アクセス:http://localhost:8000/は、次のページを見ることができます。サービスはまだ発見されていません。

    クラスタ
    登録センターのような肝心なサービスは単独で注文すれば、故障に遭ったら壊滅的です。分散システムでは、サービス登録センターは最も重要な基礎部分であり、いつでもサービスを提供できる状態にあるべきです。その利用可能性を維持するためには、クラスタを使用することが良い解決策である。Eurekaは相互登録によって利用可能な高い展開を実現するため、Eureke Serverを他の利用可能なserviceUrlに配置するだけで、高い利用可能な配置を実現することができます。
    ダブルノード登録センター
    初めてダブルノードの登録センターの構築を試みます。
    1、appication-peer 1.propertiesを作成し、peer 1サービスセンターの配置として、serviceUrlをpeer 2に向ける。
    
    spring.application.name=spring-cloud-eureka
    server.port=8000
    eureka.instance.hostname=peer1
    
    eureka.client.serviceUrl.defaultZone=http://peer2:8001/eureka/
    2、appication-peer 2.propertiesを作成し、peer 2サービスセンターの配置として、serviceUrlをpeer 1に向ける。
    
    spring.application.name=spring-cloud-eureka
    server.port=8001
    eureka.instance.hostname=peer2
    
    eureka.client.serviceUrl.defaultZone=http://peer1:8000/eureka/
    3、ホット転換
    hostsファイルに下記の構成を追加します。
    
    127.0.0.1 peer1 
    127.0.0.1 peer2 
    4、包装開始
    次のコマンドを順次実行します。
    
    #  
    mvn clean package
    #    peer1 peeer2       eureka
    java -jar spring-cloud-eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer1
    java -jar spring-cloud-eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer2
    順次起動が完了したら、ブラウザ入力:http://localhost:8000/効果図は以下の通りです。

    図によれば、peer 1の登録センターDS Replicasには既にpeer 2の関連構成情報があり、available-replicasに表示されていることがわかる。私達は手動でpeer 2を停止して観察していますが、peer 2はunavailable-replicasの欄に移動します。peer 2は使えないということです。
    この二ノードの構成は完了しました。
    eurekaクラスタ使用
    生産の中で、3台以上の登録センターが必要かもしれません。サービスの安定性を保証します。構成の原理は同じです。登録センターはそれぞれ他の登録センターを指します。ここでは3つのクラスターの構成を紹介しますが、実は2つのノードの登録センターと同様に、登録センターごとに他の2つのノードを指していればいいです。
    appication.ymlの設定の詳細は以下の通りです。
    
    ---
    spring:
     application:
      name: spring-cloud-eureka
     profiles: peer1
    server:
     port: 8000
    eureka:
     instance:
      hostname: peer1
     client:
      serviceUrl:
       defaultZone: http://peer2:8001/eureka/,http://peer3:8002/eureka/
    ---
    spring:
     application:
      name: spring-cloud-eureka
     profiles: peer2
    server:
     port: 8001
    eureka:
     instance:
      hostname: peer2
     client:
      serviceUrl:
       defaultZone: http://peer1:8000/eureka/,http://peer3:8002/eureka/
    ---
    spring:
     application:
      name: spring-cloud-eureka
     profiles: peer3
    server:
     port: 8002
    eureka:
     instance:
      hostname: peer3
     client:
      serviceUrl:
       defaultZone: http://peer1:8000/eureka/,http://peer2:8001/eureka/
    それぞれpeer 1、peer 2、peer 3の構成パラメータでeureka登録センターを起動します。
    
    java -jar spring-cloud-eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer1
    java -jar spring-cloud-eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer2
    java -jar spring-cloud-eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer3
    順次起動が完了したら、ブラウザ入力:http://localhost:8000/効果図は以下の通りです。

    peer 1には、peer 2、peer 3に関する情報が見られます。これでeurekaクラスタも完了しました。
    サンプルコード
    以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。