三分钟带你了解Nacos:架构及部署

Posted Java小叮当

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三分钟带你了解Nacos:架构及部署相关的知识,希望对你有一定的参考价值。

前言

一、什么是Nacos?

官方描述:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

Nacos致力于帮助您发现、配置和管理微服务。Nacos提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

愿景:Nacos通过提供简单易用的动态服务发现、服务配置、服务共享与管理等服务基础设施,帮助用户在云原生时代,在私有云、混合云或者公有云等所有云环境中,更好的构建、交付、管理自己的微服务平台,更快的复用和组合业务服务,更快的交付商业创新的价值,从而为用户赢得市场。

二、功能有哪些?

动态配置服务

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

服务发现及管理

动态服务发现对以服务为中心的(例如微服务和云原生)应用架构方式非常关键。Nacos支持DNS-Based和RPC-Based(Dubbo、gRPC)模式的服务发现。Nacos也提供实时健康检查,以防止将请求发往不健康的主机或服务实例。借助Nacos,您可以更容易地为您的服务实现断路器。

动态DNS服务

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

三、特性有哪些?

易于使用

动态配置管理、服务发现和动态的一站式解决方案20多种开箱即用的以服务为中心的架构特性基本符合生产要求的轻量级

更适应云架构

无缝支持Kubernetes和Spring Cloud在主流公共云上更容易部署和运行(例如阿里云和AWS)多租户和多环境支持

生产等级

脱胎于历经阿里巴巴10年生产验证的内部产品支持具有数百万服务的大规模场景具备企业级SLA的开源产品

丰富的应用场景

支持限流、大促销预案和异地多活直接支持或稍作扩展即可支持大量有用的互联网应用场景流量调度和服务治理

四、Nacos地图

image.png

特性大图:要从功能特性,非功能特性,全面介绍我们要解的问题域的特性诉求

架构大图:通过清晰架构,让您快速进入Nacos世界

业务大图:利用当前特性可以支持的业务场景,及其最佳实践

生态大图:系统梳理Nacos和主流技术生态的关系

优势大图:展示Nacos核心竞争力

战略大图:要从战略到战术层面讲Nacos的宏观优势

五、Nacos生态图

image.png
如Nacos全景图所示,Nacos无缝支持一些主流的开源生态,例如

Spring Cloud

Apache Dubbo and Dubbo Mesh

Kubernetes and CNCF。

使用Nacos简化服务发现、配置管理、服务治理及管理的解决方案,让微服务的发现、管理、共享、组合更加容易。

关于如何在这些生态中使用 Nacos,请参考官方文档:什么是Nacos

六、Nacos概念

可以通过如下官方文档的描述,先行了解Nacos的概念:

https://nacos.io/zh-cn/docs/concepts.html

PS: 以上概念非常重要,需要认真看一下,否则会对 Nacos 理解产生很多阻碍

下面我抽出几个单独讲一下:

命名空间:常用于生产环境隔离,比如dev/test/beta/prod等

配置:应用的配置文件,常用 yml/json 格式存储,一个应用服务可以配置多个配置文件,需要设置扩展,配置ID唯一,常用表现形式=应用名/应用名+Profile(举个栗子:mall-test.yml)

配置管理:可以对配置文件进行管理,配置的编辑、存储、分发、变更管理、历史版本管理、变更审计等所有与配置相关的活动

配置项:key/value形式的配置内容,应用application.yml/bootstrap.yml等文件的内容项

服务:服务名称=应用名称,服务分组=一组服务的聚合,服务集群=同分组同应用名多个实例服务聚合,服务权重=加权,权重越大,流量越大

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

七、Nacos架构

https://nacos.io/zh-cn/docs/architecture.html

以上为官方对于Nacos架构的解释,同学们可以认真看一下,下面我简单讲一下常用到的一些组件和配置。

数据存储

Nacos的数据存储可以分为两种,一种是内存,一种是DB,常用的都是存储在mysql中,将数据持久化,避免数据丢失;官方也提供了默认的初始化SQL,需要在 Github 上面去下载,地址:初始化SQL。

控制台

Nacos也提供了一个便于用户使用的后台页面,通过链接 http://localhost:8848/naocs 就能访问,密码也是 nacos/nacos,控制台提供包括配置版本跟踪、金丝雀发布、一键回滚配置以及客户端配置更新状态跟踪在内的一系列开箱即用的配置管理特性,帮助您更安全地在生产环境中管理配置变更和降低配置变更带来的风险。控制台样例

服务管理

服务管理包括了对服务的CRUD、负载转发策略、健康检查等,包含了一整套服务注册、发现的管理。

服务配置

服务配置包括了对配置的CRUD、版本控制、监听管理、推送轨迹、数据聚合等功能。

用户、角色、权限

和普通的系统一样,Nacos 提供了一套用户-角色-权限的基础系统,解决了注册-登陆-权限控制的问题。

两种启动模式

Nacos支持将注册中心(Service Registry)与配置中心(Config Center) 在一个进程合并部署或者将2者分离部署的两种模式。

八、Nacos部署

https://nacos.io/zh-cn/docs/quick-start.html

本地模式

基础的配置,可以根据以上链接中官方文档描述来实现,这里将详细解释几个注意事项。

版本:当前最新稳定版v1.4.2,尽量用最新版本,官方会不断修复问题,新版的支持会更好,尽量暂时不用v2.0.1版本,这个版本还有待验证,尽量避免踩坑,稳定以后再尝试

环境:同学一定要注意官方对于环境的要求,64位jdk1.8+、64位linux/windows、maven3.2+

安装包:如果没有特殊情况,尽量使用官方编译后的压缩包,避免下载官方Git后自己打包出现的问题,需要二次开发或者自定义配置的除外

配置:启动配置,官方默认启动使用了内嵌数据库的形式,这里作者推荐使用MySQL外部数据库方式,如果使用MySQL方式,那么需要修改 conf/application.properties 配置文件,如下:

###If use MySQL as datasource:
spring.datasource.platform=mysql

###Count of DB:
db.num=1

`### Connect URL of DB:
db.url.0=jdbc:mysql://localhost:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai
db.user.0=xxx
db.password.0=xxx`

这时候,如果不知道 Nacos MySQL 初始化脚本的同学,可以通过 初始化SQL 下载脚本,或者通过 conf/nacos-mysql.sql 配置脚本。

如果机器的内存不够充足的,启动前一定要修改 bin/startup.sh 的启动配置,如下:

#===========================================================================================
#JVM Configuration
#===========================================================================================
if [[ "${MODE}" == "standalone" ]]; then
    JAVA_OPT="${JAVA_OPT} -Xms512m -Xmx512m -Xmn256m"
    JAVA_OPT="${JAVA_OPT} -Dnacos.standalone=true"
else
    if [[ "${EMBEDDED_STORAGE}" == "embedded" ]]; then
        JAVA_OPT="${JAVA_OPT} -DembeddedStorage=true"
    fi
    JAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
    JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${BASE_DIR}/logs/java_heapdump.hprof"
    JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages"
fi`

PS:启动命令(-m standalone 代表着单机模式运行,如果不加这个参数则代表使用集群模式运行)

Docker模式

Docker和普通模式差不多,也是需要设置配置文件和启动参数,具体的配置和启动方式,我放在了Github的实例项目中,有需求的同学可以看一下,如下:

https://github.com/YClimb/docker-compose/tree/main/nacos
默认使用 standalone-mysql-5.7.yaml 配置来启动Nacos,详细描述见以上链接项目。

管理后台

服务启动以后,如果是本地或者外网服务器,就可以通过http://IP:8848/nacos访问控制台,账号密码:nacos/nacos 。

九、权限及运维

通过以上实例,一个基础的Nacos配置就完成了,如果我们还需要Nacos的权限配置和运维相关操作,那么可以继续往下看;

权限配置

首先,需要查看Nacos的系统参数介绍:Nacos系统参数介绍,看完以后,了解conf/application.properties参数含义;

然后,可以开始配置权限:鉴权,通过官方文档的描述,可以修改配置完成鉴权的开启,需要注意的是,对于不同版本来说,开启服务身份识别功能不太一样,这里需要同学认真查看,尽量用最新稳定版本,否则版本问题的坑可能在不经意间就会遇到。

运维问题

上面所有讲到的部署都是单机版本,如果有同学需要集群版本,可以查看以下官方文档:

https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html
对于集群版本来说,默认是通过 [ip/域名 -> nginx -> 实例] 的方式实现的,这里有几个问题需要注意:

环境:64位Linux、64位JDK1.8+、Maven3.2+、3个节点及以上(重要,否则无法选举成功)

安装包:推荐使用安装包模式,tar.gz,这里需要注意,集群版本和单机版本不一样,官方推荐的集群版本是1.3.0,一定要看好,否则会报错

集群配置:配置文件conf/cluster.conf,配置3+节点

数据源:使用MySQL数据库

启动:sh startup.sh启动即可,默认使用外置数据源

域名:通过域名来使用时,不可设置压缩gzip模式,否则应用服务获取配置时会有乱码问题;

总结

我这边整理了一份Spring相关资料文档、Spring系列全家桶、Java的系统化资料:(包括Java核心知识点、面试专题和21年最新的互联网真题、电子书等)有需要的朋友可以关注公众号【程序媛小琬】即可获取。

以上是关于三分钟带你了解Nacos:架构及部署的主要内容,如果未能解决你的问题,请参考以下文章

三分钟带你了解最成熟最流行的LAMP网站应用架构

一文带你了解Serverless架构及应用场景

Dubbo3 终极特性「云原生三中心架构」带你探索 Dubbo3 体系下的配置中心和元数据中心注册中心的原理及开发实战(中)

五分钟带你玩转spring cloud alibaba实战!springboot注册到nacos

五分钟带你玩转spring cloud alibaba实战!springboot注册到nacos

Dubbo3 终极特性「云原生三中心架构」带你探索 Dubbo3 体系下的配置中心和元数据中心注册中心的原理及开发实战(中)