浅谈注册中心Eureka、Nacos

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

一、分布式架构理论CAP理论

(强一致性、单调一致性、会话一致性、最终一致性、弱一致性)

C:一致性(所有节点在同一时间具有相同的数据)> Consistency; 
A:可用性 (保证每个请求不管成功或者失败都有响应)> Availability; 
P:分区容错性(系统中任意信息的丢失或失败不会影响系统的继续运作) > Partition tolerance;

二、Eurka注册中心

1、Eurka 采用 AP的设计

1.注册中心:节点是平等的,通过异步 Replicate 来同步数据,达到最终一致。注册中心拥有两级缓存。
2.客户端:本地缓存有服务注册的全量信息(即使与注册中心断开也可向服务方请求),某节点挂了可自动切换注册中心其它节点。

2、Eurka 的工作流程

注册中心nacos和eureka,eureka,云原生

1、启动注册中心:集群间定时通过 Replicate 同步注册表,每个 EurekaServer(注册中心) 都有完整的服务注册表信息。
2、客户端向注册中心发起注册:Client 启动时根据配置的 EurekaServer 地址去注册中心注册服务,提供自身的元数据,比如 IP 地址、端口,运行状况指示符 URL,主页等。
3、客户端定时发生心跳检测:Client 会每 30s 向 EurekaServer 发送一次心跳请求,证明客户端服务正常。
4、服务端服务剔除:当 EurekaServer 90s 内没有收到 Client 的心跳,注册中心则认为该节点失效,会注销该实例。
5、注册中心自我保护:单位时间内 Eureka Server 统计到有大量的 Client 没有上送心跳,进入自我保护机制,不再剔除没有上送心跳的客户端。
6、注册中心退出自我保护:当 Eureka Client 心跳请求恢复正常之后,Eureka Server 自动退出自我保护模式。
7、客户端整合服务发现:定时全量或者增量从注册中心获取服务注册表,并且将获取到的信息缓存到本地。
8、服务调用时:Client 先从本地缓存找寻调取的服务。获取不到,从注册中心刷新注册表,再同步到本地缓存。
9、Client获取到目标服务器信息,发起服务调用。
10、服务端下线:Client 程序关闭(DiscoveryManager.getInstance().shutdownComponent()),向 EurekaServer 发送取消请求,注册中心将实例从注册表中删除。

总结
1、Eureka Server启动时会做两件事:
    1.初始化读写缓存(二级缓存),从注册表registry(一级缓存)中实时加载数据,默认180s过期;
    2.判定是否使用只读缓存(三级缓存),默认开启;如果使用则开启一个定时任务,默认每30s做一次读写缓存到只读缓存的数据同步;
2、Eureka Server 在接收Client注册的时候,将读写缓存(二级缓存)清空;
3、Eureka Client获取服务信息时,默认先从只读缓存获取;获取不到再从读写缓存中获取,并将数据缓存到只读缓存;获取不到,再触发guava的回调函数从注册表中同步(即从一级缓存 – 注册表registry中取)。

3、Eurka 的缓存机制

Eureka Server中有三个变量用来保存服务注册信息,分别是:registry、readWriteCacheMap、readOnlyCacheMap
为了尽可能的避免服务注册出现频繁的读写冲突,写阻塞读。提高Eureka Server服务的读写性能。
1.一级缓存:  registry, ConcurrentHashMap类型。实时更新,又名注册表,UI界面从这里获取服务注册信息;
2.二级缓存(读写缓存):  readWriteCacheMap, GuavaCache类型。实时更新,缓存时间180秒;
3.三级缓存(只读缓存):  readOnlyCacheMap, ConcurrentHashMap类型。默认每30s从二级缓存readWriteCacheMap中同步数据更新。Eureka Client默认从这里获取服务注册信息,可配为直接从readWriteCacheMap获取。

三、Nacos注册中心

通信用gRPC机制,默认为AP模式,可切换为CP模式。

切换为CP模式
    curl -X PUT "http://localhost:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP"
切换为AP模式
    curl -X PUT "http://localhost:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=AP"

1、注册中心的作用

服务注册:
NacosClient会通过发送REST请求的方式向NacosServer注册自己的服务,提供自身的元数据,比如ip地址、端口等信息。NacosServer接收到注册请求后,就会把这些元数据信息存储在一个双层的内存Map中。
服务心跳:
在服务注册后,NacosClient会维护一个定时心跳来持续通知NacosServer,说明服务一直处于可用状态,防止被剔除。默认5s发送一次心跳。
服务同步:
NacosServer集群之间会互相同步服务实例,用来保证服务信息的一致性。
服务发现:
服务消费者(Nacos Client)在调用服务提供者的服务时,会发送一个REST请求给NacosServer,获取上面注册的服务清单,并且缓存在NacosClient本地,同时会在NacosClient本地开启一个定时任务定时拉取服务端最新的注册表信息更新到本地缓存。
服务健康检查:
NacosServer会开启一个定时任务用来检查注册服务实例的健康情况,对于超过15s没有收到客户端心跳的实例会将它的healthy属性置为false(客户端服务发现时不会发现),如果某个实例超过30秒没有收到心跳,直接剔除该实例(被剔除的实例如果恢复发送心跳则会重新注册)。
Nacos注册概括来说有6个步骤:
1、服务容器负责启动,加载,运行服务提供者。
2、服务提供者在启动时,向注册中心注册自己提供的服务。
3、服务消费者在启动时,向注册中心订阅自己所需的服务。
4、注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
5、服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
6、服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

2、Nacos 核心特性:

1)服务发现:支持 DNS 与 RPC 服务发现,也提供原生 SDK 、OpenAPI 等多种服务注册方式和 DNS、HTTP 与 API 等多种服务发现方式。
2)服务健康监测:提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。
3)动态配置服务:提供配置统一管理功能,将配置以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。
4)动态 DNS 服务:支持动态 DNS 服务权重路由,容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单 DNS 解析服务。
5)服务及其元数据管理:管理数据中心的所有服务及元数据,管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA 以及最首要的 metrics 统计数据。

3、Nacos的数据模型

Group——>Service——>Cluster——>Instance
// ServiceManager类,Map(namespace, Map(group::serviceName, Service))
private final Map<String, Map<String, Service>> serviceMap = new ConcurrentHashMap<>();

// Service类,Map(cluster,Cluster)
private Map<String, Cluster> clusterMap = new HashMap<>();

// Cluster类
private Set<Instance> persistentInstances = new HashSet<>();
private Set<Instance> ephemeralInstances = new HashSet<>();

// Instance类
private String instanceId;
private String ip;
private int port;
private double weight = 1.0D;
注册中心nacos和eureka,eureka,云原生
服务的结构

4、Nacos支持三种部署模式

单机模式 - 用于测试和单机试用。
集群模式 - 用于生产环境,确保高可用。
多集群模式 - 用于多数据中心场景。

 四、注册中心的通信

1、长短链接

短连接的操作步骤是: 建立连接——数据传输——关闭连接...建立连接——数据传输——关闭连接 长连接的操作步骤是: 建立连接——数据传输...(保持连接)...数据传输——关闭连接

注册中心nacos和eureka,eureka,云原生

2、HTTP

HTTP的长连接和短连接本质上是TCP长连接和短连接。HTTP/2基于UDP协议的,采用二进制的方式传输(与文本格式的json相比,二进制格式的protobuf在速度上是前者的5倍)

注册中心nacos和eureka,eureka,云原生

注册中心nacos和eureka,eureka,云原生
HTTP2二进制格式与HTTP1文本格式

 3、RPC 远程过程调用(Remote Procedure Call)

两台服务器上进程间通过网络调用函数、传递信息。
RPC 是一种流行的进程间通信技术,用于构建客户端-服务器应用程序。建立在长连接方式的TCP通信协议上。HTTP也是RPC实现的一种方式,与HTTP不同的是在协议层面RPC定义了每个消息的唯一id,可以更容易的复用连接。

RPC 的组件
1.RpcServer
负责导出(export)远程接口
2.RpcClient
负责导入(import)远程接口的代理实现
3.RpcProxy
远程接口的代理实现
4.RpcInvoker
客户方实现:负责编码调用信息和发送调用请求到服务方并等待调用结果返回
服务方实现:负责调用服务端接口的具体实现并返回调用结果
5.RpcProtocol
负责协议编/解码
6.RpcConnector
负责维持客户方和服务方的连接通道和发送数据到服务方
7.RpcAcceptor
负责接收客户方请求并返回请求结果
8.RpcProcessor
负责在服务方控制调用过程,包括管理调用线程池、超时时间等
9.RpcChannel
数据传输通道

4、gRPC (Remote Procedure Calls)

Google 发起的开源远程过程调用系统。
基于 HTTP/2 协议传输,HTTP/2基于UDP协议的,采用二进制的方式传输(与文本格式的json相比,二进制格式的protobuf在速度上是前者的5倍)。通过算法保证可靠性传输,天然支持并行传输,性能有大幅提升。
为了减少网络流量的对消息进行头部压缩。多路复用,支持通过同一个连接发送多个并发的请求。
gRPC的开发核心是*.proto文件,它定义了gRPC服务和消息的约定。根据这个文件,gRP框架将生成服务基类,消息和完整的客户端代码。 

gRPC大致请求流程
1.客户端(gRPC Stub)调用A方法,发起RPC调用。
2.对请求信息使用Protobuf进行对象序列化压缩(IDL)。
3.服务端(gPRC Server)接收到请求后,解码请求体,进行业务逻辑处理并返回。
4.对响应结果使用Protobuf进行对象序列化压缩(IDL)。
5.客户端接受到服务端响应,解码请求体。回调被调用的A方法,唤醒正在等待响应(阻塞)的客户端调用并返回响应结果。

五、服务对比

注册中心nacos和eureka,eureka,云原生

注册中心nacos和eureka,eureka,云原生文章来源地址https://www.toymoban.com/news/detail-719209.html

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

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

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

相关文章

  • Spring Clould 注册中心 - Eureka,Nacos

     视频地址:微服务(SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式)  微服务涉及的的知识  总结:  邮储的物联网项目实用的是apollo作为配置中心,nocos作为注册中心,feign进行服务间调用   SpringClould 与SpringBoot的版本兼容  clould-demo:demo 提取码:cocf 实现RestTemple也可以通过ht

    2024年02月12日
    浏览(33)
  • 【微服务开篇-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日
    浏览(29)
  • eureka迁移到nacos--双服务中心注册

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

    2024年02月10日
    浏览(30)
  • 注册中心Eureka和Nacos,以及负载均衡Ribbon

    微服务,就是把服务拆分成为若干个服务,降低服务之间的耦合度,提供服务的独立性和灵活性。做到高内聚,低耦合。 单体架构:简单方便,高度耦合,扩展性差,适合小型项目。例如:学生管理系统 分布式架构:松耦合,扩展性好,但架构复杂,难度大。适合大型互联

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

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

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

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

    2024年02月14日
    浏览(30)
  • SpringCloud实用篇1——eureka注册中心 Ribbon负载均衡原理 nacos注册中心

    单体架构: 将业务的所有功能集中在一个项目中开发,打成一个包部署。 优点:架构简单;部署成本低(打jar包、部署、负载均衡就完成了) 缺点:耦合度高(维护困难、升级困难,不利于大项目开发) 分布式架构 根据业务功能对系统做拆分,每个业务功能模块作为独立

    2024年02月13日
    浏览(27)
  • 注册中心ZK、nameServer、eureka、Nacos介绍与对比

    微服务架构是存在着很多跨服务调用,每个服务都存在着多个节点,如果有多个提供者和消费者,当提供者增加/减少或者消费者增加/减少,双方都需要感知发现。所以诞生了注册中心这个中间件。 市面上有很多注册中心,如 Zookeeper、NameServer、Eureka、Nacos,下面我来讲一下它

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

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

    2024年02月21日
    浏览(38)
  • Eureka切换Nacos时发现两个注册中心的解决方法

    报错信息如下,意思是发现了两个注册中心 首先我们看一下工程目录: eureka-server是我的eureka服务端,order-server和user-server是我的eureka客户端,在eureka服务端中引入了服务端依赖: 在两个eureka客户端中引入了客户端依赖: 当我想将注册中心从eureka切换为nacos时,不仅需要注释

    2024年01月24日
    浏览(33)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包