-
Nacos とは Nacos(Dynamic Naming and Configuration Service)は、Alibaba が開発・保守を行うオープンソースのミドルウェアで、クラウドネイティブアプリケーション構築を支援するサービスディスカバリ、設定管理、サービス運用管理のためのプラットフォームです。Spring Cloud、Dubbo、Kubernetes、Apache ServiceComb など複数のエコシステムと統合可能で、REST API、gRPC、Java SDK といった多様なインターフェースを提供しており、開発者は柔軟かつ効率的に Nacos と連携できます。
-
導入と構成
2.1 インストール準備
公式サイトから最新バージョンをダウンロードし、展開後、conf/application.properties 内でポート番号やデプロイモードの設定を変更できます。
2.2 運用モードの選択
スタンドアローンモード 1つのプロセスで設定およびサービスディスカバリ機能を統合し、開発・評価用環境向け。単一ノードで起動し軽量に動作します。 クラスタモード 複数ノードで Nacos を構成し、Raft または Mediterranean 協調プロトコルでデータ同期を実現。障害時の可用性と整合性を確保するため、本番環境に適しています。 マルチクラスタ構成 地理的に分散したリージョンごとに独立したクラスタを構築可能。各クラスタは独自の名前空間と設定値を持ち、必要に応じて同期ミドルウェアで連携できます。
2.3 起動手順
bin/ ディレクトリで以下のコマンドを実行します:
# スタンドアローンモードで起動
./startup.sh -m standalone
起動後はデフォルトポート(8848)で UI が提供され、認証情報は初期状態で nacos/nacos です。
- 主要機能と応用例
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、健康状態など)に従って対象ノードを選択することが可能になります。