ナコス登録センター
国内企業は一般的に登録センターなどアリババの技術を尊重しており、Spring Cloud アリババも Nacos と呼ばれる登録センターを立ち上げた。
1.1. Nacos の理解とインストール
Nacosは Alibaba の製品であり、現在Spring Cloudのコンポーネントです。Eurekaに比べて機能が豊富で、中国での人気が高いです。
1.2. nacosへのサービス登録
Nacos は SpringCloudAlibaba のコンポーネントであり、SpringCloudAlibaba も SpringCloud で定義されたサービス登録およびサービス検出の仕様に従います。したがって、マイクロサービスに Nacos を使用する場合と Eureka を使用する場合に大きな違いはありません。
主な違いは次のとおりです。
- 依存関係が違う
- サービスアドレスが異なります
1) 依存関係を導入する
<dependencyManagement>
SpringCloudAlibaba 依存関係をCloud-demo 親プロジェクトの pom ファイルに導入します。
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.6.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
次に、nacos-discovery 依存関係を user-service と order-service の pom ファイルに導入します。
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
注: eureka の依存関係をコメントアウトすることを忘れないでください。
2) nacosアドレスの設定
user-service と order-service の application.yml に nacos アドレスを追加します。
spring:
cloud:
nacos:
server-addr: localhost:8848
注: eureka のアドレスをコメントアウトすることを忘れないでください。
3) 再起動
マイクロサービスを再起動した後、nacos 管理ページにログインすると、マイクロサービスの情報を確認できます。
1.3. サービス階層型ストレージモデル
サービスには複数のインスタンスを含めることができます。たとえば、ユーザー サービスには次のインスタンスを含めることができます。
- 127.0.0.1:8081
- 127.0.0.1:8082
- 127.0.0.1:8083
たとえば、これらのインスタンスが全国のさまざまなコンピューター室に分散されている場合は、次のようになります。
- 127.0.0.1:8081、上海コンピュータ室
- 127.0.0.1:8082、上海コンピューター室
- 127.0.0.1:8083、杭州コンピューター室
Nacos は、同じコンピュータ ルーム内のインスタンスを 1 つのクラスタに分割します。
つまり、ユーザー サービスはサービスです。サービスには、杭州や上海などの複数のクラスターを含めることができます。各クラスターには複数のインスタンスを含めることができ、図に示すように階層モデルを形成できます。
マイクロサービスが相互にアクセスする場合、ローカル アクセスの方が高速であるため、同じクラスター インスタンスへのアクセスを試行する必要があります。現在のクラスターが使用できない場合にのみ、他のクラスターにアクセスできます。例えば:
杭州コンピューター室のオーダーサービスは、同じコンピューター室のユーザーサービスを優先する必要があります。
1.3.1. ユーザーサービス用のクラスターの設定
user-service の application.yml ファイルを変更し、クラスター構成を追加します。
spring:
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ # 集群名称
2 つのユーザー サービス インスタンスを再起動すると、nacos コンソールに次の結果が表示されます。
ユーザーサービスの起動設定を再度コピーし、プロパティを追加します。
-Dserver.port=8083 -Dspring.cloud.nacos.discovery.cluster-name=SH
構成を次の図に示します。
UserApplication3 を起動した後、nacos コンソールを再度確認します。
1.3.2. 同一クラスター内での優先順位によるロードバランシング
デフォルトでは、ZoneAvoidanceRule
同じクラスター内の優先順位に基づいてロード バランシングを実現することはできません。
したがって、Nacos は、NacosRule
同じクラスターのインスタンスに優先順位を付けることができる実装を提供します。
1) order-service のクラスター情報を構成する
order-service の application.yml ファイルを変更し、クラスター構成を追加します。
spring:
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ # 集群名称
2) 負荷分散ルールを変更する
order-service の application.yml ファイルを変更し、負荷分散ルールを変更します。
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则
1.4. ウェイト設定
実際の展開では、次のシナリオが発生します。
サーバー機器の性能にはばらつきがあり、インスタンスが配置されているマシンの性能が良いものもあれば、性能が悪いものもあり、性能の良いマシンにはより多くのユーザーのリクエストを受け入れられることが期待されます。
ただし、デフォルトでは、NacosRule は同じクラスター内でランダムに選択され、マシンのパフォーマンスの問題は考慮されません。
そこでNacosではアクセス頻度を制御するための重み設定を用意しており、重みが大きいほどアクセス頻度が高くなります。
nacos コンソールで、user-service のインスタンス リストを見つけて、[編集] をクリックして重みを変更します。
ポップアップ編集ウィンドウで重みを変更します。
注: 重みを 0 に変更すると、インスタンスにはアクセスできなくなります。
1.5. 環境隔離
Nacos は、環境分離機能を実装するための名前空間を提供します。
- nacos には複数の名前空間が存在する可能性があります
- 名前空間の下にはグループ、サービスなどが存在する場合があります。
- 異なる名前空間は互いに分離されており、たとえば、異なる名前空間にあるサービスは相互に認識されません。
1.5.1.名前空間の作成
デフォルトでは、すべてのサービス、データ、およびグループは、public という名前の同じ名前空間内にあります。
ページ上の新規ボタンをクリックして名前空間を追加できます。
次に、フォームに記入します。
ページに新しい名前空間が表示されます。
1.5.2. マイクロサービスの名前空間の設定
マイクロサービスの名前空間の構成は、構成を変更することによってのみ実現できます。
たとえば、order-service の application.yml ファイルを変更します。
spring:
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ
namespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 # 命名空间,填ID
order-service を再起動した後、コンソールにアクセスすると、次の結果が表示されます。
この時点で order-service にアクセスすると、名前空間が異なるため userservice が見つからず、コンソールにエラーが報告されます。
1.6.ナコスとエウレカの違い
Nacos サービス インスタンスは 2 つのタイプに分類されます。
-
一時インスタンス: インスタンスが一定期間以上ダウンしている場合、サービス リストから削除されます。これがデフォルトのタイプです。
-
非一時インスタンス: インスタンスがダウンしてもサービス リストから削除されず、永続インスタンスと呼ぶこともできます。
サービス インスタンスを永続インスタンスとして構成します。
spring:
cloud:
nacos:
discovery:
ephemeral: false # 设置为非临时实例
Nacos と Eureka の全体的な構造は、サービスの登録、サービスのプル、ハートビートの待機など似ていますが、いくつかの違いもあります。
-
ナコスとエウレカの共通点
- どちらもサービスの登録とサービスのプルをサポートします。
- すべてのサービス プロバイダーの健全性検査のハートビート方式をサポートします。
-
ナコスとエウレカの違い
- Nacos は、サーバーがプロバイダーのステータスをアクティブに検出することをサポートします。一時インスタンスはハートビート モードを採用し、非一時インスタンスはアクティブ検出モードを採用します。
- 異常なハートビートのある一時的なインスタンスは削除されますが、一時的ではないインスタンスは削除されません。
- Nacos はサービス リスト変更のメッセージ プッシュ モードをサポートしており、サービス リストはよりタイムリーに更新されます。
- Nacos クラスターはデフォルトで AP モードを使用します。クラスター内に非一時インスタンスがある場合は CP モードが使用され、Eureka は AP モードを使用します。
Dark Horse Programmer Tutorial から編集された学習メモ