注册中心技术选型

news2024/9/21 19:00:20

优质博文:IT-BLOG-CN

市面上流行的开源注册中心很多,耳熟能详的有EurekaZookeeperNacosConsul。我们在选型的时候也主要从这四个组件中进行筛选。下面就对我们内部的讨论内容进行整理:

第一个维度:开源公司的实力

EurekaNetflix公司出品的一款注册中心,Netflix是一家美国公司,主要做在线影片租赁提供商。嗯…,类似于爱奇艺吧。2012-2014开源,发布了一个release版本;Spring Cloud是基于Netflix Eureka做了二次封装。Eureka提供官方的控制台来查询服务注册情况。但是,Eureka 2.0在2018年宣布停止开发,但毕竟是开源的,所以有一群小伙伴还在维护着,但是不会有新功能的添加,它们主要是对目前版本的bug的修复。比较巧的是Nacos18年开源了。Eureka服务实例规模在5000左右的时候,就已经出现服务不可用的问题(我们不选择它的主要原因),甚至在压测的过程中,如果并发的线程数过高,就会造成Eureka crash。不过如果服务规模在1000上下,几乎目前所有的注册中心都可以满足。但是它也有优点就是稳定,稳定,像银行这种微服务还是比较适合的。不选它的原因是源码无更新,没有新功能。同时,当并发和注册用户达到一定量级的时候就会出现性能问题和不支持K8S

ZookeeperGoogleChubby一个开源的实现,后来托管到Apache,于2010年11月正式成为Apache的顶级项目。我们也习惯性的称它为动物园。在大数据领域极为广泛,是HadoopHbase的重要组件。它是一个为分布式应用提供服务的软件,提供的功能包括:配置维护、域名服务、分布式同步等等。是一款经典的服务注册中心产品(虽然它最初的定位并不在于此)在很长一段时间里,它是国人在提起RPC服务注册中心时心里想到的唯一选择,这很大程度上与Dubbo在中国的普及程度有关。不选它的原因是不能与SpringCloud集成,同时ZooKeeper使用的ZAB协议,由于是单点写,在集群扩展性上不具备优势。

Nacos是国产的组件,由阿里巴巴在2018年开源,2019年1.0发布。此刻,应该有掌声,哈哈。NacosDynamic Naming and Configuration Service的缩写,动态命名和配置服务。Nacos是阿里开源的注册中心+配置中心(配置中心我们使用的是携程的阿波罗,这个后面聊)服务。Nacos提供官方的控制台来查询服务注册情况,但如果在公司,一般只有运维大佬有这个权限访问控制台来对里面的服务删除等危险操作,像我们公司单独开发了一套Nacos控制台管理,权限对开发是比较小的,一些毁灭性的权限,是不会给它们分配的。 后续还会继续增强控制台的能力,增加控制台登录和权限的管控,监控体系和 Metrics的暴露。Nacos 服务实例注册的支撑量约为100万,服务的数量可以达到10万以上。因为Nacos服务之间通过Raft算法保证一致性,所以建议Nacos部署的节点数为大于 3 的奇数。我们最终也是选择使用Nacos作为注册中心。

ConsulHashiCorp公司出品的开源工具,使用Go语言编写,也是一家美国公司,致力于为企业提供服务(它牛逼的功能没有对外开源,是对企业收费的)。Consul遵循CAP原理中的CP原则(跟ZK保持的一样),保证了强一致性和分区容错性。虽然保证了强一致性,但是可用性就相应下降了,例如服务注册的时间会稍长一些,因为ConsulRaft协议要求必须过半数的节点都写入成功才认为注册成功 ;在Leader挂掉了之后,重新选举出 Leader之前会导致Consul服务不可用。不选择的原因,本身就是基于CP舍弃了A,而我们看中的就是A(有效性)。

声明:2020年5月29日禁止HashiCorp[Consul的公司]在中华人民共和国销售或以其他方式提供企业版本的产品,包括Consul企业版。目前不涉及到开源产品。

第二个维度:社区活跃度

Eureka核心代码停滞在2年前,源码地址【GitHub】根据下图我们得到的数据是:关注该项目的有 961次,点赞的9.4k,拉取项目次数 2.7k。我们看项目commit的时间都是比较旧的了,目前开源社区有人维护,所有偶尔也会有代码提交,基本都是bug的修复。

2.0放弃维护声明如下,1.x 相对稳定。如果你们还在使用,后续有必要迁移到其他开源微服务注册中心【链接】。

Zookeeper持续更新,源码地址 【GitHub】根据下图我们得到的数据是:关注该项目的有 661次,点赞的8.2k,拉取项目次数 5.2k。拉取的比Eureka多,当时国内流行 RPC分布式调用的时候,还是很多的。项目在2小时前也有代码提交,还是很活跃的。只是不太适合作为我们目前说的微服务注册中心。

Nacos持续更新,源码地址【GitHub】根据下图我们得到的数据是:关注该项目的有 750次,点赞的12.6k,拉取项目次数 4k。18年开源的,但是目前从数据上看是未来微服务开发的趋势。据我了解目前很多公司,有能力迁移的都从Eureka迁移到了Nacos,因为它们遇见了性能问题。代码更新也是前一天就有更新,这里说下阿里的坏毛病,就是喜欢改项目名称或者就不维护了(借鉴Dubbo等)但是微服务这块大家就不用怕了,因为它托管给了SpringCloud了,也就是SpringCloudAlibaba。嗯…还是值得信赖的。其实,Nacos基本都是我们国内的公司再用,但我相信很快它还是能够在国外打下一片江山,毕竟是经过阿里双十一洗礼过的中间件。

Nacos 开发团队:阿里巴巴、虎牙直播,都是中国人就贴出来。详细信息自己可以上官网看看 【链接】

Nacos 1.0发布时间点,2019.4.10 正式发布1.0 版本。

Consul持续更新,源码地址【GitHub】根据下图我们得到的数据是:关注该项目的有 985次,点赞的19.4k,拉取项目次数 3.3k。其实很多人没怎么听过,但是使用的也不少,因为使用它的基本都是国外的公司,ConsulNacos其实很像,我们在后面有一张对比图大家也能看到两者差别不大,但Nacos还是比Consul牛逼。嗯…打压下大家的心情,其实,Consul牛逼的功能没有开源,哈哈。是付了钱才能用的。。

第三个维度:社区用户群

EurekaConsul在2014开源,时间早,存在大量用户,中文文档资料也比较丰富。
Nacos在2018开源,2019发布1.0版本,比较年轻,社区用户以国内为主,中文文档资料也比较丰富。目前市面上用户群:阿里巴巴、虎牙直播、中国工商银行、爱奇艺、中国平安、平安科技、浙江农信、贝壳、丰巢、百世快递、汽车之家等。平安科技根据需求将EurekaNacos都进行了使用。是不是你们的公司也在里面,骄傲一波。。如果没有,点这个链接Who is Using

Zookeeper开源的比较早 2010年就开源,目前用户量都来自大数据那边,中文文档也比较丰富。这个就留给大数据大小伙伴,这里就不好好介绍了。

Spring Cloud 生态整合: 得到Spring Cloud开源组织的认可的有两个:
【1】Spring Cloud Alibaba(鼓掌):链接
【2】Spring Cloud Netflix:链接

第四个维度:成熟稳定性

RESTful API支持:Eureka&Nacos
■ 都有RESTful API支持,可以通过定制化开发,巡检注册中心的稳定性;
Nacos Open API的更丰富一些;
Eureka Restful 参考地址
Nacos Restful 参考地址

Nacos兜底策略:选Nacos就对了
■ 人员招聘:跟进开源社区,技术交流;
Nacos注册中心,健康检查:
 – 服务实例的健康状态;
 – 服务实例的数量(包括健康、不健康);
 – 服务节点的健康状态;

其实选择用哪个注册中心的时候,都是从业务的角度考虑的,所以以后选型的时候,带着这张表就解决一大半问题:

功能NacosEurekaConsulZookeeper
协议CP+APAPCPCP
负载均衡weight/metadata/SelectorRabbonFabio-
监听机制支持支持支持不支持
自动注销实例支持支持不支持支持
雪崩保护
心跳检测TCP/HTTP/MYSQL/Client BeatClient BeatTCP/HTTP/gRPC/CmdKeep Alive
访问协议HTTP/DNSHTTPHTTP/DNSTCP
多数据中心支持支持支持不支持
SpringCloud集成支持支持支持不支持
跨注册中心同步支持不支持支持不支持
K8S集成支持不支持支持不支持
Dubbo集成支持不支持不支持支持

第五个维度:负载均衡的策略

其实,负载均衡并不算是传统注册中心的功能。我们都知道服务发现的流程是先从注册中心获取到服务的实例列表,然后再根据自身的需求,来选择其中的部分实例或者按照一定的流量分配机制来访问不同的服务提供者,所以注册中心本身一般不参与服务消费者的访问策略。EurekaZooKeeper包括Consul,本身都没有去实现可配置及可扩展的负载均衡机制,Eureka的负载均衡是由Ribbon来完成的,而Consul则是由Fabio做负载均衡。

重点来了,阿里巴巴根据自己的业务场景,必须使用的相反的思路。服务消费者并不关心所访问的服务提供者的负载均衡策略,消息者要的是以最高效的方式访问提供者的服务。服务提供者则需要非常关注自身被访问的流量的调配,原因就是阿里巴巴内部服务访问流量巨大,稍有不慎就会导致流量异常压垮服务提供者的服务。因此服务提供者需要能够完全掌控服务的流量调配,并可以动态调整。服务端的负载均衡,给服务提供者更强的流量控制权,但是无法满足不同的消费者希望使用不同负载均衡策略的需求。而不同负载均衡策略的场景也确实存在。客户端的负载均衡则提供了这种灵活性,并对用户扩展提供更好的支持。但是客户端负载均衡存在的问题就是可能会导致服务提供者出现热点,或者压根就拿不到任何服务提供者。所以根据我们的场景只能选基于流量限制的 Sentinel,后面再好好唠这个。

生态中大礼包组件: Spring Cloud AlibabaNetflix生态大礼包对比

组件SpringCloud 官方SpringCloud NetflixSpringCloud Alibaba我们的选择
分布式配置SpringCloud ConfigArchaiusNacosCtrip Apollo(携程)
服务注册和发现-Eureka(停止更新)NacosEureka/Nacos?
服务熔断-Hystrix(维护状态)SentinelSentinel
服务路由GatewayZuul(维护状态)-Gateway/Zuul
分布式消息RabbitMQ-RocketMQ
负载均衡LoadBalancerRibbonF5、Ribbon
分布式事务--Seata最终事务一致性

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2096491.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

InceptionV4 Pytorch 实现图片分类

一、目录结构 训练过程: 在训练集和测试集分类目录中放好待训练的分类图片(f1,f2,f3)运行模型训练代码,生成模型参数文件运行分类测试文件,设置待验证的图片路径,调用模型文件得出分类结果 二、模型构建代…

Auto-Unit-Test-Case-Generator -- java项目自动测试生成

0.Pre-预备知识: 0.1.Maven是什么? [by Maven是什么?有什么作用?Maven的核心内容简述_maven是干什么用-CSDN博客 ] 是Java 领域中最流行的自动化构建工具之一,Maven 作为 Java 项目管理工具,具有: 包管…

AI的基本使用

AI使用 一、网页端AI二、手机端AI三、AI提问指令大全四、AI绘画 一、网页端AI 讯飞星火网页版百度文心一言通义万相(主要用于生图)通义听悟(主要用于音频)通义智文(主要用于生文)腾讯文档里的智能助手&…

Laravel 中间件与事件应用教程

前言 在 Laravel 框架中,中间件(Middleware)和事件(Events)是两种强大的机制,用于处理 HTTP 请求和应用程序中的特定动作。它们各自有独特的应用场景和优势。本教程将详细介绍中间件和事件的基本概念、区别…

网络压缩之稀疏模型设计

通过网络架构的设计来达到减少参数量的效果。等一下 要跟大家介绍深度可分离卷积(depthwise separable convolution)。在讲这个方法之前,先复 习一下CNN。在 CNN 的这种卷积层里面,每一个层的输入是一个特征映射。如图1 所 示&…

Mysql——高可用集群部署

目录 一、源码编译mysql 二、mysql的主从复制 2.1、主从复制 2.2、延迟复制 2.3、慢查询日志 2.4、MySQL的并行复制 三、MySQL半同步模式 四、mysql高可用组复制 五、mysql-router 六、mysql高可用MHA 七、为MHA添加VIP功能 一、源码编译mysql 1、安装依赖 [rootm…

HX711—称重模块

1、简介 HX711 采用了海芯科技集成电路专利技术, 是一款专为高精度电子秤而设计的 24 位 A/D 转 换器芯片。 2、原理图 PCB参考设计原理图 3、模块驱动代码(固件库) 数据读取代码分析 HX711信号读取时序 初始化: 将 PD_SCK&…

C练手题--A snail enters a bar! 【7 kyu】

一、原题 链接:Training on A snail enters a bar! | Codewars Problem Description: A snail is crawling along a rubber band that has an initial length of x units. The snail moves at a constant speed of y units per minute. As the snail crawls from t…

upload-labs靶场通关(附靶场环境)

链接: https://pan.baidu.com/s/1GQP5zthh598A4Mp-WQM4vA 提取码: zovn 环境搭建 步骤一:将环境附件下载到phpstudy_pro\WWW下面修改名字为upload 步骤二:询问绑定地址 第一关 less-1 步骤一:上传一句话木马 步骤二:更改文件名…

昇腾 编程范式 - 矢量编程流水任务设计

昇腾 编程范式 - 矢量编程流水任务设计 flyfish 编程范式简单来说就是不同编程风格或方式的“套路”。按着套路走就可以。 矢量算子编程范式把算子的实现流程分为3个基本任务:CopyOut,Compute,copyout CopyIn负责数据搬入操作, Compute负责…

spring入门(一)spring简介

一、spring简介 Spring技术是JavaEE开发必备技能,企业开发技术选型命中率>90% spring能够简化开发,降低企业级开发的复杂性。框架整合,高效整合其他技术,提高企业级应用开发与运行效率。 主要学习&…

Leetcode3244. 新增道路查询后的最短距离 II

Every day a Leetcode 题目来源:3244. 新增道路查询后的最短距离 II 解法1:贪心 由于题目保证添加的边(捷径)不会交叉,从贪心的角度看,遇到捷径就走捷径是最优的。所有被跳过的城市都不可能再出现在最短…

从人机环境系统的角度看,自下而上和自上而下两种认知方式如何有机地结合使用?...

从具体的“态”到抽象的“势”,从感觉到认知是自下而上的,例如 GPT;反之,则是自上而下的,比如有经验的人。理性偏自下而上,神性(感觉)则自上而下。其中,“态”和“势”是…

[000-01-008].Seata案例应用

业务说明:这里我们创建三个服务,一个订单服务,一个库存服务,一个账户服务。当用户下单时,会在订单服务中创建一个订单,然后通过远程调用库存服务来扣减下单商品的库存;再通过远程调用账户服务来…

如何用命令行工作流做定制化 AI 文献回顾?

(注:本文为小报童精选文章。已订阅小报童或加入知识星球「玉树芝兰」用户请勿重复付费) 千万不要把 AI 生成的结果,直接端出去给你的导师,甚至是投稿到出版社。 需求 我最近在 B 站发布了一个视频,叫做《AI…

Redis:Redis性能影响因素

这里写自定义目录标题 一、CPU对Redis的影响二、磁盘对Redis的影响三、网络对Redis的影响四、Swap对Redis的影响 一、CPU对Redis的影响 二、磁盘对Redis的影响 性能建议: 如果是热点场景,建议大家关闭rdb和aof。在SATA和SAS普通盘上,append…

【微服务】springboot 自定义注解+反射+aop实现动态修改请求参数

目录 一、前言 二、动态修改接口请求参数的场景 2.1 动态修改请求参场景汇总 2.1.1 数据格式标准化 2.1.2 安全需要 2.1.3 参数校验与默认值设定 2.1.4 数据隐私保护 2.1.5 适配不同客户端 2.1.6 统计与监控 2.1.7 高级功能特性 三、springboot 使用过滤器和拦截器动…

Mysql8 主从复制主从切换(超详细)

文章目录 1 主从复制1.1 实施前提1.2 主节点配置(在192.168.25.91操作)1.3 从节点配置(在192.168.25.92操作)1.4 创建用于主从同步的用户1.5 开启主从同步1.5 主从同步验证 2 主从切换2.1 实施前提2.2 主节点设置只读(在192.168.25.91操作)2.3 检查主从数据是否同步完毕(在192.…

Vue的冷门内置指令:优化与性能提升的利器

在Vue.js的广阔生态中,开发者们常常聚焦于那些耳熟能详的内置指令,如v-for用于循环渲染列表,v-if和v-else-if用于条件渲染等。然而,Vue还提供了一系列较为冷门但功能强大的内置指令,它们在某些特定场景下能够显著提升应…

ER模型介绍

7.1.概述: 1.ER模型也叫做实体关系模型,是用来描述现实生活中客观存在的事物、事物的属性,以及事物之间关系的一种数据模型。2.在开发基于数据库的信息系统的设计阶段,通常使用ER模型来描述信息需要和信息特性,帮助我…