Nacos は SpringCloud の非常に強力なコンポーネントであり、eureka よりも機能的になることを望んでいます。
ナコス公式プロフィール
Nacos (正式名: Naming and Configuration Service) は、オープンソースの動的サービス検出、構成管理、およびサービス管理プラットフォームです。これは Alibaba Group によって開発され、開発者がマイクロサービス アーキテクチャをより適切に構築および管理できるようにすることを目的として、オープン ソース コミュニティに貢献しました。
Nacos は次のコア機能を提供します。
-
サービスの検出と登録: Nacos はサービス レジストリとして機能し、開発者がマイクロサービス インスタンスを簡単に登録、検出、管理できるようにします。一貫したハッシュ アルゴリズムを使用してサービスの負荷分散を実現し、サービスを検出して呼び出すためのさまざまな方法を提供します。
-
動的な構成管理: Nacos はアプリケーションの構成情報を一元管理できます。開発者は Nacos を使用して、アプリケーションを再デプロイしたり再起動したりすることなく、構成を動的に更新および公開できます。これにより、構成の柔軟性と保守性が向上し、構成管理の複雑さが軽減されます。
-
サービスの健全性の監視: Nacos は、マイクロサービスの健全性状態を監視および報告できます。定期的なハートビート チェックを実行し、ハートビート データを使用してサービスが利用可能かどうかを判断できます。サービスが利用できない場合、Nacos は適時にアラートを発行し、トラブルシューティングと回復を支援します。
-
動的ルーティングと負荷分散: Nacos は動的ルーティングと負荷分散機能を提供し、開発者がリクエストのルーティング戦略を柔軟に管理および調整できるようにします。重み付け、一貫性のあるハッシュ、最小アクティブ数に基づいたさまざまな負荷分散アルゴリズムをサポートしており、他のオープンソース コンポーネント (Nginx や OpenResty など) と統合することもできます。
全体として、Nacos は、開発者がマイクロサービス アーキテクチャをより適切に構築、管理、調整できるよう、マイクロサービス インフラストラクチャの完全なセットを提供します。オープンソースの特徴、使いやすさ、高可用性と拡張性を備えており、業界で広く使用され、認知されています。
ナコスのインストール
Windowsのインストール
- インストールパッケージをダウンロードする
Nacos の GitHub ページには、コンパイルされた Nacos サーバーまたはソース コードをダウンロードするためのダウンロード リンクがあります。
GitHub ホームページ: https://github.com/alibaba/nacos
GitHub のリリース ダウンロード ページ:リリース · alibaba/nacos · GitHub
- 解凍 (中国語以外のディレクトリ)
- ポート設定
- Nacos のデフォルトのポートは 8848 です。コンピュータ上の他のプロセスがポート 8848 を占有している場合は、nacos の conf ディレクトリに入ってポートを変更します。
- 開始 (bin ディレクトリに入る)
cmd を開いてコマンドを実行します。
startup.cmd -m standalone
- アクセス ( http://127.0.0.1:8848/nacos ) アカウントのパスワードは nacos です
Linuxのインストール
- JDKをインストールする
Java公式Webサイトからjdk jarパッケージをダウンロードし、ダウンロードしたjarパッケージをディレクトリ(/user/local/など)にアップロードできます。
解凍後、名前を java に変更します。
tar -xvf jdk-8u144-linux-x64.tar.gz
環境変数を構成します。
export JAVA_HOME=/usr/local/java
export PATH=$PATH:$JAVA_HOME/bin
環境変数を設定します。
source /etc/profile
- インストールパッケージをアップロードする
Linux サーバーのディレクトリ (例: /user/local/src) にアップロードします。
- 解凍する
圧縮されたインストール パッケージを解凍するコマンド:
tar -xvf nacos-server-1.4.1.tar.gz
インストール パッケージを削除します。
rm -rf nacos-server-1.4.1.tar.gz
- ポート設定
- 起動する
sh startup.sh -m standalone
Spring Cloud が nacos を導入
1. 親プロジェクトに対応する依存関係を導入します。
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.5.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
2. 元の AB サービスの eureka 依存関係をコメントアウトします。
3. nacos クライアントに対応する依存関係を導入します。
<!-- nacos客户端依赖包 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
4. A サービスと B サービスの yml ファイルを変更し、eureka アドレスをコメント アウトし、nacos アドレスを追加します。
spring:
cloud:
nacos:
server-addr: nacos:8848 # nacos服务地址
要約:
1.Nacosサービス構築
- インストールパッケージをダウンロードする
- 解凍する
- bin ディレクトリでコマンドを実行します:startup.cmd -mstandalone
2. Nacos サービスの登録または発見
- nacos.discovery 依存関係を導入する
- nacos アドレス spring.cloud.nacos.server-addr を構成する
Nacos サービスの階層型ストレージ モデル
サービスクラスターのプロパティ
1. 対応するサービスのymlファイルを変更し、以下の内容を追加します
spring:
cloud:
nacos:
server-addr: nacos:8848 # nacos服务地址
discovery:
cluster-name:SM #配置集群名称,也就是说机房的位置
要約:
1.Nacosサービスの階層型ストレージモデル
- 第一レベルのサービス
- 2 番目のレベルはクラスターです
- レベル3は一例です
2. インスタンスのクラスタープロパティの設定方法
- 対応する yml ファイルを変更し、プロパティ spring.cloud.nacos.discovery.cluster-name を追加します。
運用プロセスでは、ロード バランシングでは、最も近いサービス (同じクラスター) を見つけることを優先する必要があります。では、同じクラスター内のサービスを優先的に見つけるには、Spring でどのように構成すればよいでしょうか?
クラスタに応じた負荷分散
1. サービス A の yml ファイルを変更し、クラスターを SM に設定します。
spring:
cloud:
nacos:
server-addr: nacos:8848 # nacos服务地址
discovery:
cluster-name: SM
2. サービス A の負荷分散の IRule を NacosRule に設定します。このルールは、それ自体と同じクラスター内のサービスの検索を優先します。
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRul
重量に基づいた負荷分散
実際のアプリケーションでは、このような状況に遭遇します。一部のサーバー機器が貧弱で、ユーザーのリクエストが少ないことを願っています。一部のサーバー機器は良好で、より多くのユーザーのリクエストを受け入れてくれることを望みます。
Nacos はアクセス頻度を制御するための重み設定をサポートしています。重みが大きいほど、アクセス頻度が高くなります [0,1]
環境分離名前空間
Nacos のサービス ストレージとデータ ストレージの最も外側の層は、namespqce と呼ばれるもので、最も外側の分離に使用されます。
Nacos コンソールでは、異なる環境を分離するために名前空間を作成できます (名前空間 -> 新しい名前空間)
cluster-name: SM
discovery:
#命名空间ID
namespace: 4d6ce343-9e1b-44df-a90f-2cf2b6b3d177 # dev环境
各分離環境には一意の ID があり、異なる環境のサービスは相互に認識されません。
ナコス登録センターの理念
サービスが一時インスタンスであるかどうかを設定できます。
spring:
cloud:
nacos:
discovery:
ephemeral: false # 是否是临时实例
一時インスタンスがダウンすると、nacos サービス リストから削除されますが、非一時インスタンスは削除されません。
ナコスとエウレカの共通の責任:
- サービス登録とサービスプルの両方をサポートします
- どちらもサービス プロバイダーの健全性検出のためのハートビート方式をサポートしています
ナコスとエウレカの違い:
- Nacos は、サーバーがプロバイダーのステータスをアクティブに検出することをサポートします。一時インスタンスはハートビート モードを採用し、非一時インスタンスはアクティブ検出モードを採用します。
- 異常なハートビートのある一時的なインスタンスは削除されますが、一時的ではないインスタンスは削除されません
- Nacos はサービス リスト変更のメッセージ プッシュ モードをサポートし、サービス リストはよりタイムリーに更新されます。
- デフォルトでは、Nacos クラスターは ap モード (弱い整合性と強い可用性) を採用しますが、クラスター内に非一時インスタンスがある場合は cp モード (強い整合性と弱い可用性) を採用し、Eureka は ap モードを採用します。