一 Nacos简介

Nacos是以服务为主要服务对象的中间件,Nacos支持所有主流的服务发现、配置和管理。

Nacos主要提供以下四大功能:

  1. 服务发现与服务健康检查

    Nacos使服务更容易注册自己并通过DNS或HTTP接口发现其他服务。Nacos还提供服务的实时健康检查,以防止向不健康的主机或服务实例发送请求。

  2. 动态配置管理

    动态配置服务允许您在所有环境中以集中和动态的方式管理所有服务的配置。Nacos消除了在更新配置时重新部署应用程序和服务的需要,这使配置更改更加高效和灵活。

  3. 动态DNS服务

Nacos支持加权路由,使您可以更轻松地在数据中心的生产环境中实施中间层负载平衡,灵活的路由策略,流量控制和简单的DNS解析服务。它可以帮助您轻松实现基于DNS的服务发现,并防止应用程序耦合到特定于供应商的服务发现API。

  1. 服务和元数据管理

Nacos提供易于使用的服务仪表板,可帮助您管理服务元数据,配置,kubernetes DNS,服务运行状况和指标统计。

1.1 Nacos总体概况

1.2 Nacos架构

image.png

二、注册中心与配置中心横向对比

2.1 Nacos与eureka注册中心对比

对比项目\注册中心 Spring Cloud Nacos Spring Cloud Eureka
CAP模型 支持AP和CP模型 AP模型
客户端更新服务信息 使用注册+DNS-f+健康检查模式。 DNS-F客户端使用监听模式push/pull拉取更新信息 客户端定时轮询服务端获取其他服务ip信息并对比,相比之下服务端压力较大、延迟较大
伸缩性 使用Raft选举算法性能、可用性、容错性均比较好,新加入节点无需与所有节点互相广播同步信息 由于使用广播同步信息,集群超过1000台机器后对eureka集群压力很大
健康检查模式/方式 支持服务端/客户端/关闭检查模式,检查方式有tcp、http、sql。支持自己构建健康检查器 客户端向服务端发送http心跳
负载均衡 支持 支持
手动上下线服务方式 通过控制台页面和API 通过调用API
跨中心同步 支持 不支持
k8s集成 支持 不支持
分组 Nacos可用根据业务和环境进行分组管理 不支持
权重 Nacos默认提供权重设置功能,调整承载流量压力 不支持
厂商 阿里巴巴 Netflix

2.2服务配置中心对比

对比项目/配置中心 apollo nacos
开源时间 2016.5 2018.6
配置实时推送 支持(HTTP长轮询1s内) 支持(HTTP长轮询1s内)
版本管理 自动管理 自动管理
配置回滚 支持 支持
权限管理 支持 待支持
多集群多环境 支持 支持
监听查询 支持 支持
多语言 Go,C++,Python,Java,.net,OpenAPI Python,Java,Nodejs,OpenAPI
分布式高可用最小集群数量 Config2+Admin3+Portal*2+Mysql=8 Nacos*3+MySql=4
配置格式校验 支持 支持
通信协议 HTTP HTTP
数据一致性 数据库模拟消息队列,Apollo定时读消息 HTTP异步通知
单机读(tps) 9000 15000
单机写(tps) 1100 1800

nacos具有Apollo大部分功能,最重要的是配置中心与注册中心打通,可以省去我们在微服务治理方面 的一些投入(比如通过动态配置来启停线程池等操作)。

2.3 初步选型结论

初步结论为:使用Nacos代替Eureka和apollo,主要理由为: 相比与Eureka: (1)Nacos具备服务优雅上下线和流量管理(API+后台管理页面),而Eureka的后台页面仅供展示,需要使用api操作上下线且不具备流量管理功能。 (2)从部署来看,Nacos整合了注册中心、配置中心功能,把原来两套集群整合成一套,简化了部署维护 (3)从长远来看,Eureka开源工作已停止,后续不再有更新和维护,而Nacos在以后的版本会支持SpringCLoud+Kubernetes的组合,填补 2 者的鸿沟,在两套体系下可以采用同一套服务发现和配置管理的解决方案,这将大大的简化使用和维护的成本。同时来说,Nacos 计划实现 Service Mesh,是未来微服务的趋势 (4)从伸缩性和扩展性来看Nacos支持跨注册中心同步,而Eureka不支持,且在伸缩扩容方面,Nacos比Eureka更优(nacos支持大数量级的集群)。 (5)Nacos具有分组隔离功能,一套Nacos集群可以支撑多项目、多环境。

相比于apollo (1) Nacos部署简化,Nacos整合了注册中心、配置中心功能,且部署相比apollo简单,方便管理和监控。 (2) apollo容器化较困难,Nacos有官网的镜像可以直接部署,总体来说,Nacos比apollo更符合KISS原则 (3)性能方面,Nacos读写tps比apollo稍强一些

结论:使用Nacos代替Eureka和apollo

三、Nacos其他特性

3.1 Nacos Sync的价值

  • NacosSync是一个支持多种注册中心的同步组件,基于Spring boot开发框架,数据层采用Spring Data JPA,遵循了标准的JPA访问规范,支持多种数据源存储,默认使用Hibernate实现,更加方便的支持表的自动创建更新

  • 使用了高效的事件异步驱动模型, 支持多种自定义事件,使得同步任务处理的延时控制在3s,8C16G的单机能够支持6K的同步任务

  • NacosSync除了单机部署,也提供了高可用的集群部署模式,NacosSync是无状态设计,将任务等状态数据迁移到了数据库,使得集群扩展非常方便

  • 抽象出了Sync组件核心接口,通过注解对同步类型进行区分,使得开发者可以很容易的根据自己需求,去扩展不同注册中心,目前已支持的同步类型:

    • Nacos数据同步到Nacos

    • Zookeeper数据同步到Nacos

    • Nacos数据同步到Zookeeper

    • Eureka数据同步到Nacos

    • Consul数据同步到Nacos

系统模块架构

image.png

使用场景 多个网络互通的Region之间服务共享,打破Region之间的服务调用限制

image.png

3.2 DNS - F 的技术价值

Nacos提供DNS-F功能 DNS-F落地的技术价值

  • 填补了内部微服务业务没有全局动态调度能力的空白

  • 解决了服务端棉铃挑战:时延大、解析不准、故障牵引慢

  • 支持服务端多种调度需要

  • 加速外部域名解析

  • 服务故障牵引秒级生效

  • 提供专线流量牵引能力

    image.png

3.3 目前使用Nacos的公司

阿里巴巴、虎牙直播、中国工商银行、爱奇艺、中国平安、平安科技、浙江农信、贝壳、丰巢、百世快递、汽车之家等

四、安装Nacos

[root@topcheer mnt]# ll
总用量 3005528
drwxr-xr-x 9 root root 160 10月 4 20:30 apache-tomcat-7.0.70
-rw-r--r-- 1 root root 8924465 10月 4 20:30 apache-tomcat-7.0.70.tar.gz
-rw-r--r-- 1 root root 540 9月 21 22:14 Dockerfile
drwxr-xr-x 9 es es 155 9月 21 22:58 elasticsearch-6.2.3
-rw-r--r-- 1 root root 29050159 9月 21 22:45 elasticsearch-6.2.3.tar.gz
-rw-r--r-- 1 root root 128 9月 29 21:47 elasticsearch.yml
-rw-r--r-- 1 root root 780598784 9月 29 21:27 es.tar
-rw-r--r-- 1 root root 412774002 5月 30 2018 gitlab-ce-10.8.2-ce.0.el7.x86_64.rpm
-rw-r--r-- 1 root root 78245883 9月 30 14:25 jenkins.war
drwxrwxr-x 12 wgr wgr 249 9月 21 23:34 kibana-6.2.3-linux-x86_64
-rw-r--r-- 1 root root 83426328 9月 21 22:45 kibana-6.2.3-linux-x86_64.tar.gz
-rw-r--r-- 1 root root 768809984 9月 29 21:29 kibana.tar
-rw-r--r-- 1 root root 17446309 9月 21 22:12 logstash-0.0.1-SNAPSHOT.jar
drwxr-xr-x 12 root root 289 9月 22 12:32 logstash-6.2.3
-rw-r--r-- 1 root root 138221072 9月 21 22:45 logstash-6.2.3.tar.gz
-rw-r--r-- 1 root root 677771264 9月 29 21:31 logstash.tar
drwxr-xr-x 10 root root 171 10月 24 23:34 nacos
-rw-r--r-- 1 root root 44275341 10月 24 23:25 nacos.tar.gz
drwxr-xr-x 9 es es 186 10月 4 21:41 nginx-1.12.2
-rw-r--r-- 1 root root 981687 10月 4 20:30 nginx-1.12.2.tar.gz
drwxr-xr-x 9 1169 1169 12288 10月 4 21:40 pcre-8.37
-rw-r--r-- 1 root root 2041593 10月 4 20:30 pcre-8.37.tar.gz
drwxr-xr-x 11 es es 4096 10月 6 16:52 zookeeper-3.4.10
-rw-r--r-- 1 root root 35042811 10月 6 15:27 zookeeper-3.4.10.tar.gz
[root@topcheer mnt]#

解压压缩包,需要jdk8及以上的环境,然后执行数据库的脚本nacos-mysql.sql

[root@topcheer conf]# ll
总用量 60
-rw-r--r-- 1 501 games 1765 10月 24 23:31 application.properties
-rw-r--r-- 1 501 games 408 4月 6 2019 application.properties.example
-rw-r--r-- 1 501 games 58 4月 6 2019 cluster.conf.example
-rw-r--r-- 1 501 games 26100 4月 10 2019 nacos-logback.xml
-rw-r--r-- 1 501 games 9788 4月 9 2019 nacos-mysql.sql
-rw-r--r-- 1 501 games 7196 4月 10 2019 schema.sql
[root@topcheer conf]#

修改配置application.properties

db.num=1
db.url.0=jdbc:mysql://localhost:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456

启动

nohup sh startup.sh -m standalone &

查看日志

[root@topcheer bin]# /usr/local/jak/jdk1.8.0_181/bin/java  -Xms512m -Xmx512m -Xmn256m -Dnacos.standalone=true -Djava.ext.dirs=/usr/local/jak/jdk1.8.0_181/jre/lib/ext:/usr/local/jak/jdk1.8.0_181/lib/ext:/mnt/nacos/plugins/cmdb:/mnt/nacos/plugins/mysql -Xloggc:/mnt/nacos/logs/nacos_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -Dnacos.home=/mnt/nacos -jar /mnt/nacos/target/nacos-server.jar  --spring.config.location=classpath:/,classpath:/config/,file:./,file:./config/,file:/mnt/nacos/conf/ --logging.config=/mnt/nacos/conf/nacos-logback.xml
nacos is starting

,--.
,--.'|
,--,: : | Nacos 1.0.0
,`--.'`| ' : ,---. Running in stand alone mode, All function modules
| : : | | ' ,'\ .--.--. Port: 8848
: | \ | : ,--.--. ,---. / / | / / ' Pid: 26163
| : ' '; | / \ / \. ; ,. :| : /`./ Console: http://192.168.180.113:8848/nacos/index.html
' ' ;. ;.--. .-. | / / '' | |: :| : ;_
| | | \ | \__\/: . .. ' / ' | .; : \ \ `. https://nacos.io
' : | ; .' ," .--.; |' ; :__| : | `----. \
| | '`--' / / ,. |' | '.'|\ \ / / /`--' /
' : | ; : .' \ : : `----' '--'. /
; |.' | , .-./\ \ / `--'---'
'---' `--`---' `----'

2019-10-25 00:01:33,057 INFO Bean 'org.springframework.security.config.annotation.configuration.ObjectPostProcessorConfiguration' of type [org.springframework.security.config.annotation.configuration.ObjectPostProcessorConfiguration$$EnhancerBySpringCGLIB$$9b21802a] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)

2019-10-25 00:01:33,216 INFO Bean 'objectPostProcessor' of type [org.springframework.security.config.annotation.configuration.AutowireBeanFactoryObjectPostProcessor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)

2019-10-25 00:01:33,219 INFO Bean 'org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler@5965d37' of type [org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)

2019-10-25 00:01:33,225 INFO Bean 'org.springframework.security.config.annotation.method.configuration.GlobalMethodSecurityConfiguration' of type [org.springframework.security.config.annotation.method.configuration.GlobalMethodSecurityConfiguration$$EnhancerBySpringCGLIB$$bff622dc] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)

2019-10-25 00:01:33,233 INFO Bean 'methodSecurityMetadataSource' of type [org.springframework.security.access.method.DelegatingMethodSecurityMetadataSource] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)

2019-10-25 00:01:34,342 INFO Tomcat initialized with port(s): 8848 (http)

2019-10-25 00:01:34,575 INFO Root WebApplicationContext: initialization completed in 5344 ms

2019-10-25 00:01:39,857 INFO Initializing ExecutorService 'applicationTaskExecutor'

账号密码都是nacos 前面简介参考:https://www.jianshu.com/p/afd7776a64c6

SpringCloud之Nacos服务发现(十七)的更多相关文章

  1. SpringCloud使用Nacos服务发现实现远程调用

    本文使用SpringCloud结合Nacos服务发现,Feign远程调用做一个简单的Demo. 1 Nacos 关于Nacos之前写了两篇文章关于SpringBoot对它的使用,感兴趣可以查看一下. ...

  2. SpringBoot使用Nacos服务发现

    本文介绍SpringBoot应用使用Nacos服务发现. 上一篇文章介绍了SpringBoot使用Nacos做配置中心,本文介绍SpringBoot使用Nacos做服务发现. 1.Eureka闭源 相 ...

  3. SpringCloud Alibaba Nacos 服务注册

    业务服务接入Nacos服务治理中心 启动Nacos访问地址为:http://101.200.201.195:8848/nacos/ 创建bom工程用于管理依赖(下方附加源码地址) 准备工作完成后开始接 ...

  4. Spring Cloud Alibaba基础教程:Nacos服务发现与配置管理

    随着微服务概念的流行,越来越多的公司采用`Spring Cloud`全家桶构建微服务系统,实现业务的快速迭代.`Spring Cloud`提供了快速构建分布式微服务常用组件,包括`Spring Clo ...

  5. SpringCloud Alibaba Nacos 服务治理中心

    目录 一.什么是Nacos? 二.Nacos能干吗? 三.Nacos关键特性 四.Nacos中的基本概念 五.如何安装部署Nacos? 六.Nacos数据持久化 一.什么是Nacos? 英文全称Dyn ...

  6. SpringCloud Alibaba Nacos服务注册与配置管理

    Nacos SpringCloud Alibaba Nacos是一个狗抑郁构建云原生应用的动态服务发现.配置管理和服务管理平台. Nacos:Dynamic Naming and Configurat ...

  7. 配置中心Nacos(服务发现)

    服务演变之路 单体应用架构 在刚开始的时候,企业的用户量.数据量规模都⽐较⼩,项⽬所有的功能模块都放在⼀个⼯程中编码.编译.打包并且部署在⼀个Tomcat容器中的架构模式就是单体应用架构,这样的架构既 ...

  8. SpringCloud接入EDAS——服务发现篇

    旁白 很久没有写技术文章了,最近不是写水文就是写小说.说到底,还是最近很少研究技术的缘故,已经到了江郎才尽的地步了. 不过,LZ无意间看到自己团队的小伙伴写的一些文章,觉得还是不错的,于是便动了心思, ...

  9. 浅谈SpringCloud (二) Eureka服务发现组件

    上面学习到了如何由一个程序访问另一个程序,那么如果使用SpringCloud来进行访问,该如何访问呐? 可以借助Eureka服务发现组件进行访问. 可以借助官方文档:https://spring.io ...

随机推荐

  1. 第一个SharePoint Add-in工程

    一.创建SharePoint hosted 工程 1.创建承载SharePoint Add-in独立域 首先,确定承载的应用程序的独立域名,可以使用类似这样的域名apps.contoso.com,鉴于 ...

  2. layui-table与layui-rate评分转换成星级的使用

    需求:将layui-table中的某一列,例如:评分,从数据库中查找出来之后,进行layui-rate评分转换显示效果,为星星.显示效果如下: 实现代码: 1.layui中引入rate 2.table ...

  3. redis列表底层实现之一——链表

    注意标题中的“之一”,那么什么情况下,列表会使用链表作为其数据结构呢? 答案就是——列表键包含了大量的元素,或者列表中包含的元素都是比较长的字符串. Ok,由于链表大家都比较熟悉,接下来就直接给出链表 ...

  4. 〈四〉ElasticSearch的认识:基础原理的补充

    目录 想想我们漏了什么 回顾 补回 集群的建立 集群发现机制 配置文件 健康状态 补充: 小节总结 分片的管理 梳理 分片的均衡分配 主副分片的排斥 容错性: 数据路由 对于集群健康状态的影响 小节总 ...

  5. 快学Scala 第四课 (多维数组,与Java集合的互操作)

    Scala二维数组的定义: val arr2 = Array.ofDim[String](2, 2) arr2(0)(0) = "aa" arr2(1)(0) = "bb ...

  6. 用哈希算法的思想解决排序和字符串去重问题,时间复杂度为O(N)

    第一个题目: int a[] = {12,13,12,13,19,18,15,12,15,16,17},要求对数组a进行排序,要求时间复杂度为O(N) 我们所知道的常规排序中,最优的解法也就是O(N* ...

  7. springmvc中将servlet api对象作为处理方法的入参使用

    在springmvc中,控制器不依赖任何servlet api对象,也可以将servlet api对象作为处理方法的入参使用,非常方便,比如需要使用HttpSession对象,那么就可以直接将Http ...

  8. Jmeter Json List Element Assertion使用详解

    使用背景: jmeter4.0本身提供json Assertion断言,但当我们想要对返回的json list中的多个字段进行断言的时候,我们就会感到很无力.那么此时我们就可以通过Json List ...

  9. Linux入门(磁盘与挂载)

    Linux入门之 磁盘管理与挂载   在我们使用计算机或者是服务器时,总会需要接入外部存储的时候,正如我们使用的移动硬盘.U盘.接入手机等,就是一个接入外部存储的过程.上述这些在接入Windows时我 ...

  10. B-线性代数-矩阵转置

    [TOC] 更新.更全的<机器学习>的更新网站,更有python.go.数据结构与算法.爬虫.人工智能教学等着你:https://www.cnblogs.com/nickchen121/ ...