首页 > 其他分享 >注册中心对比: zookeeper&&etcd&&consul

注册中心对比: zookeeper&&etcd&&consul

时间:2023-04-19 15:36:02浏览次数:39  
标签:注册 && consul 算法 RPC etcd Raft Paxos 节点

1.注册中心概念

注册中心主要有三种角色:

服务提供者(RPC Server):在启动时,向 Registry 注册自身服务,并向 Registry 定期发送心跳汇报存活状态。

服务消费者(RPC Client):在启动时,向 Registry 订阅服务,把 Registry 返回的服务节点列表缓存在本地内存中,并与 RPC Sever 建立连接。

服务注册中心(Registry):用于保存 RPC Server 的注册信息,当 RPC Server 节点发生变更时,Registry 会同步变更,RPC Client 感知后会刷新本地 内存中缓存的服务节点列表。

最后,RPC Client 从本地缓存的服务节点列表中,基于负载均衡算法选择一台 RPC Sever 发起调用。 

 

注册中心需要实现功能

根据注册中心原理的描述,注册中心必须实现以下功能,偷个懒,直接贴幅图:

2.分布式协议

 

一致性协议算法主要有Paxos、Raft、ZAB、GOSSIP。

Paxos算法是Leslie Lamport在1990年提出的一种基于消息传递的一致性算法,非常难以理解,基于Paxos协议的数据同步与传统主备方式最大的区别在于:Paxos只需超过半数的副本在线且相互通信正常,就可以保证服务的持续可用,且数据不丢失。

Raft是斯坦福大学的Diego Ongaro、John Ousterhout两个人以易理解为目标设计的一致性算法,已经有了十几种语言的Raft算法实现框架,较为出名的有etcd,Google的Kubernetes也是用了etcd作为他的服务发现框架。

Raft是Paxos的简化版,与Paxos相比,Raft强调的是易理解、易实现,Raft和Paxos一样只要保证超过半数的节点正常就能够提供服务。这篇文章 《ETCD教程-2.Raft协议》 详细讲解了Raft原理,非常有意思,感兴趣的同学可以看看。

ZooKeeper Atomic Broadcast (ZAB, ZooKeeper原子消息广播协议)是ZooKeeper实现分布式数据一致性的核心算法,ZAB借鉴Paxos算法,但又不像Paxos算法那样,是一种通用的分布式一致性算法,它是一种特别为ZooKeeper专门设计的支持崩溃恢复的原子广播协议。

Gossip算法被称反熵,熵是物理学上的一个概念,代表杂乱无章,而反熵就是在杂乱无章中寻求一致,这充分说明了Gossip的特点:在一个有界网络中,每个节点都随机的与其他节点通信,经过一番杂乱无章的通信,最终所有节点的状态都会达成一致。每个节点可能知道所有其他节点,也可能仅知道几个邻居节点。只要这些节点可以通过网络连通,最终他们的状态都是一致的,当然这个也是疫情传播的特点。

3.注册中心对比:

以上对比,仅是我个人观点,如果说错了,欢迎大家指正说明。

如果是自建注册中心,优先选择consul。

如果使用kubernetes,那么k8s自带etcd+coredns,这时候就不需要consul了。

标签:注册,&&,consul,算法,RPC,etcd,Raft,Paxos,节点
From: https://www.cnblogs.com/zhanchenjin/p/17333469.html

相关文章

  • 从 HTTP 到 gRPC:APISIX 中 etcd 操作的迁移之路
    罗泽轩,API7.ai 技术专家/技术工程师,ApacheAPISIXPMC成员。原文链接ApacheAPISIX现有基于HTTP的etcd操作的局限性etcd在2.x版本的时候,对外暴露的是HTTP1(以下简称HTTP)的接口。etcd升级到3.x版本后,其对外API的协议从普通的HTTP切换到了gRPC。为了兼顾......
  • consul 常用命令
    使用帮助Usage:consul[--version][--help]<command>[<args>]Availablecommandsare:aclInteractwithConsul'sACLsagentRunsaConsulagentcatalogInteractwiththecatalogconfig......
  • Ocelot 结成 Consul 做配置以及服务发现出现的一些小问题
    首先创建web项目dotnetnewweb-nApiGateway然后安装对应的nuget包dotnetaddpackageOcelotdotnetaddpackageOcelot.Provider.ConsulProgram配置usingOcelot.Middleware;usingOcelot.DependencyInjection;usingOcelot.Provider.Consul;varbuilder=W......
  • SpringCloud使用Consul作为配置中心
    Consul提供了一个key/value存储,用于存储配置和其他元数据。SpringCloudConsulConfig是ConfigServer和Client的替代方案。在特殊的“bootstrap”阶段,配置被加载到Spring环境中。默认情况下,配置存储在/config文件夹中。根据应用程序的名称和模拟SpringCloud配置顺序解析财产的......
  • Spring Cloud Consul简介
    SpringCloudConsul通过自动配置和绑定到SpringEnvironment和其他Spring编程模型习惯用法,为SpringBoot应用程序提供Consul集成。通过一些简单的注释,您可以快速启用和配置应用程序中的常见模式,并使用Hashicorp的Consul构建大型分布式系统。提供的模式包括服务发现、分布式配置和......
  • etcd/raft选举源码解读
    ETCD-raft笔记0.引言该篇博客基于etcdv3.5.7版本,首先会简单介绍etcd/raft对Raft选举部分的算法优化,然后通过源码分析etcd/raft的选举实现。1.etcd对于raft选举算法优化措施该优化措施均在raft博士论文中有讲解etcd/raft实现的与选举有关的优化有Pre-Vote、CheckQuorum、......
  • springCloud之Consul简介
    Consul是什么Consul是HashiCorp公司推出的开源工具。HashiCorpConsul是一种服务网络解决方案,使团队能够管理服务之间以及跨预处理和多云环境和运行时的安全网络连接。Consul为网络基础设施设备提供服务发现、服务网格、流量管理和自动更新。您可以单独使用这些功能,也可以在单个C......
  • .Net6注入Consul服务
    .Net6注入Consul服务直接上代码了(参考了一下其他博客进行总结一下),我这边项目工程是模拟微服务模式,新建类库把服务打包成了nuget方便调用现在先大致介绍一下,结尾放demo案例代码consul心跳心跳的地址要于下面配置文件的地址一样这里先定义一会配置文件也要相同///<summary>......
  • docker-compose 部署 consul v1.15.2
    server1配置文件{"node_name":"consul-server1","datacenter":"zhongtai","domain":"consul","server":true,"log_level":"INFO","ui_conf......
  • K8S 高可用外部 etcd 运行时 (三) 使用Flannel网络
    kubectlapply-fkube-flannel.yml---kind:NamespaceapiVersion:v1metadata:name:kube-flannellabels:k8s-app:flannelpod-security.kubernetes.io/enforce:privileged---kind:ClusterRoleapiVersion:rbac.authorization.k8s.io/v1metadata:......