Nacos 服务注册中心探秘(一)

Stella981
• 阅读 536

Nacos 服务注册中心探秘(一)

手机用户请横屏获取最佳阅读体验,REFERENCES中是本文参考的链接,如需要链接和更多资源,可以关注其他博客发布地址。

平台

地址

CSDN

https://blog.csdn.net/sinat\_28690417

简书

https://www.jianshu.com/u/3032cc862300

个人博客

http://xiazhaoyang.tech/

介绍

什么是Nacos ?

Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

Nacos 能做什么?

  • 动态配置服务:支持以中心化、外部化和动态化的方式管理所有环境的配置。动态配置消除了配置变更时重新部署应用和服务的需要。配置中心化管理让实现无状态服务更简单,也让按需弹性扩展服务更容易。

  • 服务发现及管理:支持DNS-Based和RPC-Based(Dubbo、gRPC)模式的服务发现,同时提供实时健康检查,以防止将请求发往不健康的主机或服务实例。借助Nacos,可以更容易地为服务实现断路器。

  • 动态DNS服务:通过支持权重路由,轻松实现中间层负载均衡、更灵活的路由策略、流量控制及简单数据中心内网的简单DNS解析服务。更加容易地实现以DNS协议为基础的服务发现,以消除耦合到厂商私有服务发现API上的风险。

Nacos的特性一览

  • 易于使用

  • 动态配置管理、服务发现和动态的一站式解决方案

  • 20多种开箱即用的以服务为中心的架构特性

  • 基本符合生产要求的轻量级易用控制台

  • 更适应云架构

  • 无缝支持Kubernetes和Spring Cloud

  • 在主流公共云上更容易部署和运行(例如阿里云和AWS)

  • 多租户和多环境支持

  • 生产等级

  • 脱胎于历经阿里巴巴10年生产验证的内部产品

  • 支持具有数百万服务的大规模场景

  • 具备企业级SLA的开源产品

  • 丰富的应用场景

  • 支持限流、大促销预案和异地多活

  • 直接支持或稍作扩展即可支持大量有用的互联网应用场景

  • 流量调度和服务治理

Nacos概念

  • 地域(Region):物理的数据中心,资源创建成功后不能更换

  • 可用区(Available Zone):同一地域内,电力和网络互相独立的物理区域。同一可用区内,实例的网络延迟较低。

  • 接入点(Endpoint):地域的某个服务的入口域名

  • 命名空间(Namespace):用于进行租户粒度隔离。不同的命名空间下,可以存在相同的Group或Data ID的配置。

  • 配置(Configuration):从代码中分离出来独立管理的变量、需要变更的参数等

  • 配置管理(Configuration Management):系统配置的编辑、存储、分发、变更管理、历史版本管理、变更审计等所有与配置相关的活动。

  • 配置项(Configuration Item):一个具体的可配置的参数与其值域,通常以 param-key=param-value 的形式存在。

  • 配置集(Configuration Set):一组相关或者不相关的配置项的集合。在系统中,一个配置文件通常就是一个配置集,包含了系统各个方面的配置。

  • 配置集ID(Data ID):某个配置集的ID,是组织划分配置的维度之一,通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识,通常采用类 Java包的命名规则保证全局唯一性(此命名规则非强制)。

  • 配置分组(Group):一组配置集,是组织配置的维度之一,通过一个有意义的字符串对配置集进行分组,从而区分 Data ID 相同的配置集。创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用DEFAULT_GROUP。

  • 配置快照(Configuration Snapshot):Nacos 的客户端 SDK 会在本地生成配置的快照。当客户端无法连接到 Nacos Server 时,可以使用配置快照显示系统的整体容灾能力。

  • 服务(Service):通过预定义接口网络访问的提供给客户端的软件功能。

  • 服务名(Service Name):服务提供的标识,通过该标识可以唯一确定其指代的服务。

  • 服务注册中心(Service Registry):存储服务实例和服务负载均衡策略的数据库。
    服务元数据(Service Metadata):服务元数据是指包括服务端点(endpoints)、服务标签、服务版本号、服务实例权重、路由规则、安全策略等描述服务的数据

  • 服务提供方(Service Provider):是指提供可复用和可调用服务的应用方

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

  • 服务发现(Service Discovery):在计算机网络上,对服务下的实例的地址和元数据进行探测,并以预先定义的接口提供给客户端进行查询。

  • 服务分组(Service Group):不同的服务可以归类到同一分组。

  • 名字服务(Naming Service):提供分布式系统中所有对象(Object)、实体(Entity)的“名字”到关联的元数据之间的映射管理服务

  • 配置服务(Configuration Service):在服务或者应用运行过程中,提供动态配置或者元数据以及配置管理的服务提供者。

  • 元数据(Metadata):Nacos数据(如配置和服务)描述信息,如服务版本、权重、容灾策略、负载均衡策略、鉴权配置、各种自定义标签 (label),从作用范围来看,分为服务级别的元信息、集群的元信息及实例的元信息。

  • 应用(Application):用于标识服务提供方的服务的属性。

  • 虚拟集群(Virtual Cluster):同一个服务下的所有服务实例组成一个默认集群,集群可以被进一步按需划分,划分的单位可以是虚拟集群。

  • 实例(Instance):提供一个或多个服务的具有可访问网络地址(IP:Port)的进程。

  • 权重(Weight):实例级别的配置,权重为浮点数,权重越大,分配给该实例的流量越大。

  • 健康检查(Health Check):以指定方式检查服务下挂载的实例的健康度,从而确认该实例是否能够提供服务。根据检查结果,实例会被判断是否健康,对服务发起解析请求时,不健康的实例不会返回给客户端。

  • 健康保护阈值(Protect Threshold):为防止因过多实例不健康导致流量全部流向健康的实例,继而造成流量压力把健康的实例压垮并形成雪崩效应,应将健康保护阈值定义未一个0~1之间的浮点数,当域名健康实例占总服务实例的比例小于该值时,无论实例是否健康,都会将这个实例返回给客户端,这样做虽然损失了一部分流量,但是保证了集群的剩余健康实例能够正常工作。

安装

参考官网引导

快速上手 >>> Here !

新版本有登录拦截界面,登录账户和密码为:nacos/nacos

界面访问路径:http://127.0.0.1:8848/nacos

启动

Linux/Unix/Mac

启动命令(standalone代表着单机模式运行,非集群模式):

sh startup.sh -m standalone

Nacos 服务注册中心探秘(一)

服务注册、发现和配置管理

服务注册&服务发现

Nacos 服务注册中心探秘(一)

Nacos 服务注册中心探秘(一)

发布配置&获取配置

Nacos 服务注册中心探秘(一)
Nacos 服务注册中心探秘(一)

Nacos 服务注册中心探秘(一)

Spring Boot 开发

项目搭建

  • 依赖

    ```groovy
    buildscript {
    repositories {

      maven { url = 'https://maven.aliyun.com/repository/jcenter' }  maven { url = "https://plugins.gradle.org/m2/" }  maven { url = "http://maven.aliyun.com/nexus/content/groups/public/" }  jcenter()
    

    }
    dependencies {

      classpath libs["spring-boot-gradle-plugin"]
    

    }
    }

apply plugin: “idea”
apply plugin: “java”
apply plugin: “io.spring.dependency-management”
apply plugin: “org.springframework.boot”

group = “com.example”
version = “1.0.0-SNAPSHOT”
sourceCompatibility = 1.8

dependencies {

annotationProcessor libs['lombok']compileOnly libs['lombok']testAnnotationProcessor libs['lombok']testCompileOnly libs['lombok']compile "org.springframework.boot:spring-boot-starter-web"compile "org.springframework.boot:spring-boot-starter-actuator"compile libs["nacos-config-spring-boot-starter"]compile libs["nacos-config-spring-boot-actuator"]testCompile "org.springframework.boot:spring-boot-starter-test"

}

`libs中版本信息````json//...ver.nacos = [        nacos_config_spring_boot_starter:"0.2.1"]//...libs{//Nacos"nacos-config-spring-boot-starter" : "com.alibaba.boot:nacos-config-spring-boot-starter:$ver.nacos.nacos_config_spring_boot_starter","nacos-config-spring-boot-actuator" : "com.alibaba.boot:nacos-config-spring-boot-actuator:$ver.nacos.nacos_config_spring_boot_starter"    }
  • 项目启动类

CapsuleNacosConfigApplication

package com.example.nacos;import com.alibaba.nacos.spring.context.annotation.config.NacosPropertySource;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;/** * Document: https://nacos.io/zh-cn/docs/quick-start-spring-boot.html * <p> * Nacos 控制台添加配置: * <p> * Data ID:nacos.cfg.dataId * <p> * Group:test * <p> * 配置内容:useLocalCache=true */@SpringBootApplication//此处需要注意:groupId默认是DEFAULT_GROUP,官网教程用的是默认分组名,如果自定义分组的话此处不配置估计会踩坑哦!@NacosPropertySource(dataId = "nacos.cfg.dataId",groupId = "test",autoRefreshed = true)public class CapsuleNacosConfigApplication {    public static void main(String[] args) {        SpringApplication.run(CapsuleNacosConfigApplication.class, args);    }}

NacosConfigController

/* * @ProjectName: 编程学习 * @Copyright:   2019 HangZhou xiazhaoyang Dev, Ltd. All Right Reserved. * @address:     http://xiazhaoyang.tech * @date:        2019/2/28 22:02 * @email:       xiazhaoyang@live.com * @description: 本内容仅限于编程技术学习使用,转发请注明出处. */package com.example.nacos.controller;import com.alibaba.nacos.api.config.annotation.NacosValue;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import static org.springframework.web.bind.annotation.RequestMethod.GET;/** * <p> * * </p> * * @author xiazhaoyang * @version v1.0.0 * @date 2019/2/28 22:02 * @modificationHistory=========================逻辑或功能性重大变更记录 * @modify By: {修改人} 2019/2/28 * @modify reason: {方法名}:{原因} * ... */@RestController@RequestMapping("/configService")public class NacosConfigController {    @NacosValue(value = "${useLocalCache:false}", autoRefreshed = true)    private boolean useLocalCache;    @RequestMapping(value = "/get", method = GET)    public boolean get() {        return useLocalCache;    }}

yaml

nacos:  config:    server-addr: 127.0.0.1:8848server:  servlet:    context-path: /capsule-nacos-config  port: 8080

除此之外还可以配置:

# 在命名空间详情处可以获取到 endpoint 和 namespace 的值nacos.config.endpoint=${endpoint}nacos.config.namespace=${namespace}# 推荐使用 RAM 账户的 accessKey 和 secretKeynacos.config.access-key=${accessKey}nacos.config.secret-key=${secretKey}

配置信息获取测试

  • 获取nacos配置参数:
curl http://localhost:8080/capsule-nacos-config/configService/getfalse

Nacos 服务注册中心探秘(一)

Nacos 服务注册中心探秘(一)

REFRENCES


更多

Nacos 服务注册中心探秘(一)

扫码关注或搜索架构探险之道获取最新文章,不积跬步无以至千里,坚持每周一更,坚持技术分享^_^ !

===

本文分享自微信公众号 - 架构探险之道(zacsnz1314)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
捉虫大师 捉虫大师
2年前
我在组内的Nacos分享
本文已收录https://github.com/lkxiaolou/lkxiaolou欢迎star。Nacos简介Nacos:NamingandConfigurationService,可打包部署配置中心和注册中心,也可独立部署其中之一,配置中心、控制台依赖mysql,由阿里巴巴2018年8月开源,github19.1kstar(截止20
捉虫大师 捉虫大师
2年前
从nacos客户端的TIME_WAIT说起
本文已收录https://github.com/lkxiaolou/lkxiaolou欢迎star。问题起因前段时间调研nacos,用来代替zookeeper当作dubbo的注册中心,使用的是nacos的1.1.4版本。还用了nacosSync,一款nacos提供的迁移工具,可将常见的注册中心上的服务同步到nacos上。这玩意很不好用,至少不是生产级别
捉虫大师 捉虫大师
2年前
Nacos注册中心之概要设计
前言在之前的文章中分析了Nacos配置中心,配置中心的核心是配置的创建、读取、推送。注册中心的核心比配置中心多一个服务探活模块,他俩的相似度非常高,甚至阿里内部的注册中心就叫ConfigServer。Nacos注册中心打算分成几个模块来分析,本文重点在于概要设计,基于2.0.0版本。环境搭建用Nacos的源码来搭建源码阅读和调试环境,可参考Nacos调试
Stella981 Stella981
2年前
Nacos跨服务器调用服务报错
利用gateway做springcloud微服务网关路由服务时出现报错情况,发现是和网关不在一个服务器的服务无法使用Nacos服务注册的IPNacos注册中心是:https://github.com/alibaba/nacos各个服务通过Nacos客户端将服务信息注册到Nacos上当Nacos服务注册的IP默认选择出问题时,可以通
Stella981 Stella981
2年前
Nacos配置中心动态获取数组配置
有的时候我们需要动态获取一系列的配置项,假设我们在nacos配置中心的配置如下,nacos配置中心的其他设置请参考Nacos搭建流程(https://my.oschina.net/u/3768341/blog/3138297)skill:name:爆炸冲刺在SpringCloud代
Stella981 Stella981
2年前
Nacos作为注册中心和配置中心,爱不释手的感觉
在使用SpringCloud做分布式微服务架构时,注册中心是必不可少的一个组件。目前可以用的主要有:Eureka、Consul、Zookeeper。今天,我们就来说一下Alibaba的Nacos怎么样?下载与安装下载地址https://github.com/alibaba/nacos/releases安装:
Stella981 Stella981
2年前
Spring Cloud Alibaba系列(二)nacos作为服务配置中心
SpringCloudAlibaba系列(二)nacos作为服务配置中心Nacos提供用于存储配置和其他元数据的key/value存储,为分布式系统中的外部化配置提供服务器端和客户端支持。使用SpringCloudAlibabaNacosConfig,您可以在NacosServer集中管理你SpringCloud应用的外部
Stella981 Stella981
2年前
Spring Cloud Alibaba系列之Nacos服务注册与发现
SpringCloudAlibaba系列之Nacos服务注册与发现1、前言简介服务注册与发现是微服务架构体系中最关键的组件之一。SpringCloudAlibabaNacosDiscovery组件提供了服务自动注册到Nacos服务端的功能,并且能够动态感知和刷新某个服务实例的服务列表。除此之外,NacosDiscove
Stella981 Stella981
2年前
Spring Cloud Alibaba Nacos 服务配置中心和注册中心
学习在SpringCloud中使用Nacos实现服务配置中心和注册中心,类似SpringCloudConfig和SpringCloudNetflixEureka提供的功能。1概述SpringCloudAlibaba是阿里巴巴提供的一套微服务开发一站式解决方案。主要提供的功能:分布式配置中心
Stella981 Stella981
2年前
Docker下的Nacos环境开发
本文是《Docker下,两分钟极速体验Nacos》(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fblog.csdn.net%2Fboling_cavalry%2Farticle%2Fdetails%2F97617353)的续篇,前文我们极速体验了Nacos注册中心、服务提供者、服务消