服务发现框架选型,Consul还是Zookeeper还是etcd

本文并不介绍服务发现的基本原理。除了一致性算法之外,其他并没有太多高深的算法,网上的资料很容易让大家明白上面是服务发现。

想直接查看结论的同学,请直接跳到文末。

目前,市面上有非常多的服务发现工具,《Open-Source Service Discovery》一文中列举了如下开源的服务发现工具。(http://jasonwilder.com/blog/2014/02/04/service-discovery-in-the-cloud/)

上面表格中,前三个是通用的,后面都是各大公司自己造的轮子,应用范围并不广,我也就不深入研究了。

此外,这篇文章是14年写的,当时它并没有研究Consul,放到表格中,Consul则应该是General、CP、Go、No dependency、Http/DNS Library。

截止到今天,除了容器编排框架k8s、istio/envoy自己实现了服务发现机制(他们也兼容第三方的服务发现工具),似乎也没有其他的知名的服务发现框架出现了。

下面我就zookeeper、etcd、consul这三款进行下比较。

比较

zookeeper

ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services. All of these kinds of services are used in some form or another by distributed applications. Each time they are implemented there is a lot of work that goes into fixing the bugs and race conditions that are inevitable. Because of the difficulty of implementing these kinds of services, applications initially usually skimp on them ,which make them brittle in the presence of change and difficult to manage. Even when done correctly, different implementations of these services lead to management complexity when the applications are deployed.

官网这么介绍zookeeper的,翻译过来,zookeeper的功能有:

  1. 作为配置信息的存储的中心服务器
  2. 命名服务
  3. 分布式同步
  4. 分组服务

能看出,zookeeper并不只是作为服务发现框架使用的,它非常庞大。

如果只是打算将zookeeper作为服务发现工具,就需要用到其配置存储和分布式同步的功能。前者可以理解成具有一致性的kv存储,后者提供了zookeeper特有的watcher注册于异步通知机制,zookeeper能将节点的状态实时异步通知给zookeeper客户端。

zookeeper使用

zookeeper的使用流程如下:

  1. 确保有所选语言的sdk,理论上github上第三方的库有一些,仔细筛选一下应该可以用。
  2. 调用zookeeper接口连接zookeeper服务器。
  3. 注册自身服务
  4. 通过watcher获取监听服务的状态
  5. 服务提供者需自行保持与zookeeper服务器的心跳。

《Zookeeper C API 指南》写了八篇文章介绍了如何使用zookeeper的c语言api。

总得来说,zookeeper需要胖客户端,每个客户端都需要通过其sdk与zookeeper服务保活,增加了编写程序的复杂性。此外,还提供api实现服务注册与发现逻辑,需要服务的消费者实现服务提供者存活的检测。

etcd

etcd是一个采用http协议的分布式键值对存储系统,因其易用,简单。很多系统都采用或支持etcd作为服务发现的一部分,比如kubernetes。但正事因为其只是一个存储系统,如果想要提供完整的服务发现功能,必须搭配一些第三方的工具。

比如配合etcd、Registrator、confd组合,就能搭建一个非常简单而强大的服务发现框架。但这种搭建操作就稍微麻烦了点,尤其是相对consul来说。所以etcd大部分场景都是被用来做kv存储,比如kubernetes。

consul

相较于etcd、zookeeper,consul最大的特点就是:它整合了用户服务发现普遍的需求,开箱即用,降低了使用的门槛,并不需要任何第三方的工具。代码实现上也足够简单。

Consul has multiple components, but as a whole, it is a tool for discovering and configuring services in your infrastructure. It provides several key features:

  • Service Discovery
  • Health Checking
  • KV Store
  • Multi Datacenter

展开了说,consul的功能有:

  1. 通过DNS或HTTP,应用能轻易地找到它们依赖的系统
  2. 提供了多种健康检查方式:http返回码200,内存是否超限,tcp连接是否成功
  3. kv存储,并提供http api
  4. 多数据中心,这点是zookeeper所不具备的。

consul使用

相比于zookeeper的服务发现使用,consul并不需要专门的sdk集成到服务中,因此它不限制任何语言的使用。我们看看consul一般是怎么使用的。

  1. 每台服务器上都要安装一个consul agent。
  2. consul agent支持通过配置文件注册服务,或者在服务中通过http接口来注册服务。
  3. 注册服务后,consul agent通过指定的健康检查方式,定期检查服务是否存活。
  4. 如果服务想查询其他服务的存活状态,只需要与本机的consul agent发起一次http请求或者dns请求即可。

简单点说,consul的使用不依赖任何sdk,依靠简单的http请求就能满足服务发现的所有逻辑。

不过,服务每次都从consul agent获取其他服务的存活状态,相比于zookeeper的watcher机制,实时性稍差一点,需考虑如何尽可能提高实时性,问题不会很大。

总结

为了以后支持多数据中心,同时为了快速支持不同的语言比如nodejs、python服务,我会选择consul作为我们的服务发现框架,但是实时获取服务信息变化通知的问题需尽可能减小。

原文地址:https://www.cnblogs.com/CQqf2019/p/10947983.html

时间: 2024-10-09 20:34:57

服务发现框架选型,Consul还是Zookeeper还是etcd的相关文章

常用的服务发现对比(Consul、zookeeper、etcd、eureka)

这里就平时经常用到的服务发现的产品进行下特性的对比,首先看下结论:   Feature Consul Zookeeper Etcd Eureka 服务健康检查  服务状态,内存,硬盘等  (弱)长连接,keepalive  连接心跳  可配支持 多数据中心  支持  -  -  - kv存储服务  支持  支持  支持  - 一致性  raft  paxos  raft  - CAP定理  CA  CP  CP  AP 使用接口(多语言能力)  支持http和dns  客户端  http/grp

服务发现框架选型

Zookeeper 1. 确保有所选语言的sdk,理论上github上第三方的库有一些,仔细筛选一下应该可以用. 2. 调用zookeeper接口连接zookeeper服务器. 3. 注册自身服务 4. 通过watcher获取监听服务的状态 5. 服务提供者需自行保持与zookeeper服务器的心跳. 总得来说,ZooKeeper需要胖客户端,每个客户端都需要通过其SDK与ZooKeeper服务保活,增加了编写程序的复杂性.此外,还提供api实现服务注册与发现逻辑,需要服务的消费者实现服务提供者

SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)

1.概念:Eureka 服务发现框架 2.具体内容 对于服务发现框架可以简单的理解为服务的注册以及使用操作步骤,例如:在 ZooKeeper 组件,这个组件里面已经明确的描述了一个服务的注册以及发现操作流程,在整个 Rest 架构里面,会存在有大量的微服务的信息. 在 SpringCloud 之中使用了大量的 Netflix 的开源项目,而其中 Eureka 就属于 Netflix 提供的发现服务组件,所有的微服务在使用之中全部向 Eureka 之中进行注册,而后客户端直接利用 Eureka 进

服务发现比较:Consul vs Zookeeper vs Etcd vs Eureka

这里就平时经常用到的服务发现的产品进行下特性的对比,首先看下结论: Feature Consul zookeeper etcd euerka 服务健康检查 服务状态,内存,硬盘等 (弱)长连接,keepalive 连接心跳 可配支持 多数据中心 支持 — — — kv存储服务 支持 支持 支持 — 一致性 raft paxos raft — cap ca cp cp ap 使用接口(多语言能力) 支持http和dns 客户端 http/grpc http(sidecar) watch支持 全量/

服务注册选型比较:Consul vs Zookeeper vs Etcd vs Eureka

zookeeper基于paxos的化简版zab,etcd基于raft算法.consul也是基于raft算法.etcd和consul作为后起之秀,并没有因为已经有了zookeeper而放弃自己,而是采用更为直接的raft算法. 原文  http://luyiisme.github.io/2017/04/22/spring-cloud-service-discovery-products/ 主题 ConsuletcdZooKeeper 这里就平时经常用到的服务发现的产品进行下特性的对比,首先看下结论

Eureka(服务发现框架)

什么是服务发现,不了解的可以自行百度或googleEureka是netfix开发的一个框架,定位于中间层,用于保障负载均衡和中间层的故障转移,它是基于RESET开发的服务框架基本组件:Eureka Server 和Eureka Client简单框架如下图:Eureka Server:主要提供存放注册的信息,它也提供了web界面可以查看有哪些服务,他的可用性通过复制来实现,可以通过keeplived来实现高可用Eureka Client:是一个Java客户端,放在各个服务中,用于跟server端进

一篇文章了解Consul服务发现实现原理

从 2016 年起就开始接触 Consul,使用的主要目的就是做服务发现,后来逐步应用于生产环境,并总结了少许使用经验. 最开始使用 Consul 的人不多,这两年微服务越来越火,使用 Consul 的人也越来越多. 经常有人会问一些问题,比如: 服务注册到节点后,其他节点为什么没有同步? Client 是干什么的?(Client 有什么作用?) 能不能直接注册到 Server?(是否只有 Server 节点就够了?) 服务信息是保存在哪里的? 如果节点挂了,健康检查能不能转移到别的节点? 有些

服务发现 - consul 的介绍、部署和使用(转)

什么是服务发现 相关源码: spring cloud demo 微服务的框架体系中,服务发现是不能不提的一个模块.我相信了解或者熟悉微服务的童鞋应该都知道它的重要性.这里我只是简单的提一下,毕竟这不是我们的重点.我们看下面的一幅图片: 图中,客户端的一个接口,需要调用服务A-N.客户端必须要知道所有服务的网络位置的,以往的做法是配置是配置文件中,或者有些配置在数据库中.这里就带出几个问题: 需要配置N个服务的网络位置,加大配置的复杂性 服务的网络位置变化,都需要改变每个调用者的配置 集群的情况下

服务发现之美:Consul集群搭建

近几年随着Docker容器技术.微服务等架构的兴起,人们开始意识到服务发现的必要性.微服务架构简单来说,是一种以一些微服务来替代开发单个大而全应用的方法, 每一个小服务运行在自己的进程里,并以轻量级的机制来通信, 通常是 HTTP RESTful API.微服务强调小快灵, 任何一个相对独立的功能服务不再是一个模块, 而是一个独立的服务.那么,当我们需要访问这个服务时,如何确定它的地址呢?这时就需要服务发现了. Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发