开发者学堂课程【Spring Cloud 微服务架构设计与开发实战 :3.2 Spring Cloud Alibaba Nacos 经典注册中心对比】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/60/detail/1095
3.2 Spring Cloud Alibaba Nacos 经典注册中心对比
内容介绍
一、 Nacos 注册与发现服务
二、 Nacos 与 Eureka 对比
三、 Nacos 与其他主流注册中心对比
本节课主要讲解阿里巴巴开源的一些微服务框架,重点讲解 Nacos。
Nacos 是阿里开源的一个分布式注册中心服务,在之前可能看到过相似的技术,比如提到过的 Eureka。也留下了作业使大家研究 Eureka 是怎么定义垃圾回收的,怎么定义心跳的等。后面再总结,这里讲解 Nacos。
Nacos 其实借鉴了 Eureka 一些设计的思想,包括等等这些经典的分布式,注册型工具类的一些思想。当然现在出现的比较晚,功能也是最强大,目前来看做的非常好,很多公司也在大量的去使用 Nacos 来替代 Eureka。包括 Nacos 本身设计出来并不是只给C服务,或者只给 Spring Cloud 用,也给其他包括一些传统的分布式程序,包括 go 语言或者其他语言也可以使用,这就是 Nacos 比较强大的地方。之前的内容、旧的内容也可以使用 Nacos 进行改造。
接下来来看 Nacos 哪些地方做的比较好。
一、Nacos 注册与发现服务
1. Nacos
Dynamic Naming and Configuration Service
Nacos 实际上就是动态的命名和配置服务。之前讲解 Eureka 的时候主要是注册中心服务,可以注册进去也可以查找,这是其起的主要作用。而现在 Nacos 实际是两个都可以干,既可以在里面保存配置信息,并且可以动态的推动集群服务,等于是两大功能于一身。不管是做前端开发、后端开发、h5开发等,使用了这个工具,就可以称其为“全能工程师”。Nacos 诞生的比较晚,做得好的原因是借鉴了很多前辈经典的内容和设计的思想,而且后面也做的比较“接地气”。
(1)Nacos 微服务动态服务发现、配置管理和服务管理工具平台。
(2)Nacos 致力于帮助发现、配置和管理微服务。
(3)Nacos 帮助更敏捷和容易地构建、交付和管理微服务平台。Nacos是构建以“服务”为中心的现代应用架构(例如微服务范式、云原生范式)的服务基础设施。
(4)Nacos 支持几乎所有主流的“服务”的发现、配置和管理:
(5)Kubernetes Service
(6)gRPC & Dubbo RPC Service
(7)Spring Cloud RESTful Service
(8)https://nacos.io
Nacos 不仅能够做出动态服务发现,还可以做配置服务器。配置服务器在这里面在生产环境下比较重要的一点就在这个地方,因为微服务是集群,这里如果有1000台,用户在生产环境下的不可能手动,每次部署的时候都手动改文件,这个过程特别复杂,工作量非常大,而且不及时。那么怎么办呢?有个叫在线动态更新,所以使用它再配置服务,用户更新完以后可以做灰度发布直接去做推送,推送完以后更新到应用程序发布。比如说更新一个限流的参数或者更新一个数据库命名的密码都可以,所以就很便利。但是现在比较有意思的就是 Nacos 实地支持的不仅仅是 Spring Cloud,它并不是表示 Service 服务,Spring Cloud 服务,Dubbo,包括 go 语言,包括其他类型的程序也都可以和它进行继承。它是一个支持更多种类客户端的注册中心。现在注册中心工具越来越多,越来越好。Nacos 出现以后在这一块填补了阿里开源的生态一个空白,这是它的主要的一个特色。现在来看其实在Spring Cloud 这一块用的非常顺手,到时候再演示一下。
2. Alibaba 微服务组件
(1)Sentinel:把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
(2)Nacos:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
(3)RocketMQ:一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。
(4)Dubbo:Apache DubboTM是一款高性能 Java RPC 框架。
(5)Seata:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。
(6)Alibaba Cloud ACM:一款在分布式架构环境中对应用配置进行集中管理和推送的应用配置中心产品。
(7)Alibaba Cloud OSS:阿里云对象存储服务(Object Storage Service,简称OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。
(8)Alibaba Cloud SchedulerX:阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。
(9)Alibaba Cloud SMS:覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。
Nacos 是非常重要的工具,自从 Nacos 发布以后都可以使用,目前在国内有很多公司都在使用 Spring Cloud 做微服务,Eureka 会被替换掉,因为阿里开发的微服务组件很好用;Dubbo 的影响力也很大也很好用;Seata 是做了一个很重要的高性能微服务分布式事务解决方案,这个在 Spring Cloud 是没有的,在其他语言也没有。这就是 Seata 比较强的地方,它有自己的实现。
3. Nacos全景图:
它们的生态是非常强大的,Spring Cloud 只是其中的一块,还有 CLOUD NATIVE 的知识,Dubbo 的知识,多租户的云账号知识等。在这里要稍微注意一下,因为和它相似的技术有很多,比如 Consul、NETFLIX 的 Eureka、zookeep、etcd 等,还有很多。这里是了解 Nacos 的规划目标,用户现在使用 Nacos 也还是比较方便的,对于做微服务集群的开发和线上的部署发布、会用发布,支持的都是比较好的。之后会给大家演示包括怎样将之前的微服务改造过来。
4. Nacos 关键特性
服务发现和服务健康监测
动态配置服务
动态 DNS 服务
服务及其元数据管理
改造的时候要注意一个问题,之前开发 Eureka 的服务的时候,是通过下导,包括更新 pom 文件去更改参数、加些注解、更改配置就容易上线。而现在 Nacos 是一个独立的,不需要那么复杂,但是改造工作还是要做,在后面将会演示怎么使用管理界面和管制微服务,这里也很重要。还支持动态 DNS,动态配置服务。在公司使用微服务可能是以二点二零几为主,比如二点一零几、二点二零几、二点三零几。二点四零几是基于 Spring boot 大版本,作为主流。
二、Nacos 与 Eureka 对比
Nacos 对比 Eureka:
对比项目/注册中心 |
Spring Cloud Nacos |
Spring Cloud Eureka |
CAP 模型 |
支持AP和CP模型 |
AP模型 |
客户端更新服务信息 |
使用注册+DNS-f+健康检查模式。DNF-F客户端使用监听模式 push/pull拉取更新信息 |
客户端定时轮询服务端获取其他服务ip信息并对比,相比之下服务端压力较大、延迟较大 |
伸缩性 |
使用Raft选举算法性能、可用性、容错性均比较好,新加入节点无需与所有节点互相广播同步信息 |
由于使用广播同步信息,集群超过1000台机器后对eureka集群压力很大 |
健康检查模式/方式 |
支持服务端/客户端/关闭检查模式,检查方式有tcp、http、sql。支持自己构建健康检查器 |
客户端向服务端发送http心跳 |
负载均衡 |
支持 |
支持 |
手动上下线服务方式 |
通过控制台页面和API |
通过调用API |
跨中心同步 |
支持 |
不支持 |
k8s 集成 |
支持 |
不支持 |
分组 |
Nacos可用根据业务和环境进行分组管理 |
不支持 |
权重 |
Nacos默认提供权重设置功能,调整承载流量压力 |
不支持 |
厂商 |
阿里巴巴 |
Netflix |
接下来了解 Nacos 和 Eureka 具体详细的对比。
在这里面主要强调的是 Eureka 的 AP 模型,主要是可用性,不强调数据一致性;而Nacos两个都可以,因为它有集群模式,也有强一致性模式。负载均衡都有,比较有意思的是 Eureka 集群是1000台以内的,属于是中小型集群;Nacos 主要是通过淘宝这种大规模的,十万级别量级服务式的验证。规模量级是不一样的,要知道部署十台、一百台、一千台,服务器的压力完全是不一样的,包括监控的压力、广播的计时性问题、配置的推送力问题都不在一个级别上。所以像淘宝双十一的时候负载量是超过十万个,是高并发的架构(一般高并发架构都以淘宝为例)。Nacos 是诞生的比较晚,可以划数据中心。Netflix 主要是与公司的规划利益问题而陷入冷战期,新发布的核心组件已经替换的差不多了。使用 Nacos 会发现功能更强了,更符合中国的互联网公司的使用习惯,工作也比较强。而且经过了大规模集群的检验,是没有问题的,所以可以放心使用。在中国这一块是阿里领头的 Java 社区,它的整个社区的气氛包括和开发项目的活跃度都是世界级的,可以和其他世界级的公司项目进行对比,这是比较好的一点,在这里学习的过程中能够快速的提升自己的基本能力,包括在实际项目中的使用。
三、Nacos 与其他主流注册中心对比
Nacos 与其他主流注册中心对比:
功能 |
Nacos |
Eureka |
Consul |
CoreDNS |
Zookeeper |
一致性协议 |
CP+AP |
AP |
CP |
—— |
CP |
健康检查 |
TCP/HTTP/MYSQL/Client Beat |
Client Beat |
TCP/HTTP/Grpc/Cmd |
—— |
Keep Alive |
负载均衡策略 |
权重/metadata/Selector |
Ribbon |
Fabio |
RoundRobin |
—— |
雪崩保护 |
有 |
有 |
无 |
无 |
无 |
自动注销实例 |
支持 |
支持 |
支持 |
不支持 |
支持 |
访问协议 |
HTTP/DNS |
HTTP |
HTTP/DNS |
DNS |
TCP |
监听支持 |
支持 |
支持 |
支持 |
不支持 |
支持 |
多数据中心 |
支持 |
支持 |
支持 |
不支持 |
不支持 |
跨注册中心同步 |
支持 |
不支持 |
支持 |
不支持 |
不支持 |
SpringCloud集成 |
支持 |
支持 |
支持 |
不支持 |
支持 |
Dubbbo集成 |
支持 |
不支持 |
支持 |
不支持 |
支持 |
K8S集成 |
支持 |
不支持 |
支持 |
支持 |
不支持 |
现在的注册中心有很多。Nacos、Eureka 主要是这两个;Consul 也就是 go 语言;还有 CoreDNS,有些问题可能在国内私体企业可能用不了,因为是上了美国名单的,但是可以私下使用;还有 Zookeeper。注意一点主要是 Nacos 支持的客户端都支持,而且是 K8S,包括 Dubbo 都支持。跨注册中心只有是 Nacos 和 Consl 支持,所以要仔细观看,Zookeeper 主要原因是因为它诞生的最少,主要是 Nacos 当时是服务于大数据体系,所以这里是有差异的。负载均衡是因为 Nacos 诞生的晚所以支持多一点。
Nacos 三种部署模式:
1. 单机模式–用于测试和单机试用。
2. 集群模式–用于生产环境,确保高可用。
3. 多集群模式–用于多数据中心场景。
Nacos 现在使用的是集群模式,其实 Eureka 也有集群模式,主要是考虑高并发的问题。
Nacos 全景大图:
后面会来到官网看文档做练习。包括 Nacos 的优势,也就是功能越强,监控,配置于一体,还有就是经过淘宝双十一的校验。至于来源免费都是差不多的,只不过 Nacos 作为后起之秀整个的设计思维、功能都更强大,规度都可以支持,包括支持注册中心。
本节课就到这里,下节课讲解实战 Nacos,升级 Spring Cloud 的微服务。