詳細なマイクロサービス-Nacosコアコンセプトとサービスディスカバリプラクティス

一緒に書く習慣を身につけましょう!「ナゲッツデイリーニュープラン・4月アップデートチャレンジ」に参加して8日目です。クリックしてイベントの詳細をご覧ください

マイクロサービスシリーズの記事ディレクトリ


序文

このシリーズでは、マイクロサービスSpringシステムの各フレームワークの基本的な使用法と基本的な原則について詳しく説明します。前回の記事では、Nacosの基本概念とNacosサーバーの構築について紹介しました。このセクションでは、Nacosのコア概念と、サービス検出を実現するためのクライアントの機能について学習します。


Nacosサービスディスカバリのコアコンセプト

Nacosアーキテクチャ図Nacos Architecture.png

サービスサービスとは、ソフトウェア機能または一連の機能(特定の情報の取得や一連の操作の実行など)を指し、その目的は、さまざまな目的(クロスプロセスネットワークなど)でさまざまなクライアントによって再利用されます。電話)

サービスレジストリサービスレジストリは、サービス、そのインスタンス、およびメタデータのデータベースです。内部的にはMap(namespace, Map(group::serviceName, Service))、サービスインスタンスは起動時にサービスレジストリに登録され、シャットダウン時に登録解除されます。サービスとルーターのクライアントは、サービスレジストリにクエリを実行して、サービスの利用可能なインスタンスを見つけます。サービスレジストリは、サービスインスタンスのヘルスチェックAPIを呼び出して、リクエストを処理できることを確認する場合があります。

サービスメタデータサービスメタデータとは、サービスエンドポイント、サービスラベル、サービスバージョン番号、サービスインスタンスの重み、ルーティングルール、セキュリティポリシーなどのサービスを説明するデータを指します。

サービスプロバイダーとは、再利用可能で呼び出し可能なサービスを提供するアプリケーション側を指します

服务消费方 (Service Consumer) 是指会发起对某个服务调用的应用方

名字服务 (Naming Service) 提供分布式系统中所有对象(Object)、实体(Entity)的“名字”到关联的元数据之间的映射管理服务,例如 ServiceName -> Endpoints Info, Distributed Lock Name -> Lock Owner/Status Info, DNS Domain Name -> IP List, 服务发现和 DNS 就是名字服务的2大场景


Nacos 数据模型

Nacos 数据模型 Key 有三部分组成,Namespace默认是空串,公共命名空间(public),分组默认是 DEFAULT_GROUP

详见 com.alibaba.cloud.nacos.NacosConfigProperties

/**
 * namespace, separation configuration of different environments.
 */
	private String namespace;
/**
* nacos config group, group is config data meta info.
 */
	private String group = "DEFAULT_GROUP";
复制代码
spring:
  application:
    name: AppName
  cloud:
    nacos:
      config:
        server-addr: nacos:8848
        namespace: namespaceId # 命名空间id
        group: GroupName # 	分组名称 默认为DEFAULT_GROUP
      discovery:
        server-addr: nacos:8848
复制代码

Nacos 命名空间界面,支持新增,删除,编辑等操作

Nacos namespace.png

Nacos 数据模型 Nacosデータmodel.jpeg

Nacos 服务领域模型

Nacos支持服务在所有场景下的数据存储和管理,Nacos 的服务领域模型为 服务-集群-实例的三层模型。

Nacosサービスドメインmodel.jpeg

Nacos 数据逻辑隔离模型

⼀个用户账号可以新建多个命名空间,每个命名空间对应⼀个客户端实例,这个命名空间对应的注册中心物理集群是可以根据规则进行路由的 实际项目生产中可根据Namespace进行环境隔离(master/develop/test/hotfix),应用可以根据不同的分组进行切换配置,满足实际场景的服务隔离需求

Nacosデータロジック分離model.png

Nacos 服务发现原理

Nacosサービス登録発見principle.png Nacos服务发现核心概念:

  • 服务注册:Nacos Client 启动的时候会发送REST 请求(1.0默认为http,2.0为grpc)向Nacos Server注册服务并提供元数据信息,包含服务的别名、host、端口等信息。NacosServer接收到Client注册请求会讲实例信息存储到自身的注册表(底层为Map)中
  • 服务心跳:Nacos Client启动之后会启动一个定时任务每隔一段时间进行心跳通知Nacos Server(默认5s发送一次心跳),防止自身服务被剔除
  • 服务发现:Nacos Client在进行服务调用时会向Nacos Server发起REST请求拉取服务列表,并缓存到本地,为防止缓存与实际服务数据不一致,Nacos Client会启动一个定时任务从Nacos Server拉取最新的注册表信息更新到本地缓存
  • 服务健康检查:Nacos Server会启动一个定时任务检测Nacos Client的健康状态,若15s内没有收到客户端的心跳事件,会将实例的health属性设置为false,如果实例超过30s没有收到心跳事件,会从Nacos Server注册表中剔除该实例

实例的health属性为Nacos Client 健康状态,默认为true

上述的机制会在后续的源码解析详细讲解

Nacos 服务发现实战

1.引入Maven

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
复制代码

2.启动类加上注解@EnableDiscoveryClient

@SpringBootApplication
@EnableFeignClients({ "com.jany" })
@EnableDiscoveryClient
public class NacosClientApplication {
    public static void main(String[] args) {
        SpringApplication.run(NacosClientApplication.class, args);
    }

}

复制代码

3.配置文件bootstrap.yml

根据实际情况更改 nacos 为Nacos Server地址 username默认为nacos,密码默认为nacos

spring:
  application:
    name: nacos-client-demo
  cloud:
    nacos:
      discovery:
        server-addr: nacos:8848
        username: nacos
        password: nacos
复制代码

4.启动之后可在Nacos控制台看到注册上来的服务

実際のcombat.pngを発見するためのNacos登録

总结

この記事では、主にNacosのコアコンセプトとサービスディスカバリの実際の戦闘について紹介します。今後もサポートを増やしていただきたいと思います。今後、Nacosの内容について詳しく説明します。

おすすめ

転載: juejin.im/post/7085549819183235086