作者の他のプラットフォーム:
| CSDN:blog.csdn.net/qq_41153943
| ナゲッツ: juejin.cn/user/651387…
| 志湖: www.zhihu.com/people/1024…
| GitHub: github.com/JiangXia-10…
この記事は合計 4950 ワードあり、読むのにかかる時間は 13 分です。
序文
分散システムでは、サービス レジストリは重要な役割を果たし、サービスの検出とクライアントの負荷分散に不可欠なメンバーです。登録センターの基本機能に加えて、その安定性、可用性、堅牢性は、分散システム全体の円滑な運用に大きな影響を与えます。
サービスレジストリとは
以前の小規模なモノリシック アプリケーションでは、コンポーネント間の呼び出しは、仕様上の制約があるインターフェイスを通じてのみ行う必要がありました。しかし、マイクロサービス アーキテクチャでは、元の大規模なアプリケーションは通常、ビジネスに応じて特定の機能を提供する比較的独立したサービスに分割され、各マイクロサービスはクラスタリングなどの方法で動的に拡張でき、それぞれのマイクロサービス インスタンスのネットワーク アドレスは動的に変更される可能性があります。マイクロサービスアーキテクチャでは、サービスのスパンが大きく数も多いため、各マイクロサービスインスタンスの情報を登録・管理する分散コンポーネントを構築すると同時に、各マイクロサービスインスタンスが連携できる機能を提供する必要があります。お互いを発見し、お互いを呼び合った結果を達成します。
したがって、サービスの登録と検出には、サーバー側とクライアントの 2 つの部分が含まれると考えることができます。サーバー側は共通コンポーネントであり、クライアント側にサービスの登録と検出の機能を提供し、サーバー側に登録されているクライアント側の関連情報を維持し、クライアント側がサーバー内の他のサービスに関する情報を取得するためのインターフェイスを提供します。レジストリ、動的変更の実行 サービス アドレスが安定している場合、クライアントはサービス間で呼び出しを行うことができます。クライアントは、自身のサービス情報を一定の方法でサーバに登録し、自身の情報の整合性を正常な範囲内に保つことで、他のサービスが便利に利用できるようにするとともに、クライアントが必要とする他のサービス情報を取得することができます。サーバー経由のサービス呼び出しに依存します。
要約すると、サービス レジストリは、マイクロサービス アーキテクチャ全体で単一のサービスを提案することを指します。このサービスは、システムのビジネス機能を完了するものではなく、マイクロサービス システム全体のサービス登録とサービス検出を完了するためにのみ使用されます。サービスの健全性状態の監視および管理機能。
サービス レジストリの機能は次のように要約できます。
1. マイクロサービス名、IP、ポートなどのすべてのマイクロサービス情報を保存します。
2. サービス呼び出しを行うときは、サービス ディスカバリを使用して、サービス呼び出しに使用可能なマイクロサービスとネットワーク アドレスのリストをクエリします。
3. すべてのマイクロサービスでハートビート検出を実行し、一部のインスタンスが長期間アクセスできないことが判明した場合、そのインスタンスはサービス レジストリから削除されます。
共通サービスの登録および検出コンポーネントには、netflix の eureka、zookeeper (zk については、前の記事を参照してください。zookeeper チュートリアル: はじめに)、consul、および Ali の nacos (登録センターとしての nacos については、前の記事を参照してください。) が含まれます。SpringCloud: Nacos サービスの構築とサービス検出)
エウレカとは
「エウレカ」は古代ギリシャ語で、「見つけた!見つけた!」という意味です。伝説によれば、アルキメデスは入浴中に浮力の原理を発見し、嬉しさのあまりズボンを履く暇もなく走っていきました。通りに向かって叫びました:「エウレカ(見つけました)!」。Netflix では、Eureka は REST スタイルのサービス登録と検出のための基本的なサービス コンポーネントであり、主に AWS の中間層サービスの負荷分散とフェイルオーバーを目的としています。Eureka は 2 つの部分で構成されており、1 つはサービスの登録および検出機能を提供する Eureka Server、もう 1 つはサーバーとの対話を容易にする Eureka Client と呼ばれる Java クライアントであり、Eureka Client は定期的に独自の登録を行います。情報 Eureka Server に移動し、Server から他のサービスを検出します。クライアントには、基本的なラウンド ロビン ロード バランシング用のロード バランサが組み込まれています。
したがって、Eureka は主に、Eureka Server と Eureka Client の 2 つのコンポーネントで構成されます。
今日の記事では主に、サービス レジストリとして eureka サーバーを開発する方法を学びます。
実践開発
私のプロジェクトの構造は次のとおりです。
まず、springcloud プロジェクトを作成する必要があります。ここで、後続の学習のための親プロジェクトとして Maven 集約プロジェクトを作成しました。親プロジェクトは主に依存関係管理とバージョン管理に使用されます。したがって、プロジェクト関連の依存関係を親プロジェクトに追加する必要があります。完全な pom ファイルは次のとおりです。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.jiangxia</groupId>
<artifactId>springcloud_parent</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>springcloud01_eureka_server</module>
</modules>
<!--继承springboot的父项目-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
</parent>
<!--父项目不写代码,只维护依赖和版本-->
<!--自定义properties属性-->
<properties>
<!--具体的springcloud版本-->
<spring.cloud-version>Hoxton.SR6</spring.cloud-version>
</properties>
<!--维护版本-->
<dependencyManagement>
<dependencies>
<!--维护springcloud版本依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud-version}</version>
<!--父项目类型都是pom类型-->
<type>pom</type>
<!--当前项目也要导入一个父项目-->
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
次に、サブプロジェクト springcloud01_eureka_server を作成します。これは、ここでサービス登録センターに eureka-server を使用するプロジェクトです。サブプロジェクトは親プロジェクトの依存関係を継承するため、次の依存関係をサブプロジェクトの pom ファイルに追加するだけで済みます。
<dependencies>
<!--引入springbootweb依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--引入eurekaserver依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
次に、エントリ スタートアップ クラスを追加する必要があります。@springbootapplication アノテーションの使用に加えて、現在のプロジェクトがサービス レジストリであることを示す @enableEurekaServer アノテーションも追加する必要があります。
/**
* @author jiangxia
* @date 2022年05月18日 21:02
*/
@SpringBootApplication
//开启eurekaserver注解:表示当前应用是一个服务注册中心
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class,args);
}
}
最後のステップは、構成ファイルで何らかの構成を行うことです。application.properties ファイルでは、次のように、サービス ポート、サービス名、登録センターのアドレス、およびその他の構成を構成できます。
#eureka默认端口就是8761,这里和默认保持一致
server.port=8761
#指定服务名称,唯一标识,服务名不能出现下划线,如果不指定名称,显示的就是unknown
spring.application.name=eurekaserver
#指定服务注册中心的地址,暴露服务地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka
# 关闭eureka立即注册,默认事true
eureka.client.fetch-registry=false
#让当前应用仅仅是服务注册中心,即开启不自己注册自己,默认是true
eureka.client.register-with-eureka=false
これまでにエウレカサーバー開発サービス登録センターを開発してきました。スタートアッププロジェクト:
アドレスバーに次のように入力します。
http://localhost:8761/
eureka サーバーの管理インターフェイスが表示されます。
まだアプリケーションが登録されていないため、ここにはアプリケーションがないことがわかります。上記の構成は次のとおりです。
# 关闭eureka立即注册,默认是true
eureka.client.fetch-registry=false
#让当前应用仅仅是服务注册中心,即开启不自己注册自己,默认是true
eureka.client.register-with-eureka=false
上記の設定が true に変更されるか、設定されない場合 (デフォルト値は true)。次に、eureka サーバーは、起動時に次のように登録センターに登録されます。
上記の起動プロセス中に、コンソールにエラー メッセージが出力されます。
これは、eureka にはサーバーとクライアントの 2 つのコンポーネントが含まれており、eureka サーバー コンポーネントをプロジェクトに導入すると、同時に eureka クライアントもプロジェクトに導入されるため、起動時にサービス センターとして起動します。同時に、登録センターで自分自身をクライアントとして登録し、構成ファイル内の 2 つの構成をコメント化したので、デフォルトでは起動時にすぐに登録されます (以前の構成が true に設定されている場合も同様です)。ただし、サービスはまだ登録完了していないため、エラーを報告してください。したがって、上記の 2 つの構成を false に設定します。
要約する
上記は、サービス登録センターの開発のための eureka サーバーの使用です。主な手順は、対応する springcloud プロジェクトを作成し、次に springcloud と eureka サーバー関連の依存関係をインポートし、最後に構成ファイルで eureka サーバーを構成し、使用することです。サービスを開始するには、エントリ クラスの @EnableEurekaServer アノテーションをセンターに登録するだけです。
以降の記事では、eureka クライアントの開発を続けます。