Spring Cloud Alibaba - nacos の紹介

ナコスの簡単な紹介

        nacos は Spring Cloud Alibaba エコシステムの非常に重要なコンポーネントであり、1) 登録および検出センター、2) 構成センターの 2 つの機能があります。

        nacos の紹介を続ける前に、まずキャップ理論という理論を紹介します。分散システムでは、一貫性、可用性、および分割耐性を組み合わせることができません。C、A、P について簡単に説明します。

        1. C (一貫性): 一貫性。同時に同じリクエストのインスタンスは同じ結果を返します。これは強一貫性に属します。つまり、クラスタ環境では、外部から提供されるサービス情報は完全に一貫していますが、効率の観点からは、多少の損失が生じる可能性があります。

        2. A (可用性): 可用性。すべてのインスタンスの読み取りおよび書き込みリクエストは、一定時間内に正しい応答を得ることができます。弱い整合性であり、異なるインスタンスによって取得された情報は、非常に短期間に不整合になる可能性があります。ただし、サービスは利用可能であり、最終データは一貫しています。

        3. P (パーティション トレランス): パーティション フォールト トレランス。ネットワークに異常が発生した場合でも、正常な応答を提供できます。これはマイクロサービス システムで保証される必要があります。

分散サービスでは P を保証する必要があるため、現在は CP と AP の組み合わせになっています。

        nacos には登録センターの機能があり、共通設定センターには zk と eureka も含まれており、それらの違いは次の表に示されています。

構成センター CAP理論 コンソール
ナコス CP/AP 持っている
動物園の飼育員 CP なし
ユーレカ AP 持っている

nacos 起動時のデフォルトは AP モードですが、以下のコマンドで Nacos を CP モードに変更できます 私たちがよく使うマイクロサービスでは AP モードを選択しており、現時点でのインスタンスはすべて一時インスタンスです。一時インスタンスと永続インスタンスの最も顕著な違いは、ヘルスチェックでサービスに問題が見つかった場合、永続インスタンスは異常としてマークされるのに対し、一時インスタンスは直接削除されることです。

curl -X PUT 'IP:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'

2つのナコスの基本的な使い方

1 ナコスサーバー

        次に nacos の使い方を紹介します Nacos は大きく nacos サーバーと nacos クライアントの 2 つの部分に分かれており、1 つ目は nacos サーバーです この部分は何も変更する必要はなく、直接サービスを起動するだけです。方法は 2 つあり、1 つはパッケージ化されたサービスを直接ダウンロードしてコマンドで直接実行する方法、もう 1 つは nacos のソース コードをダウンロードして開始する方法です (nacos は通常の Spring Boot プロジェクトです)。

1. ダイレクトダウンロードパッケージサービス

        最初のステップは、nacos 公式 Web サイトに移動して、環境に対応するサーバー プロジェクトをダウンロードすることです。ダウンロード アドレスは: Releases alibaba/nacos GitHubですが、注意すべき点は、現在 nacos 公式 Web サイト ( Nacos Quick Start )にあることです。 、推奨される nacos バージョンは 2.0 .3 です。

 環境に応じて異なる圧縮ファイルをダウンロードし、ダウンロード後に解凍し、bin ディレクトリに移動します。

 さまざまなサーバー環境に応じて、実行するさまざまなスクリプトを選択します。

1) Linux:

sh startup.sh -m standalone

2)窓

startup.cmd -m standalone

接尾辞のスタンドアロンは、単一のインスタンスで開始することを意味することに注意してください。

2. ソースモードで開始します

        Git ソース コード アドレス: Nacos ソース コード アドレス、git プロジェクトをダウンロードし、アイデア (または他の開発ツール) をインポートしてから開始します。com.alibaba.nacos.consistency.entity パッケージの下のクラスが表示されることに注意してください。プロジェクトのコンパイル プロセス中に見つからない場合は、この時点でコンソールで mvn COMPILE コマンドを実行し、コンパイルが完了するのを待ってからプロジェクトを開始します。

D:\nacos>mvn compile

スタートアップ クラスは、ソース コードのコンソール モジュールの下にあります。

 プロジェクトを開始した後、コンソールを観察すると、アクセス アドレスとプロジェクトの起動情報が次のように出力されます。

上記の方法で起動後、コンソールに表示されるアクセスアドレスにアクセスすると、以下のページが表示されます。

nacos のデフォルトのユーザー名とパスワードは、ログイン用の nacos/nacos です。

2 ナコスクライアント

        nacos サーバーが正常に起動したら、次のステップはクライアントからのアクセスで、nacos の登録/検出センターと構成センターを導入するために使用されます。プロジェクトは共通の Spring Boot プロジェクトを使用します。

1. 登録/検出センター

まず、次の依存関係をプロジェクトに導入する必要があります。

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

次に、プロジェクトの起動クラスにアノテーションを追加します。

@SpringBootApplication
// nacos使用需要使用的注解
@EnableDiscoveryClient
public class SelfNacos9001Application {

    public static void main(String[] args) {
        SpringApplication.run(SelfNacos9001Application.class, args);
    }

}

次のステップでは、対応する構成情報を構成ファイルに追加し、nacos サーバーの関連アドレスを構成します。

spring:
  application:
    name: nacos-provider
  cloud:
    nacos:
      discovery:
        # 注册中心地址
        server-addr: 172.30.10.103:8848

次に、プロジェクトを開始し、nacos サーバーのコンソールを開くと、登録ページに登録情報が表示されます。

複数のインスタンスを起動することができ、それに関連してインスタンスの数が変化することがわかります。nacos では、同じサービスが複数のインスタンスを登録できます。これは、サービスに複数のノードがある可能性があることを意味します。では、サービス呼び出しが発生したときに、nacos クライアントはどのサービスを呼び出すかをどのように確認するのでしょうか? 答えはリボンであり、nacos クライアントは自動的にリボンを継承しています (負荷分散)。

2. 構成センター 

まず、次の依存関係を導入する必要があります

        <dependency>
            <groupId> com.alibaba.cloud </groupId>
            <artifactId> spring-cloud-starter-alibaba-nacos-config </artifactId>
        </dependency>

次に、構成ファイルに次の構成を追加します

spring:
  profiles:
    # 当前环境,在真实项目中,一般分为多个项目,dev为开发环境
    active: dev
  application:
    # 项目名称
    name: nacos-provider
  cloud:
    nacos:
      config:
        # 注册中心地址
        server-addr: 172.30.10.103:8848
        # 配置文件后缀,即配置文件格式
        file-extension: yaml
        # 命名空间,在后续nacos配置中会出现该参数是如何获取的
        namespace: 4b57e563-2039-42f4-86b1-9c4c7cf58bfc

検証コードを書きます:

@RestController
@RequestMapping("/test")
// 动态刷新配置
@RefreshScope
public class NacosConfigTestController {

    @Value("${nacos.config}")
    private String configInfo;

    public String test(){
        return configInfo;
    }
}

        シンプルなクライアントが開発されているので、関連する設定を nacos サーバー上で実行する必要があります。最初は、上記のコードで言及されている名前空間です。実際の開発では複数の環境が存在するため、通常は nacos 名前空間が使用されます。 (グループ化によって実装することもできますが、通常は推奨されません) 次に、以下の図に示すように、最初に名前空間を追加します。

         追加後、次のように、名前空間列で新しく追加された名前空間の ID をクエリできます (ID がカスタマイズされている場合はカスタマイズの対象となり、それ以外の場合は自動的に生成され、ここでは自動生成方法が使用されます)。図の赤枠内の内容が名前空間ノードに設定されている内容です

       次のステップでは、dev 名前空間に構成ファイルを作成します。構成ファイルの名前は、上記の構成情報に従って命名されます。ルールは、{spring.application.name}-{spring.profiles.active}.{spring です。 .config.file-extension} の場合、上記の構成に従っている場合、構成ファイルの名前は nacos-provider-dev.yaml になります。

 

 その後、プロジェクトを開始して検証できます。

3 つの nacos クラスター

        nacos 設定の関連情報はどこに保存されますか? nacos サービスを再起動すると、構成した情報がまだ存在していることがわかります。これは、nacos が情報をメモリに保存しないことを証明します。デフォルトでは、nacos はこれらのデータをその組み込みデータベースに永続化し、その組み込みデータベースは derby データベースです。

        したがって、nacos クラスターをデプロイするときに、各 nacos ノードがまだ独自の組み込みデータベースを使用している場合は、データの同期という問題に直面することになります。実際、nacos は外部データベースをサポートしており、外部データベースを使用すると、異なるデータベース間のデータ同期の問題を解決できます。外部データベースの使用方法を見てみましょう。

        最初のステップは、解凍した nacos フォルダーに移動し、conf フォルダーに移動することです。その中には、application.properties と nacos-mysql.sql という 2 つの重要なファイルがあります。

         2 番目のステップは、準備された mysql データベースで nacos-mysql.sql スクリプト ファイルを実行することです。ただし、スクリプト ファイルにはデータベースを作成するためのスクリプトがないことに注意してください。これは手動で作成する必要があり、その後、データベース内の上記のスクリプト ファイル。

        3 番目の手順では、application.properties ファイルを変更し、構成ファイル内で以下の図に対応する場所を見つけて、コメントを開きます。

         上記の 3 つの手順を完了した後、nacos プロジェクトを開始すると、nacos の関連構成情報が指定した mysql データベースに保存されます。nacos クラスターをデプロイすると、このクラスターのデータを mysql クラスターに保存できるため、データ同期の問題は解決され、nacos のクラスター モデルは次の図のようになります。

        

         外部リクエストは slb プロキシまたは nginx クラスターにアクセスし、slb/nginx で nacos クラスターの負荷を構成します。nacos クラスターはマスター/スレーブ構造ではないことに注意してください。その後、nacos ノードは永続データを に保存します。 mysql クラスターに接続し、各 naco 間で通信します。 ノード間のデータ同期が完了します。

        nacos のクラスター構成は非常に簡単です。または、conf フォルダーに入り、cluster.conf.example ファイルをコピーし、cluster.conf という名前を付けて、以下に示すように変更します。

nacos クラスターは検証のために Linux システムにデプロイされることに注意してください。検証中に nacos ノードがサーバーにデプロイされる場合は、application.properties 構成ファイル内のポート番号を変更する必要があります。また、注意する必要があります。 nacos 起動時は grpc 通信用に port+1000 と port+1001 を占有しますので、ポートの設定値に注意してください。

おすすめ

転載: blog.csdn.net/weixin_38612401/article/details/125292657