nacos简介以及作为注册 配置中心与Eureka、apollo的选型比较
Nacos是以服务为主要服务对象的中间件,Nacos支持所有主流的服务发现、配置和管理。
Nacos主要提供以下四大功能:
服务发现与服务健康检查
Nacos使服务更容易注册自己并通过DNS或HTTP接口发现其他服务。Nacos还提供服务的实时健康检查,以防止向不健康的主机或服务实例发送请求。
动态配置管理
动态配置服务允许您在所有环境中以集中和动态的方式管理所有服务的配置。Nacos消除了在更新配置时重新部署应用程序和服务的需要,这使配置更改更加高效和灵活。
动态DNS服务
Nacos支持加权路由,使您可以更轻松地在数据中心的生产环境中实施中间层负载平衡,灵活的路由策略,流量控制和简单的DNS解析服务。它可以帮助您轻松实现基于DNS的服务发现,并防止应用程序耦合到特定于供应商的服务发现API。
服务和元数据管理Nacos提供易于使用的服务仪表板,可帮助您管理服务元数据,配置,kubernetes DNS,服务运行状况和指标统计。
1.1 Nacos总体概况image.png1.2 Nacos架构image.png二、注册中心与配置中心横向对比2.1 Nacos与eureka注册中心对比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数据同步到NacosZookeeper数据同步到NacosNacos数据同步到ZookeeperEureka数据同步到NacosConsul数据同步到Nacos系统模块架构
image.png使用场景多个网络互通的Region之间服务共享,打破Region之间的服务调用限制image.png3.2 DNS - F 的技术价值Nacos提供DNS-F功能DNS-F落地的技术价值
填补了内部微服务业务没有全局动态调度能力的空白解决了服务端棉铃挑战:时延大、解析不准、故障牵引慢支持服务端多种调度需要加速外部域名解析服务故障牵引秒级生效提供专线流量牵引能力
image.png3.3 目前使用Nacos的公司阿里巴巴、虎牙直播、中国工商银行、爱奇艺、中国平安、平安科技、浙江农信、贝壳、丰巢、百世快递、汽车之家等
完整列表:https://github.com/alibaba/nacos/issues/273
老板都开口了,我能说不么?
本文探讨一下如何实现不同环境(开发、测试、灰度、正式)的配置管理问题。
就像Maven用groupId、artifactId、version三者来定位jar包在仓库中的位置一样,Nacos也提供了 Namespace (命名空间) 、Data ID (配置集ID)、 Group (组) 来确定一个配置文件(或者叫配置集)。
由此,实现多环境配置的方案也有三种:
1、用命名空间(namespace)来区分不同的环境,一个命名空间对应一个环境;
2、用配置组(group)来区分不同的环境,命名空间用默认的public即可,一个组对应一种环境;
3、用配置集ID(Data ID)名称来区分不同的环境,命名空间和组用默认的即可,通过文件命名来区分;
接下来,逐个来看
http://{host}:{port}/nacos
http://{host}:{port}/nacos/index.html
默认用户名密码都是nacos
为了方便演示,这里建了一个名为example的Spring Boot项目
pom.xml
1<?xmlversion="1.0"encoding="UTF-8"?>2<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"3xsi:schemaLocation="http://maven.apache.org/POM/4.0.0https://maven.apache.org/xsd/maven-4.0.0.xsd">4<modelVersion>4.0.0</modelVersion>5<parent>6<groupId>org.springframework.boot</groupId>7<artifactId>spring-boot-starter-parent</artifactId>8<version>2.3.6.RELEASE</version>9<relativePath/><!--lookupparentfromrepository-->10</parent>11<groupId>com.example</groupId>12<artifactId>example</artifactId>13<version>0.0.1-SNAPSHOT</version>14<name>example</name>1516<properties>17<java.version>1.8</java.version>18<spring-cloud-alibaba.version>2.2.3.RELEASE</spring-cloud-alibaba.version>19</properties>2021<dependencies>22<dependency>23<groupId>org.springframework.boot</groupId>24<artifactId>spring-boot-starter-web</artifactId>25</dependency>26<dependency>27<groupId>com.alibaba.cloud</groupId>28<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>29</dependency>30</dependencies>3132<dependencyManagement>33<dependencies>34<dependency>35<groupId>com.alibaba.cloud</groupId>36<artifactId>spring-cloud-alibaba-dependencies</artifactId>37<version>${spring-cloud-alibaba.version}</version>38<type>pom</type>39<scope>import</scope>40</dependency>41</dependencies>42</dependencyManagement>4344<build>45<plugins>46<plugin>47<groupId>org.springframework.boot</groupId>48<artifactId>spring-boot-maven-plugin</artifactId>49</plugin>50</plugins>51</build>5253</project>
bootstrap.yml
HelloController.java
1. 利用 Data ID 命名 来区分环境
利用Data ID命名来区分环境,命名空间和组默认即可
在 Nacos Spring Cloud 中,dataId 的完整格式如下:
prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置spring.profiles.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。
用命令行启动也是一样的
例如:
java-Dspring.profiles.active=test-jarexample-0.0.1-SNAPSHOT.jar
2. 利用 Group 来区分环境
项目不变,我们把spring.application.name改成example2
命名空间用默认的public
java-Dspring.cloud.nacos.config.group=DEV_GROUP-jarexample-0.0.1-SNAPSHOT.jar
java-Dspring.cloud.nacos.config.group=TEST_GROUP-jarexample-0.0.1-SNAPSHOT.jar
java-Dspring.profiles.active=test-Dspring.cloud.nacos.config.group=TEST_GROUP-jarexample-0.0.1-SNAPSHOT.jar
如果是这样的话,这个时候,Data ID 命名就应该是 example2-test.yaml
3. 利用 Namespace 区分环境
创建命名空间的时候,如果不指定ID,则自动生成的id就是这样的uuid字符串,我们还是自己指定一个有意义的ID吧
java-Dspring.cloud.nacos.config.namespace=ns_dev-jarexample-0.0.1-SNAPSHOT.jar
java-Dspring.profiles.active=dev-Dspring.cloud.nacos.config.namespace=ns_dev-jarexample-0.0.1-SNAPSHOT.jar
java-Dspring.cloud.nacos.config.namespace=ns_test-jarexample-0.0.1-SNAPSHOT.jar
java-Dspring.profiles.active=test\-Dspring.cloud.nacos.config.namespace=ns_test\-Dspring.cloud.nacos.config.group=TEST_GROUP\-jarexample-0.0.1-SNAPSHOT.jar
4. 小结
第一种,用 Data ID 区分环境,虽然简单,但是每个项目要创建4个配置文件,随着项目的增多,都在一个命名空间下会显得很混乱,查找起来也不是很方便,而且不利于做权限控制
第二种,用Group区分,问题也是一样的
综上,最好的是用Namespace区分环境,清晰明了,而且有利于做权限控制
来源 | https://urlify.cn/jmY3Ez
上一篇:YYFC是什么意思啊
下一篇:lol的恕瑞玛故事寓意-
发表评论