微服务注册中心之Zookeeper,Eureka,Nacos,Consul,Kubernetes区别

这篇具有很好参考价值的文章主要介绍了微服务注册中心之Zookeeper,Eureka,Nacos,Consul,Kubernetes区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 微服务注册中心

微服务的注册中心目前主流的有以下五种:ZookeeperEurekaConsulNacosKubernetes

1.1 注册中心概念

1.1.1 为什么需要注册中心

随着单体应用拆分,首当面临的第一份挑战就是服务实例的数量较多,并且服务自身对外暴露的访问地址也具有动态性。可能因为服务扩容、服务的失败和更新等因素,导致服务实例的运行时状态经常变化,如下图:
微服务注册中心之Zookeeper,Eureka,Nacos,Consul,Kubernetes区别
商品详情需要调用营销、订单、库存三个服务,存在问题有:

  • 营销、订单、库存这三个服务的地址都可能动态的发生改变,单存只使用配置的形式需要频繁的变更,如果是写到配置文件里面还需要重启系统,这对生产来说太不友好了;
  • 服务是集群部署的形式调用方负载均衡如何去实现;

解决第一个问题办法就是加一个中间,这个中间层就是我们的注册中心。
解决第二问题就是关于负载均衡的实现,这个需要结合中间层来实现。

1.1.2 如何实现一个注册中心

对于如何实现注册中心这个问题,首先将服务之间是如何交互的模型抽象出来,我们结合实际的案例来说明这个问题,以商品服务为例:

  • 当我们搜索商品的时候商品服务就是提供者;
  • 当我们查询商品详情的时候即服务的提供者又是服务的消费者,消费是订单、库存等服务;

由此我们需要引入的三个角色就是:中间层(注册中心)、生产者、消费者,如下图:
微服务注册中心之Zookeeper,Eureka,Nacos,Consul,Kubernetes区别

整体的执行流程如下:

  • 在服务启动时,服务提供者通过内部的注册中心客户端应用自动将自身服务注册到注册中心,包含主机地址、服务名称等等信息;
  • 在服务启动或者发生变更的时候,服务消费者的注册中心客户端程序则可以从注册中心中获取那些已经注册的服务实例信息或者移除已下线的服务;

上图还多一个设计缓存本地路由,缓存本地路由是为了提高服务路由的效率和容错性,服务消费者可以配备缓存机制以加速服务路由。更重要的是,当服务注册中心不可用时,服务消费者可以利用本地缓存路由实现对现有服务的可靠调用。
在整个执行的过程中,其中有点有一点是比较难的,就是服务消费者如何及时知道服务的生产者如何及时变更的,这个问题也是经典的生产者消费者的问题,解决的方式有两种:

  • 发布-订阅模式:服务消费者能够实时监控服务更新状态,通常采用监听器以及回调机制,经典的案例就是Zookeeper
    微服务注册中心之Zookeeper,Eureka,Nacos,Consul,Kubernetes区别
  • 主动拉取策略:服务的消费者定期调用注册中心提供的服务获取接口获取最新的服务列表并更新本地缓存,经典案例就是 Eureka
    微服务注册中心之Zookeeper,Eureka,Nacos,Consul,Kubernetes区别

对于如何选择这两种方式,其实还有一个数据一致性问题可以聊聊,比如选择定时器肯定就抛弃了强一致性,最后要求的是最终一致,这里就不深入展开了,另外你可能还会说服务的移除等等这些功能都没介绍,在我看来那只是一个附加功能,注册中心重点还是在于服务注册和发现,其他都是锦上添花罢了。
微服务注册中心之Zookeeper,Eureka,Nacos,Consul,Kubernetes区别

1.1.3 如何解决负载均衡的问题

负载均衡的实现有两种方式:

  • 服务端的负载均衡;
  • 客户端的负载均衡;

对于实现的方案来说本质上是差不多的,只是说承接的载体不一样,一个是服务端,一个客户端,如下图:
微服务注册中心之Zookeeper,Eureka,Nacos,Consul,Kubernetes区别
服务端的负载均衡,给服务提供者更强的流量控制权,但是无法满足不同的消费者希望使用不同负载均衡策略的需求。
客户端的负载均衡则提供了这种灵活性,并对用户扩展提供更加友好的支持。但是客户端负载均衡策略如果配置不当,可能会导致服务提供者出现热点,或者压根就拿不到任何服务提供者。
服务端负载均衡典型的代表就是 Nginx,客户端负载均衡典型代表是Ribbon,每种方式都有经典的代表,我们都是可以深入学习的。

常见的负载均衡器的算法的实现,常见的算法有以下六种:

  • 轮询法
    将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载。
  • 随机法
    通过系统的随机算法,根据后端服务器的列表大小值来随机选取其中的一台服务器进行访问。由概率统计理论可以得知,随着客户端调用服务端的次数增多;其实际效果越来越接近于平均分配调用量到后端的每一台服务器,也就是轮询的结果。
  • 哈希算法
    哈希的思想是根据获取客户端的IP地址,通过哈希函数计算得到的一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是客服端要访问服务器的序号。采用源地址哈希法进行负载均衡,同一IP地址的客户端,当后端服务器列表不变时,它每次都会映射到同一台后端服务器进行访问。
  • 加权轮询法
    不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此它们的抗压能力也不相同。给配置高、负载低的机器配置更高的权重,让其处理更多的请求,而配置低、负载高的机器,给其分配较低的权重,降低其系统负载,加权轮询能很好地处理这一问题,并将请求顺序且按照权重分配到后端。
  • 加权随机法
    与加权轮询法一样,加权随机法也根据后端机器的配置,系统的负载分配不同的权重。不同的是,它是按照权重随机请求后端服务器,而非顺序。
  • 最小连接数法
    最小连接数算法比较灵活和智能,由于后端服务器的配置不尽相同,对于请求的处理有快有慢,它是根据后端服务器当前的连接情况,动态地选取其中当前积压连接数最少的一台服务器来处理当前的请求,尽可能地提高后端服务的利用效率,将负责合理地分流到每一台服务器。

1.2 注册中心如何选型

现在注册中心的选择也是五花八门,现阶段比较流行有以下几种:
微服务注册中心之Zookeeper,Eureka,Nacos,Consul,Kubernetes区别

在介绍这个之前大家有些需要了解的知识有CAPPaxosRaft 算法这里我就不进行过多介绍了。开始介绍以上5种实现注册中心的方式。

1.2.1 Zookeeper

这个说起来有点意思的是官方并没有说他是一个注册中心,但是国内 Dubbo 场景下很多都是使用Zookeeper来完成了注册中心的功能。
点击了解zookeeper深入理解其原理

1.2.2 Eureka

点击了解SpringCloud之Eureka原理

1.2.3 Nacos

点击了解Nacos原理

1.2.4 Consul

ConsulHashiCorp 公司推出的开源工具,Consul Go 语言开发,部署起来非常容易,只需要极少的可执行程序和配置文件,具有绿色、轻量级的特点。Consul是分布式的、高可用的、 可横向扩展的用于实现分布式系统的服务发现与配置。

Consul的特点:

  • 服务发现(Service Discovery
    Consul 提供了通过DNS或者HTTP接口的方式来注册服务和发现服务。一些外部的服务通过Consul很容易的找到它所依赖的服务。
  • 健康检查(Health Checking
    ConsulClient可以提供任意数量的健康检查,既可以与给定的服务相关联(webserver是否返回200 OK),也可以与本地节点相关联(内存利用率是否低于90%)。操作员可以使用这些信息来监视集群的健康状况,服务发现组件可以使用这些信息将流量从不健康的主机路由出去。
  • Key/Value存储
    应用程序可以根据自己的需要使用Consul提供的Key/Value存储。Consul提供了简单易用的HTTP接口,结合其他工具可以实现动态配置、功能标记、领袖选举等等功能。
  • 安全服务通信
    Consul可以为服务生成和分发TLS证书,以建立相互的TLS连接。意图可用于定义允许哪些服务通信。服务分割可以很容易地进行管理,其目的是可以实时更改的,而不是使用复杂的网络拓扑和静态防火墙规则。
  • 多数据中心
    Consul支持开箱即用的多数据中心,这意味着用户不需要担心需要建立额外的抽象层让业务扩展到多个区域
    微服务注册中心之Zookeeper,Eureka,Nacos,Consul,Kubernetes区别

Consul 支持多数据中心,在上图中有两个DataCenter,他们通过Internet互联,同时请注意为了提高通信效率,只有Server节点才加入跨数据中心的通信。

在单个数据中心中,Consul分为ClientServer两种节点(所有的节点也被称为Agent),Server节点保存数据,Client负责健康检查及转发数据请求到ServerServer节点有一个Leader和多个FollowerLeader节点会将数据同步到 FollowerServer 的数量推荐是3个或者5个,在Leader挂掉的时候会启动选举机制产生一个新的Leader

集群内的Consul节点通过gossip协议(流言协议)维护成员关系,也就是说某个节点了解集群内现在还有哪些节点,这些节点是Client还是Server。单个数据中心的流言协议同时使用TCPUDP通信,并且都使用8301端口。跨数据中心的流言协议也同时使用TCPUDP通信,端口使用8302。
集群内数据的读写请求既可以直接发到Server,也可以通过Client使用RPC转发到Server,请求最终会到达Leader节点,在允许数据延时的情况下,读请求也可以在普通的Server节点完成,集群内数据的读写和复制都是通过TCP的8300端口完成。

Consul其实也可以在应用内进行注册,后续采用Spring Cloud全家桶这套做负载

我们这里聊聊关于Consul的应用外的注册:
微服务注册中心之Zookeeper,Eureka,Nacos,Consul,Kubernetes区别

上图主要多出来两个组件,分别是RegistratorConsul Template,接下来我们介绍下这两个组件如何结合可以实现在应用发进行服务发现和注册。

  • Registrator:一个开源的第三方服务管理器项目,它通过监听服务部署的 Docker 实例是否存活,来负责服务提供者的注册和销毁。
  • Consul Template:定时从注册中心服务端获取最新的服务提供者节点列表并刷新 LB 配置(比如 Nginxupstream),这样服务消费者就通过访问 Nginx 就可以获取最新的服务提供者信息,达到动态调节负载均衡的目的。

整体架构图可能是这样
微服务注册中心之Zookeeper,Eureka,Nacos,Consul,Kubernetes区别
我们用 Registrator 来监控每个Server的状态。当有新的Server启动的时候,Registrator会把它注册到Consul这个注册中心上。

由于Consul Template已经订阅了该注册中心上的服务消息,此时Consul注册中心会将新的Server信息推送给Consul TemplateConsul Template则会去修改nginx.conf的配置文件,然后让Nginx重新载入配置以达到自动修改负载均衡的目的。

1.2.5 Kubernetes

点击此处了解 Kubernetes 基本概念 文章来源地址https://www.toymoban.com/news/detail-464299.html

到了这里,关于微服务注册中心之Zookeeper,Eureka,Nacos,Consul,Kubernetes区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringCloud学习笔记(上):服务注册与发现:Eureka、Zookeeper、Consul+负载均衡服务调用:Ribbon

    SpringCloud=分布式微服务架构的一站式解决方案,是多种微服务架构落地技术的集合体,俗称微服务全家桶。 springboot版本选择: git源码地址:https://github.com/spring-projects/spring-boot/releases/ SpringBoot2.0新特性:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Release springcloud版本选

    2024年02月08日
    浏览(45)
  • 【微服务开篇-RestTemplate服务调用、Eureka注册中心、Nacos注册中心】

     本篇用到的资料: https://gitee.com/Allengan/cloud-demo.git https://gitee.com/Allengan/cloud-demo.git 目录 1.认识微服务 1.1.单体架构 1.2.分布式架构 1.3.微服务 1.4.SpringCloud 1.5.总结 2.服务拆分和远程调用 2.1.服务拆分原则 2.2.服务拆分示例 2.2.1.导入Sql语句 2.2.2.导入demo工程 2.3.实现远程调用案例

    2024年02月08日
    浏览(39)
  • 微服务(二)——注册中心(Eureka、Nacos)

    注册中心: 需求:当一个服务提供者 Service 部署了多个实例交给 User 远程调用时: 服务消费者 User 应该调用哪个实例,如何获取其对应地址和端口? User 如何获知实例是否健康? 注册中心作用: 帮助管理服务,并帮助服务调用者选择并调用服务 实时监测服务实例是否健康

    2024年02月12日
    浏览(40)
  • 作为服务注册中心,Eureka比Zookeeper好在哪里

    RDBMS(Mysql Oracle sqlServer) == 》ACID NoSQL (Redis mongdb) ==》 CAP ACID是什么? A(Atomicity) 原子性 C(Consistence) 一致性 I(Isolation)隔离性 D(Durability)持久性 CAP是什么? C(Consistency)强一致性 A(Availability)可用性 P(Parition tolerance) 分区容错性 CAP的三进二 CA 、AP、CP CAP理论的核心 一个分布式系统

    2024年02月10日
    浏览(37)
  • eureka迁移到nacos--双服务中心注册

    服务注册中心的迁移有多种方式,官网使用nacos sync,还有民间开发的双注册中心组件eureka-nacos-proxy,但是我用了不太顺利,所以用的是阿里巴巴的双注册中心组件edas-sc-migration-starter spring boot:2.5.3 引入依赖 正常启动即可发现两边都已经注册 如果要用open feign,需要在启动类

    2024年02月10日
    浏览(35)
  • 微服务架构+服务注册中心+Nacos和Eureka+比较分析

    Nacos和Eureka都是常用的服务注册中心,它们可以实现服务的注册、发现、负载均衡等功能,但是它们也有一些区别和优缺点。本资源将从功能特性、生态系统、CAP理论、连接方式、服务异常剔除、操作实例方式、自我保护机制等方面,详细比较和分析Nacos和Eureka的区别。本资源

    2024年02月21日
    浏览(48)
  • Zookeeper、Eureka、Consul、Nacos对比

    Zookeeper 是⼀款经典的服务注册中心产品(虽然它最初的定位并不在于此),在很长⼀段时间里,它是国人在提起 RPC 服务注册中心时心里想到的唯⼀选择。 Eureka 借着微服务概念的流行,与 SpringCloud 生态的深度结合,也获取了大量的用户。 Consul 在设计上把很多分布式服务治

    2024年02月16日
    浏览(34)
  • Java分布式微服务1——注册中心(Eureka/Nacos)

    远程调用 向其他服务器请求信息(远程调用) 先在application或者configuration中注册一个Bean方便之后使用(可忽略) 使用restTemplate方法发送请求 getForObject/postForObject/… 1、Eureka注册中心 上面的url是硬编码写死的,很不方便切换,所以使用Eurake注册中心来管理服务提供者的地址 E

    2024年02月14日
    浏览(69)
  • Nacos vs. Eureka:微服务注册中心的对比

    Nacos vs. Eureka:微服务注册中心的对比 前言: 欢迎来到本篇博客,今天我们将深入研究两个常用的微服务注册中心:Nacos 和 Eureka。微服务架构的兴起使得服务注册中心成为整个体系中不可或缺的一部分,而选择一个适合自己项目的注册中心显得尤为重要。 1. Nacos 和 Eureka 简介

    2024年02月03日
    浏览(44)
  • Nacos服务注册和配置中心(Config,Eureka,Bus)2

            Nacos领域模型,Namespace命名空间、Group分组、集群这些都是为了进行归类管理,把服务和配置文件进行归类,归类之后就可以实现一定的效果,比如隔离。对于服务来说,不同命名空间中的服务不能够互相访问调用         Namespace:命名空间,对不同的环境进行

    2024年02月16日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包