初心

从今天开始研究nacos.

为什么研究这个? 因为现在公司主流开始推荐使用nacos了.....虽然, 我们还没有开始用....提前做好准备吧.

nacos主要有两大作用. 一个是注册发现, 一个是配置管理

我们现在注册发现使用的是eureka, 配置管理使用的是spring cloud的配置中心. nacos一下包含了两个方面. 从服务器成本的角度考虑, 好像可以节省点服务器费用哈. 毕竟合二为一了嘛

学习的时候, 会将nacos和eureka,以及spring cloud的配置中心对比学习. 为什么大家都推荐nacos?

不能因为别人说好, 我们就说好. 我们要真正知道它好在哪里, 为什么好? 了解他的优势,才能更好地取其精华.

知道 为什么这么做怎么做 更重要

初步拟了一个研究方案:

  1. 了解什么是nacos, 他的优缺点, 好处

  2. 对比nacos和eureka, config

  3. 安装配置nacos. 现在很多都是使用docker容器化. 可以试试使用docker安装nacos,然后其他操作都在nacos上执行

  4. 根据官网文档, 开始学习.

  官网地址: https://nacos.io/en-us/docs/what-is-nacos.html

  github地址: https://github.com/alibaba/nacos


一. nacos是什么?

分解来看, 框框里是nacos是做什么的. 下面进行解释

nacos致力于注册发现, 配置和管理微服务

两个重点: 服务注册发现, 服务配置, 服务管理三个方面

它提供了一组简单有用的功能,使您能够实现动态服务发现,服务配置,服务元数据和流量管理。

动态服务发现: 什么是动态. 之前跟同事讨论过, 动态其中一个方面, 指的是热的含义. 比如服务器注册了, 不用重启, 就能发现. 服务配置修改了, 不用重启服务, 能够自动识别配置修改.

那么服务元数据和流量管理: 这里应该是和负载均衡有关系了. 流量怎么分配, 根据元数据设置, 进行管理

Nacos使构建,交付和管理微服务平台变得更容易,更快捷

如何能够是构建, 交付,管理 微服务平台变得更容易,更快捷呢? 想到了自动化部署那一套. 有一个界面, 点点按钮, 就开始操作了. 不用一台服务器, 一台服务器的去处理.

以上是官网给出的介绍: 经过我的理解, 变成大白话. 哈哈哈

官网解释: nacos是什么?

服务是Nacos的头等公民

这有点向一个选词造句. go里面说: 函数是一等公民. channel是一等公民. 这里说nacos是一等公民. 什么是一等公民呢? 就像客户就是上帝一样, 全部围绕客户转. nacos就是全部围绕着服务转

Nacos支持发现,配置和管理几乎所有类型的服务

Kubernetes服务
gRPC和Dubbo RPC服务
Spring Cloud RESTful服务

不多说, 我们现在使用的是spring cloud RESTful服务

Nacos的主要特点:

服务发现和服务运行状况检查

  Nacos支持基于DNS和基于RPC(Dubbo / gRPC)的服务发现。服务提供商向本机,OpenAPI或专用代理注册服务后,使用者可以使用DNS或HTTP查找服务。

  Nacos提供实时运行状况检查,以防止服务将请求发送到不正常的主机或服务实例。Nacos支持传输层(PING或TCP)健康检查和应用程序层(例如HTTP,Redis,MySQL和用户定义的协议)健康检查。
对于复杂的云和网络拓扑(例如VPC,边缘服务等)的运行状况检查,Nacos提供代理模式和服务器模式运行状况检查。Nacos还提供统一的服务运行状况仪表板,以帮助您管理服务的可用性和流量。
动态配置管理

  动态配置服务使您可以在所有环境中以集中,外部化和动态的方式管理所有应用程序和服务的配置。

  动态配置消除了在更新配置时重新部署应用程序和服务的需要。

  配置的集中管理使您更方便地实现无状态服务和按需弹性扩展服务实例。

  Nacos提供了易于使用的UI TODO,可帮助您管理所有应用程序或服务的配置。它提供了一些现成的功能,包括配置版本跟踪,canary / beta版本,
  配置回滚和客户端配置更新状态跟踪,以确保安全并控制配置更改的风险。
动态DNS服务

  支持加权路由的动态DNS服务使您可以更轻松地在数据中心内的生产环境中实施中间层负载平衡,灵活的路由策略,流量控制和简单的DNS解析服务。动态DNS服务使您更容易实现基于DNS的服务发现。

  Nacos提供了一些简单的DNS API TODO,供您管理DNS域名和IP。
服务治理和元数据管理

  Nacos允许您从微服务平台构建器的角度管理所有服务和元数据。这包括管理服务描述,生命周期,服务静态依赖关系分析,服务运行状况,服务流量管理,路由和安全规则,服务SLA和一线指标。

下图可以详细理解nacos的功能
1. nacos初识, 和eureka的比较, 在docker上安装nacos
上面这个图是官网给出的. 大概看一下就行. 就是对上面内容的一个总结. nacos有哪些功能, 作用, 优势等.

下面这个图是nacos的结构和组件:
1. nacos初识, 和eureka的比较, 在docker上安装nacos

  • 服务管理:实现服务CRUD,域名CRUD,服务健康状态检查,服务权重管理等功能
  • 配置管理:实现配置管CRUD,版本管理,灰度管理,监听管理,推送轨迹,聚合数据等功能
  • 元数据管理:提供元数据CURD 和打标能力
  • 插件机制:实现三个模块可分可合能力,实现扩展点SPI机制
  • 事件机制:实现异步化事件通知,sdk数据变化异步通知等逻辑
  • 日志模块:管理日志分类,日志级别,日志可移植性(尤其避免冲突),日志格式,异常码+帮助文档
  • 回调机制:sdk通知数据,通过统一的模式回调用户处理。接口和数据结构需要具备可扩展性
  • 寻址模式:解决ip,域名,nameserver、广播等多种寻址模式,需要可扩展
  • 推送通道:解决server与存储、server间、server与sdk间推送性能问题
  • 容量管理:管理每个租户,分组下的容量,防止存储被写爆,影响服务可用性
  • 流量管理:按照租户,分组等多个维度对请求频率,长链接个数,报文大小,请求流控进行控制
  • 缓存机制:容灾目录,本地缓存,server缓存机制。容灾目录使用需要工具
  • 启动模式:按照单机模式,配置模式,服务模式,dns模式,或者all模式,启动不同的程序+UI
  • 一致性协议:解决不同数据,不同一致性要求情况下,不同一致性机制
  • 存储模块:解决数据持久化、非持久化存储,解决数据分片问题
  • Nameserver:解决namespace到clusterid的路由问题,解决用户环境与nacos物理环境映射问题
  • CMDB:解决元数据存储,与三方cmdb系统对接问题,解决应用,人,资源关系
  • Metrics:暴露标准metrics数据,方便与三方监控系统打通
  • Trace:暴露标准trace,方便与SLA系统打通,日志白平化,推送轨迹等能力,并且可以和计量计费系统打通
  • 接入管理:相当于阿里云开通服务,分配身份、容量、权限过程
  • 用户管理:解决用户管理,登录,sso等问题
  • 权限管理:解决身份识别,访问控制,角色管理等问题
  • 审计系统:扩展接口方便与不同公司审计系统打通
  • 通知系统:核心数据变更,或者操作,方便通过SMS系统打通,通知到对应人数据变更
  • OpenAPI:暴露标准Rest风格HTTP接口,简单易用,方便多语言集成
  • Console:易用控制台,做服务管理、配置管理等操作
  • SDK:多语言sdk
  • Agent:dns-f类似模式,或者与mesh等方案集成
  • CLI:命令行对产品进行轻量化管理,像git一样好用
    这就是nacos的功能了, 在后面研究的时候, 可以按照这个图来具体研究.

构建、部署及启动模式:

  • 2种交付方式
    Nacos 支持标准 Docker 镜像(TODO: 0.2版本开始支持)及 zip(tar.gz)压缩包的构建物。

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

  • 免费的公有云服务模式
    除了您自己部署和启动 Nacos 服务之外,在云计算时代,Nacos 也支持公有云模式,在阿里云公有云的商业产品(如ACM, EDAS) 中会提供 Nacos 的免费的公有云服务。也可以使用阿里云公有云提供商提供 Nacos 的公有云服务。

二. nacos 和 eureka 优缺点对比

Spring Cloud Nacos

优点:

1)开箱即用,适用于dubbo,spring cloud等

2)AP模型,数据最终一致性

3)注册中心,配置中心二合一(二合一也不一定是优点),提供控制台管理

4)纯国产,各种有中文文档,久经双十一考验

缺点:

1)刚刚开源不久,社区热度不够,依然存在bug

Spring Cloud Eureka:

优点:

1)Spring Cloud 官方推荐

2)AP模型,数据最终一致性

3)开箱即用,具有控制台管理

缺点:

1)客户端注册服务上报所有信息,节点多的情况下,网络,服务端压力过大,且浪费内存

2)客户端更新服务信息通过简单的轮询机制,当服务数量巨大时,服务器压力过大。

3)集群伸缩性不强,服务端集群通过广播式的复制,增加服务器压力

4)Eureka2.0 闭源(Spring Cloud最新版本还是使用的1.X版本的Eureka)

个人觉得, 最终不得不弃用eureka的原因就是这最后一条, eureka2.0闭源了, 也就是说, 你要想继续使用, 对不起, 请交费.........然后, nacos在国内也足够优秀....so...nacos得到了大力发展

所以: 要想在某个时刻获得机会....那么, 请时刻准备好, 足够优秀

三. nacos安装在docer上

docker我本地已经安装好了.

第一步: 下载镜像

docker pull nacos/nacos-server
这是下载最新版的nacos镜像

第二步:查看已经下载的镜像: docker images

1. nacos初识, 和eureka的比较, 在docker上安装nacos

第三步: 启动nacos

docker run --env MODE=standalone --name nacos -d -p 8848:8848 nacos/nacos-server

参数解析:

  • run 启动运行容器
  • --env 配置环境 MODE=standalong 单节点
  • --name nacos 镜像名称为nacos
  • -d 守护式容器
  • -p 8848:8848 端口映射
    1. nacos初识, 和eureka的比较, 在docker上安装nacos

    第四步: 在浏览器访问ip:8848/nacos,登录密码默认nacos/nacos

    看到如下界面, 成功啦!!
    1. nacos初识, 和eureka的比较, 在docker上安装nacos

第五步: 检测nacos是否可以正常工作

1. 往配置中心发布配置

nacos是一个服务, 他对外也提供了很多接口, 其中一个是添加配置的接口. 我们模拟这个接口进行配置:

curl -X POST "http://localhost:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=HelloWorld"
看到返回结果是true. 然后刷新控制台, 可以看到如下
1. nacos初识, 和eureka的比较, 在docker上安装nacos

2. 从配置中心获取配置

curl -X GET "http://localhost:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test"

这个命令就是获取配置
1. nacos初识, 和eureka的比较, 在docker上安装nacos

获取helloworld内容


参考资料:

  1. nacos官网: https://nacos.io/en-us/docs/what-is-nacos.html

  2. github: https://github.com/alibaba/nacos

  3. nacos和Eureka的区别: https://www.pianshen.com/article/8646198661/