目次
ヒント: 数日前、突然、巨大な人工知能学習 Web サイトを発見しました。わかりやすくてユーモアがあるので、みんなにシェアせずにはいられません。興味のある学生は、人工知能学習 Web サイトをご覧ください。
1: ナコス登録センター
エウレカ登録センターについては説明しましたが、今度はナコス登録センターについて学びましょう。実際、Nacos は構成センターとしても使用できます。これについては後で詳しく説明します。
ダボ |
スプリングクラウド |
SpringCloudアリババ |
|
登録センター |
飼育員、レディス |
エウレカ、執政官 |
ナコス、エウレカ |
サービスリモートコール |
ダボプロトコル |
偽装 (http プロトコル) |
ダボ、フェイン |
構成センター |
なし |
SpringCloudConfig |
SpringCloudConfig、Nacos |
サービスゲートウェイ |
なし |
SpringCloudGateway、ズール |
SpringCloudGateway、ズール |
サービスの監視と保護 |
dubbo-admin、弱い機能 |
ヒスティックス |
センチネ |
1. Nacos を理解してインストールする
Nacos Alibaba の製品 (ダウンロード、インストール、起動が必要)、SpringCloud で利用可能になりましたの成分。 Eureka (Spring が統合されました) と比較して機能が豊富で、中国での人気が高いです。 Nacos は、クラウド ネイティブ アプリケーションの構築を容易にする動的なサービス ディスカバリ、構成管理、サービス管理プラットフォームです。SpringCloud Alibaba では、サービス登録ディスカバリとサービス構成管理に nacos を使用しています。
ステップ 1: インストール パッケージをダウンロードする
Nacos の GitHub ページには、コンパイルされた Nacos サーバーまたはソース コードをダウンロードするためのダウンロード リンクが提供されています。
GitHub主页:https://github.com/alibaba/nacos
GitHub のリリース ダウンロード ページ:https://github.com/alibaba/nacos/releases
ステップ 2: 解凍して設定する
今回はNacosのバージョン1.4.1を使用しますが、解凍したディレクトリは以下の通りです。
Nacos のデフォルト ポートは 8848 です。コンピュータ上の他のプロセスがポート 8848 を占有している場合は、まずプロセスを閉じてみてください。もちろん、 conf ディレクトリの application.properties で Nacos のデフォルト ポートを変更することもできます。
ステップ 3: 開始
Nacos の起動は非常に簡単です。bin ディレクトリに入ります。構造は次のとおりです。
cmdを開き、次のコマンドを実行して起動します。
startup.cmd -m standalone # 单机启动
ステップ 4: アクセスしてログインする
ブラウザにアドレスを入力します:http://127.0.0.1:8848/nacos次に:
アカウントとパスワードは両方とも nacos: ログイン後のページ
2. Nacos のクイックスタート
Nacosの利用手順は基本的にエウレカと同様で、オリジナルのエウレカをNacosで設定するだけ!
ステップ 1:cloud-demo 親プロジェクトを追加するspring-cloud-alilbaba-dependices管理の依存関係
確認:Eureka は、cloud-demo 親プロジェクトの下にサブプロジェクト eureka-server を作成しました。eureka-server 依存関係を導入し、起動クラスに @EnableEurekaServer アノテーションを追加します。 application.yamlにポート番号、サーバー名、サーバーアドレスを設定します。
背景: SpringCloud がマイクロサービスと多くのコンポーネントのコレクションのためのワンストップ ソリューションであることはわかっています。また、ほとんどすべてのコンポーネントが SpringCloud にある私たちは Netflix 製品を使用していますが、そのほとんどが更新またはメンテナンスを停止する段階に入っています。これに基づいて SpringCloud Alibaba が誕生し、Nacos もその 1 つであるため、最初に SpringCloudAlibaba の依存関係を導入する必要があります。
<!--引入SpringCloudAlibaba依赖-->
<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>
2 番目のステップ: eureka の元の order-service と user-service の依存関係をコメント アウトし、nacosy の依存関係を追加します
注:サービス プロバイダーとサービス コンシューマによって導入される依存関係は、すべてnacos-discovery 依存関係です。 /span>
<!--nacos客户端依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
ステップ 3:user-service と order-service の application.yml ファイルを変更し、eureka アドレスをコメント アウトし、nacos アドレスを追加します(サーバー名は引き続きオリジナルのもの)
# nacos服务端地址
spring:
cloud:
nacos:
server-addr: localhost:8848
ステップ 4:開始とテスト
3. Nacosサービスの階層型ストレージモデル
①Nacosサービスの階層型ストレージモデル
シナリオ:特定の機能のユーザー サービスに複数のインスタンスがあるとします。以前は、1 つのサービスという 2 層の概念でした。 a>複数のインスタンスが存在する可能性があります。ただし、すべてのインスタンスを 1 つのコンピューター ルームにデプロイするのは安全ではないため、複数のインスタンスが複数のコンピューター ルームにデプロイされます。 Nacos サービスの階層ストレージ モデルではこの概念が導入され、同じコンピュータ ルーム内のインスタンスがクラスタに変わります。したがって、Nacos モデルの場合:最初のレベルはサービス、下位レベルはクラスタです。最後に例です。
サービスのクラスタ間呼び出しの問題
注: サービスを呼び出すときは、できるだけローカル クラスターのサービスを選択してください。クラスター間の呼び出しは遅延が大きいため、ローカル クラスターにアクセスできない場合は、他のクラスターにアクセスしてください。
サービスクラスターのプロパティ
Nacos コンソールに戻って、この時点でクラスターのプロパティを表示します: デフォルト (なしを意味します)
サービスクラスターのプロパティを設定するにはどうすればよいですか? user-service の元の設定に検出属性を追加します。
spring:
cloud:
nacos:
server-addr: localhost:8848 # nacos服务端地址
discovery:
cluster-name: HZ # 配置集群名称,也就是机房位置,例如:HZ,杭州
この時点で、uservice-service は 3 つの実際の列を準備します: UserApplication---8081、UserApplication1---8082、UserApplication2---8083; まず、上記の設定に従って UserApplication---8081 と UserApplication1---8082 を開始し、次に追加します。上記 クラスタ名をSHに変更後、UserApplication2を起動します---8083
クラスター属性を order-service に追加する
spring:
cloud:
nacos:
server-addr: localhost:8848 # nacos服务端地址
discovery:
cluster-name: HZ # 配置集群名称
②NacosRule負荷分散
可能な限りローカル クラスターを使用し、クロスドメイン アクセスを回避する必要があることはすでに分析済みです。そのため、この時点では、3 回の連続したアクセスがすべて SH クラスターではなく HZ クラスターにアクセスするかどうかをテストします。
実行結果: まだラウンドロビン アクセスであり、ローカル アクセスに優先順位はありません。現時点では変更されています 負荷分散 (当初は デフォルトはラウンドロビン スケジューリングです )!
order-serviceロード バランシング IRule を N に設定しますacosRule、このルール はまず、それ自体と同じクラスタ内のサービスを検索します。
user-service:
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则
この時点で、再度 3 回連続してアクセスします。
ローカル クラスタへのアクセスを優先し、ローカル クラスタに基づいて [ランダム] な方法で負荷分散します。
この時点でローカル サービス HZ が停止している場合はどうなりますか?
ローカル サービスが見つかりません。クラスタ間でアクセスされ、正常にアクセスできますが、警告が表示されます。
要約する
① 同じクラスター内のサービス インスタンスのリストに優先順位を付けます。
② ローカル クラスターがプロバイダーを見つけられない場合、他のクラスターでプロバイダーを探し、警告が報告されます。
③利用可能なインスタンスのリストを決定したら、ランダムな負荷分散を使用してインスタンスを選択します。
③重量に応じた負荷分散
実際の展開では、次のシナリオが発生します。
サーバー機器のパフォーマンスは異なります。インスタンスによっては、パフォーマンスの高いマシンに配置されているものもあれば、パフォーマンスの悪いマシンもあります。パフォーマンスの良いマシンがより多くのユーザー リクエストを処理できることを期待しています。 Nacos は重みを提供します。アクセス頻度を制御するように構成します。重みの値は通常 0 ~ 1 の間です。重みが大きいほど、アクセス頻度も高くなります。!
ステップ 1: Nacos コンソールでインスタンスの重み値を設定できます。まず、インスタンスの後ろにある編集ボタンを選択します。
ステップ 2: 重みを 0.1 に設定します。このテストでは、8081 へのアクセス頻度が大幅に減少していることがわかります。
考える: 重みが 0 の場合は何の役に立つでしょうか?
実際、重みが 0 の場合、サーバーにはまったくアクセスされません。バージョンをアップグレードするときに、最初に重みを 0 に設定して他のサーバーにアクセスできます。バージョン アップグレードが完了した後、重みを非常に大きく設定します。値が小さく、極端に言うと少数の顧客でテスト済みですが、テストは問題なく、広範なアップグレード サービスが実施されています。
要約する
①Nacos コンソールはインスタンスの重み値を 0 ~ 1 の間で設定できます。
② 同一クラスタ内の複数のインスタンスの場合、重みが大きいほどアクセス頻度が高くなります。
③重みを 0 に設定すると、まったくアクセスされなくなります。
4. Nacos環境の隔離
Nacos はまず登録センターでありデータ センターであるため、Nacos がデータとサービスを管理する際には、環境隔離という概念があります。
環境分離名前空間
①Nacos のサービス ストレージとデータ ストレージの最外層は名前空間と呼ばれるもので、最外部の分離に使用されます。
② 名前空間内にグループ属性(グループ)があり、同じ名前空間の複数のインスタンスをグループ化することができ、業務関連性の高いものを同じグループに入れることができます。
③グループには、特定のサービスが含まれます。サービスは以下のとおりです。 クラスタ であり、クラスタの下には インスタンス があります。
実際、Nacos コンソールにはデフォルトのパブリック名前空間があり、すべての元のインスタンスはこのグループに配置されます。
要件: order-service を新しい名前空間に配置します。
ステップ 1: Nacos コンソールで名前空間を作成して、異なる環境を分離する
ステップ 2: 新しい名前空間情報を入力します。
ステップ 3: 保存後、この名前空間の ID がコンソールに表示されます。
注: ID を入力する必要はありません。UUID に基づいて自動的に生成できます。
ステップ 4: application.yml ファイルを変更し、namesapce 名前空間を追加する
spring:
cloud:
nacos:
server-addr: localhost:8848 # nacos服务端地址
discovery:
cluster-name: SH # 集群
namespace: e70e8b60-ea7e-40e0-a995-0b714190f7bd # 填写ID ,命名空间
ステップ 5: order-service を再起動した後、コンソールを再度確認します
パブリック名前空間:
開発名前空間:
ステップ 6: この時点で order-service にアクセスします。名前空間が異なるため、user-service は見つかりません。
ブラウザはサービスを見つけることができません:
注: 実際には public には user-service という 3 つのサービスがありますが、dev には order-service があり、異なる名前空間にはアクセスできません ( 異なるクラスタにアクセスできることは以前に学習しましたが、警告が報告される )。
コンソールはエラーを報告します。
要約:
①各名前空間ネームスペースには一意の ID があります。
②サービスの名前空間を設定するときは、名前の代わりに ID を記述します。
③ 異なる名前空間にあるサービスは相互に認識できません。
2: ナコスとエウレカの比較
これまで、Eureka と Nacos という 2 つの登録センターを調査してきましたが、それらを比較して検討してみましょう。
詳細:以前に作成したクラスは、デフォルトでは一時インスタンスです
実行プロセスからエウレカとナコスの類似点と相違点を分析
同じ
① サービス プロバイダーが開始すると、Eureka であっても Nacos であっても、 情報を登録センターに送信し、登録センターこの情報は保存されます。降りてください。
②消費者は必要な場合、登録センターに行き定期的に取得します。実際、 プル アクションは毎回行う必要はありません。サービス利用者は プルした情報をリストにキャッシュします(30 秒ごとに反発);
③コンシューマーがサービス リストを取得した後、 ロード バランサーはリモート コール プロバイダーを選択します;
違う
最初の違い: サービス プロバイダーのヘルス モニタリング、Nacos は次のように分割されます: (これは Eureka と一致しますが、頻度が異なります。nacos は遅くなります)、 一時インスタンスの場合、ハートビート検出が使用されます。。 非一時インスタンスと一時インスタンス。 非一時的なインスタンスの場合、Nacos はハートビートを必要とせず、Nacos は積極的に問い合わせます。 a> 除去されないことがわかりました。 は異常としてマークされ、回復を待っており、 、
2 番目の違い: コンシューマー プル サービス、Eureka はスケジュールされたプルを使用します (30 秒ごと) < /span>、です。Nacos がサービスがダウンしていることを検出すると、すぐにプッシュされます。コンシューマーにプッシュして更新します。間に合うように。 Eureka Nacos はプルを使用しますが、Nacos はプル + プッシュの組み合わせNacos は積極的に変更メッセージをプッシュします、更新が間に合わない;
サービスを Nacos に登録するとき、一時インスタンスとして登録するか、非一時インスタンスとして登録するかを選択できます。これは、次の構成によって設定されます。
spring:
cloud:
nacos:
server-addr: localhost:8848 # nacos服务端地址
discovery:
cluster-name: SH # 集群
namespace: e70e8b60-ea7e-40e0-a995-0b714190f7bd #填写ID,指定命名空间
ephemeral: false #设置为非临时实例
①デフォルトは一時的な実数列ですが、この時点でorder-serviceが閉じられている場合、このサービスは強制終了されます。
② epemeral を false に変更し、非インスタンスに変更し、この時点でサービスを終了します
削除されません。回復を待っています。
要約する
1. ナコスとエウレカの共通点
① サービス登録とサービスプルの両方をサポートします。
② すべてのサポートサービスプロバイダーの健康検査のハートビート方式。
2. ナコスとエウレカの違い
①Nacos は、サーバーがプロバイダーのステータスをアクティブに検出することをサポートします。一時インスタンスはハートビート モードを採用し、非一時インスタンスはアクティブ検出モードを採用します。異常なハートビートのある一時インスタンスは削除されますが、非一時インスタンスは削除されません。エウレカは心拍検出を使用し、異常を直接排除します。
②Nacosは、サービスリストの変更に対するメッセージプッシュモードをサポートしており、プルとプッシュを組み合わせた、よりタイムリーなサービスリストの更新を実現します。 Eureka はデータを取得するだけで、更新が間に合わない。
③Nacos クラスタはデフォルトで AP モードを使用しますが、クラスタ内に非一時インスタンスがある場合は CP モードが使用され、Eureka は AP モードを使用します。
注:AP/CP モードは、分散システムではデータの可用性と一貫性を同時に実現できないことを意味します a>。 P (パーティション トレランス) パーティション フォールト トレランス 、 C (一貫性) 一貫性、A (可用性) 可用性 したがって、可用性と一貫性の間にはトレードオフがあります。その中には