背景: マイクロサービス プロジェクト内の異なるモジュール間でサービス呼び出しを実装する必要がある場合、サービスの登録と検出を実装するにはどうすればよいでしょうか?
Nacos は Alibaba が立ち上げた新しいオープンソース プロジェクトで、クラウド ネイティブ アプリケーションの構築を容易にする動的なサービス検出、構成管理、およびサービス管理プラットフォームです。
Nacos は、マイクロサービスの検出、構成、管理を支援することに専念しています。Nacos は、動的なサービス検出、サービス構成、サービス メタデータ、およびトラフィック管理を迅速に実装するのに役立つ一連の使いやすい機能セットを提供します。
Nacos は、マイクロサービス プラットフォームをより機敏かつ簡単に構築、配信、管理するのに役立ちます。Nacos は、 「サービス」中心の最新のアプリケーション アーキテクチャ (マイクロサービス パラダイム、クラウド ネイティブ パラダイムなど)を構築するためのサービス インフラストラクチャです。
Nacos は次のコア機能をサポートしています。
1) サービス ディスカバリ: DNS および RPC サービス ディスカバリをサポートし、ネイティブ SDK や OpenAPI などのさまざまなサービス登録メソッド、および DNS、HTTP、API などのさまざまなサービス ディスカバリ メソッドも提供します。
2) サービスの健全性の監視: Nacos はサービスのリアルタイムの健全性チェックを提供し、異常なホストやサービス インスタンスにリクエストが送信されるのを防ぎます。
3) 動的構成サービス: Nacos は、すべての環境のアプリケーション構成とサービス構成を集中的かつ外部かつ動的に管理できる統合構成管理機能を提供します。4) 動的 DNS サービス: Nacos は、動的 DNS サービス ウェイト ルーティングをサポートしています。これにより、中間層の負荷分散、より柔軟なルーティング戦略、トラフィック制御、およびデータ センターのイントラネット向けのシンプルな DNS 解決サービスを簡単に実装できます。 。5) サービスとメタデータの管理: Nacos は、管理サービスの説明、ライフサイクル、サービスの静的依存関係分析、サービスの健全性ステータス、サービスのトラフィック管理、ルーティングとセキュリティ ポリシー、サービスの SLA、そして最も重要な metrics 統計。
注: nacos と eureka の違い (簡単な紹介)
1) nacos と eureka の範囲は異なります、Nacos のしきい値はすべてのサービスではなく、特定の Service に対するものですが、Eureka の自己保護しきい値はすべてのサービスに適用されます。nacos は CP と AP の両方をサポートしますが、 eureka は AP のみをサポートします。nacos は、長い接続であるnetty を使用します。eureka は、定期的に送信される短い接続です。
2) Eureka 保護方式: 短期間で契約更新失敗の割合をカウントし、一定の閾値に達すると自己保護機構が発動し、 Eureka Server が排除することはありません。マイクロサービスの場合は、正常になるまで待ってから、自己保護メカニズムを終了します。自己保護スイッチ (eureka.server. enab1e-self-preservation:false)
Nacos 保護方法:ドメイン名の正常なインスタンス (Instance) と総サービス インスタンス (Instance) の比率が異なる場合がしきい値未満の場合、インスタンス (Instance) が正常であるかどうかに関係なく、インスタンス (Instance) がクライアントに返されます。この方法で一部のトラフィックが失われますが、クラスターの残りの正常なインスタンス (Instance) が正常に動作できることが保証されます。

1) ソフトウェア環境
Nacos バージョン: 2.0.4
mysql バージョン: 5.7
2) インストールと転送手順
ここでは、docker を使用して nacos (シングルノード) に転送します。
注: -e MODE=standaloneを起動するときに、この環境設定を構成する必要があることに注意してください。それ以外の場合は、デフォルトの起動で 1 が占有されます。 G のメモリ、
1. まずイメージ
コマンドをプルします: docker pull nacos/nacos-server:v2.0.4
2. コンテナ
コマンドを実行します: docker run --name nacos(コンテナ名) -d - p 8848 (外部アクセス ポート): 8848 (コンテナ ポート) -p 9848:9848 -
p 9849:9849 --privileged=true --restart=always -e JVM_XMS=256 m -e JVM_XMX=256m -e MODE=standalone -e PREFER_HOST_MODE=hostname -v /home/nacos/logs (データボリュームのホストアドレス) :/home/nacos/logs (データボリュームコンテナの内部アドレス) -v /home/nacos/conf:/home/nacos/conf ea54f31c46e4 (コンテナID)
3) コンテナが起動しているか確認する
コマンド: docker ps

4) コンテナ関連のログを表示する
コマンド: docker logs --since 10m nacoscontainerid #指定されたコンテナーの出力ログを表示します

注: ログを確認し、以下のスクリーンショットに示すようなエラーを見つけて、
ログ ファイルが見つからないことを証明する場合は、次の内容をホスト構成ファイル ディレクトリに追加できます。
1) 新しいファイル nacos-logback を作成します。 xml を作成し、対応する保存された構成をホスト ファイル ディレクトリにマウントし、以下の構成を追加します;
2) log.path の value 構成は、ログ データ ボリュームがマウントされているディレクトリと一致している必要があることに注意してください。
<configuration debug="false" scan="true" scanPeriod="1 seconds">
<contextName>logbackcontextName>
<property name="log.path" value="/home/nacos/logs/logback.log" />
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERRORlevel>
filter>
<encoder>
<pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n
pattern>
encoder>
appender>
<appender name="file"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}.%d{yyyy-MM-dd}.zipfileNamePattern>
rollingPolicy>
<encoder>
<pattern>%date %level [%thread] %logger{36} [%file : %line] %msg%n
pattern>
encoder>
appender>
<root level="debug">
<appender-ref ref="console" />
<appender-ref ref="file" />
root>
<logger name="com.example.logback" level="warn" />
configuration>
5)マシンにアクセスします IP アドレス: 8848/nacos
注: 対応するポートの
ログイン アカウントを開くことを忘れないでください。 ログイン パスワード
nacos nacos

依存関係を導入する
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>
対応するモジュールの設定ファイルに nacos 設定を追加します
#サービス名(nacos上にサービス名が表示されます)
spring.application.name=サービス名
# nacosサービスアドレス
spring.cloud.nacos.discovery.server-addr=ip:ポート
スタートアップクラスにアノテーションを追加する
サービスを再起動し、nacosページにログインして確認してください(下図はサービスがnacosに正常に登録されていることを示しています)
内部のコンテンツに基づいてテーブル リンクを直接作成できます。
注: nacos バージョンに対応するテーブルの作成には問題が発生する可能性があります。
路面を保存するデータ量を入力します
ここで、nacos 設定はホスト マシンの /home/nacos/conf に保存されます。
次の内容を変更し、
Nacos を再起動して確認するだけです。
関連情報を再度作成し、サービスを再起動すると、情報はまだ存在します。
以前に構築した nacos は standalone (シングルノード モード) です。nacos はクラスターのデプロイメントをサポートしています。クラスターのデプロイメントには単一ノードを使用するのが最善です (ここには投票メカニズムがあるため)。マシンが 2 つしかないためです。ここでは、2 台のマシンをデプロイする方法のみを説明します。
注: 2. x バージョンの nacos は、ポート 9848 と 9849 のマップされたポートを開く必要があります。
以下はコマンドの例です。
docker run -d \
# hostname
-e PREFER_HOST_MODE=nacos \
# シングルトン/クラスターモード
-e MODE=cluster \
# nacos clusterアドレス、ノードアドレス
-e NACOS_SERVERS="124.223.xx.xx:8848 106.52.xx.xx:8848" \
# mysqlを起動する
-e SPRING_DATASOURCE_PLATFORM=mysql \
# mysqlマスターノードhost
-e MYSQL_SERVICE_HOST=106.52.xx.xx \
#mysqlマスターノードポート
-e MYSQL_SERVICE_PORT=3306 \
# データベースのユーザー名
-e MYSQL_SERVICE_USER=root \
# データベースのパスワード
-e MYSQL_SERVICE_PASSWORD=123456 \
#名前データベース
-e MYSQL_SERVICE_DB_NAME=nacos_config_cluster \
# nacos サーバー IP (現在) をカスタマイズする
-e NACOS_SERVER_IP=106.52.xx.xx \
# マッピングポートを指定 8848 コンテナマルチマッピング 9848 9849 ポート
-p 8848:8848 \
-p 9848:9848 \
-p 9849:9849 \
# コンテナ名
--name nacos-8848 \
--restart=always
# マウント
-v /home/nacos/logs:/home/nacos/logs -v /home/nacos/conf:/home/nacos/conf \
コンテナID

leader ノード: トランザクション リクエストを担当します (トランザクション タイプ: 構成の作成、構成の変更、構成の削除)
follow ノード: 読み取り (クエリ リクエスト) を担当します
ダウンタイム: leader ノードがダウンしている場合、follow ノードが新しい leader ノードを投票します(従来の redis などとは異なり、follow は自動的に再選出され、選出のためにセンチネル メカニズムと同様のメカニズムを使用する必要はありません)
dockerを使用して実行する際、コンテナ内のconfをマウントすると、対応する設定ファイルが存在しないことが判明する
1) 最初にテスト nacos コンテナを実行します
docker run -p 8848:8848 --name nacostest -d コンテナID
2) コンテナ内のファイルをコピーします。
# 設定ファイルのコピー
#最初のディレクトリはコンテナディレクトリで、2番目はホストディレクトリです
docker cp nacostest (コンテナ名):/home/nacos/logs/ /home/nacos/logs
docker cp nacostest (コンテナ名):/home/nacos/conf/ /home/nacos/conf
3) コンテナを強制的に閉じます
docker rm -f コンテナID
4) 次に、データ ボリューム マウント コマンドを含む起動コマンドを再実行します。
docker run コマンドの紹介
| 名前 | 説明 | 価値 |
|---|---|---|
| MODE | システム起動モード:cluster/standalonecluster/standalone | デフォルトの cluster |
| NACOS_SERVERS | クラスタアドレス | p1:port1 スペース ip2:port2 スペース ip3:port3 |
| PREFER_HOST_MODE | IP またはドメイン名モードをサポート | hostname/ip デフォルト ip |
| NACOS_SERVER_PORT | Nacos ランニングポート | デフォルト 8848 |
| NACOS_SERVER_IP | マルチNICモードでIPを指定可能 | |
| SPRING_DATASOURCE_PLATFORM | スタンドアロン モードでの MYSQL データベースのサポート | mysql / 空 デフォルト: 空 |
| MYSQL_SERVICE_HOST | データベース接続アドレス | |
| MYSQL_SERVICE_PORT | データベースポート | デフォルト: 3306 |
| MYSQL_SERVICE_DB_NAME | データベース名 | |
| MYSQL_SERVICE_USER | データベースのユーザー名 | |
| MYSQL_SERVICE_PASSWORD | データベースユーザーのパスワード | |
| MYSQL_SERVICE_DB_PARAM | データベース接続パラメータ | デフォルト : |
| MYSQL_DATABASE_NUM | データベース番号 | デフォルト: 1 |
| JVM_XMS | -Xms | デフォルト: 1g |
| JVM_XMX | -Xmx | デフォルト: 1g |
| JVM_XMN | -Xmn | デフォルト: 512m |
| JVM_MS | -XX:MetaspaceSize | デフォルト: 128m |
| JVM_MMS | -XX:MaxMetaspaceSize | デフォルト: 320m |
| NACOS_デバッグ | リモート DEBUG y/n を有効にするかどうか | デフォルト: n |
| TOMCAT_ACCESSLOG_ENABLED | server.tomcat.accesslog.enabled | デフォルト: false |
| NACOS_AUTH_SYSTEM_TYPE | パーミッション システム タイプの選択。現在は nacos タイプのみをサポートしています | デフォルト: nacos |
| NACOS_AUTH_ENABLE | 許可システムを有効にするかどうか | デフォルト: false |
| NACOS_AUTH_TOKEN_EXPIRE_SECONDS | トークンの有効期限 | デフォルト: 18000 |
| NACOS_AUTH_TOKEN | トークン | デフォルト: SecretKey012345678901234567890123456789012345678901234567890123456789 |
| NACOS_AUTH_CACHE_ENABLE | 権限キャッシュの切り替え。権限キャッシュがオンになった後、権限キャッシュの更新にはデフォルトで 15 秒の遅延があります。 | デフォルト: false |
| メンバーリスト | 環境変数を使用してクラスターアドレスを設定します。 | 例: 192.168.16.101:8847?raft_port=8807,192.168.16.101?raft_port=8808,192.168.16.101:8849?raft_port=8809 |
| EMBEDDED_ストレージ | クラスター組み込みストレージモード embedded を有効にするかどうか | デフォルト: none |
| NACOS_AUTH_CACHE_ENABLE | nacos.core.auth.caching.enabled | default : false |
| NACOS_AUTH_USER_AGENT_AUTH_WHITE_ENABLE | nacos.core.auth.enable.userAgentAuthWhite | default : false |
| NACOS_AUTH_IDENTITY_KEY | nacos.core.auth.server.identity.key | default : serverIdentity |
| NACOS_AUTH_IDENTITY_VALUE | nacos.core.auth.server.identity.value | default : security |
| NACOS_SECURITY_IGNORE_URLS | nacos.security.ignore.urls | default : /,/error,//*.css,//.js,/**/.html,//*.map,//.svg,/**/.png,//*.ico,/console-fe/public/,/v1/auth/,/v1/console/health/,/actuator/,/v1/console/server/ |