Nacosの概要と実装요 phoenix

  1. Nacos とは Nacos(Dynamic Naming and Configuration Service)は、Alibaba が開発・保守を行うオープンソースのミドルウェアで、クラウドネイティブアプリケーション構築を支援するサービスディスカバリ、設定管理、サービス運用管理のためのプラットフォームです。Spring Cloud、Dubbo、Kubernetes、Apache ServiceComb など複数のエコシステムと統合可能で、REST API、gRPC、Java SDK といった多様なインターフェースを提供しており、開発者は柔軟かつ効率的に Nacos と連携できます。

  2. 導入と構成

2.1 インストール準備 公式サイトから最新バージョンをダウンロードし、展開後、conf/application.properties 内でポート番号やデプロイモードの設定を変更できます。

2.2 運用モードの選択

スタンドアローンモード   1つのプロセスで設定およびサービスディスカバリ機能を統合し、開発・評価用環境向け。単一ノードで起動し軽量に動作します。 クラスタモード   複数ノードで Nacos を構成し、Raft または Mediterranean 協調プロトコルでデータ同期を実現。障害時の可用性と整合性を確保するため、本番環境に適しています。 マルチクラスタ構成   地理的に分散したリージョンごとに独立したクラスタを構築可能。各クラスタは独自の名前空間と設定値を持ち、必要に応じて同期ミドルウェアで連携できます。

2.3 起動手順 bin/ ディレクトリで以下のコマンドを実行します:

# スタンドアローンモードで起動
./startup.sh -m standalone

起動後はデフォルトポート(8848)で UI が提供され、認証情報は初期状態で nacos/nacos です。

  1. 主要機能と応用例

3.1 サブシステム連携

サービス登録・検出   アプリケーションが Nacos に自身のエンドポイント情報を登録し、他サービスが動的にサービスインスタンスを取得できます。 動的設定管理   設定値を中央集権的に管理でき、変更内容がリアルタイムでクライアントに反映されます。Spring の @RefreshScope を指定することで、フィールド値が自動再読込されます。 ルーティング・負荷分散   クライアント側で Nacos SDK 経由のルーティングルールを制御するほか、Nginx などのリバースプロキシで前端負荷分散を実装可能です。

3.2 クライアント側の設定例(Spring Boot) bootstrap.yml に以下のように定義することで、Nacos との接続設定を初期化時に読み込みます:

spring:
  application:
    name: user-service
  cloud:
    nacos:
      config:
        server-addr: 10.0.0.50:8848
        namespace: dev-ns-id
        group: PROD_GROUP
        file-extension: yaml
        refresh-enabled: true
      discovery:
        server-addr: 10.0.0.50:8848
        namespace: dev-ns-id
        register-enabled: true
        service: ${spring.application.name}

設定値の自動更新を有効にするクラス定義例:

@RefreshScope
@Component
public class ClientConfigLoader {
    @Value("${db.conn.endpoint:localhost:3306}")
    private String dbEndpoint;

    public String resolveEndpoint() {
        return "jdbc:mysql://" + dbEndpoint + "/app_db";
    }
}

3.3 ロードバランシングの実装方法 クライアント負荷分散の代表的な実装として、Nginx を用いたリバースプロキシ方式があります:

upstream nacos-gateway {
    server 10.1.21.3:8848;
    server 10.1.21.4:8848;
    server 10.1.21.5:8848;
}

server {
    listen 80;
    server_name nacos.example.com;

    location /nacos/ {
        proxy_pass http://nacos-gateway;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

クライアントアプリケーション側では、 Ribbon コンポーネントで Nacos 固有のルーティング戦略を適用できます:

user-service:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule

これらの設定によって、サービス呼び出し元が Nacos 上に登録されたインスタンスから、特定のルール(ロケーション、Weight、健康状態など)に従って対象ノードを選択することが可能になります。

タグ: Nacos Spring-Cloud dynamic-configuration service-discovery cluster-management

6月28日 17:19 投稿