专栏首页性能与架构服务注册发现技术对比

服务注册发现技术对比

技术对照表

CAP模型

CAP 这3个字母代表:

  • Consistence(一致性)
  • Availability(可用性)
  • Partition Tolerance(分区容错性)

在一个分布式系统中,这3者不可兼得。

由于网络的原因,分布式系统中 P 是必备的,意味着只能选择 AP 或者 CP。

CP 代表数据一致性是第一位的,AP 代表可用性是第一位的。

他们4个只有 Eureka 是 AP 的,Eureka 在数据不一致的情况下也可以使用,只要数据最终一致即可。

如果想更多的了解 CAP 可以参见:

架构设计中的 CAP 和 BASE 理论

数据一致性

ZAB 是 zookeeper 的原子广播协议,基于 Paxos 算法改的。

Raft 是工程上使用较为广泛的强一致性、去中心化、高可用的分布式协议。

这两个算法都没毛病,都可以实现分布式一致性,只是实现方式不同。

Eureka 选择的是 AP,不要求强一致性,自然没有使用数据一致性算法。

Paxos 和 Raft 参考资料:

分布式一致性算法 Paxos

分布式一致性算法 Raft

多数据中心

就是多机房,只有 Consul 支持。

zookeeper 不支持多数据中心是指,如果你跨多个机房部署了一套 zookeeper,一旦出现网络划分,那么就不可用了。

Consul 是通过 Gossip 协议实现的。

Gossip 协议中的消息会以一传十、十传百的指数级速度在网络中快速传播。

网络中任何节点的异常都不会影响 Gossip 消息传播,分布式系统容错性极强。

Gossip 协议是去中心化的,所有节点对等,节点无需知道整个网络状况,只要网络是连通的,任意一个节点就可以把消息散播到全网。

Watch

Zookeeper 的 watch 实现比较简单,就是 TCP Ping。

Long Polling(长轮询)是拉模式,客户端每隔一段时间请求拉取一次数据。

客户端发起 Long Polling,如果服务端没有数据,会等待,直到服务端有数据,或者等待到超时,返回后,客户端会再次发起 Long Polling。

多语言支持

Zookeeper 多语言客户端比较成熟。

Consul 支持 DNS 比较有意思,如果你第一次看到可能不太理解。

DNS 方式允许应用程序使用服务发现,而无需与Consul进行任何高度集成。

例如,不需要向 Consul 发送 HTTP 请求,可以使用 DNS 服务器直接通过名字查找,如 redis.service.us-east-1.consul,就会自动转查找位于 us-east-1 这个数据中心提供 redis 服务的节点。

使用DNS的方式可以在程序中集成一个DNS解析库,也可以自定义本地的DNS Server。

自定义本地 DNS Server 是指将 .consul 域的请求全部转发到 Consul Agent。

服务健康检查

心跳方式比较简单,客户端上报自己的存活状态即可。

但存活不代表健康,例如一个应用的服务层没问题,但数据库连接故障了,那么就无法正常提供服务,这就是存活但不健康。

Eureka 支持服务自定义健康检查逻辑。

Consul 支持的很全面,可以配置服务自定义的健康检查接口地址,还有完善的管理界面,可以查看所有服务和节点的健康检查状态。

本文分享自微信公众号 - 性能与架构(yogoup),作者:杜亦舒

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-12-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Linux中Nginx的实时监控

    场景 想查看Nginx的实时状态信息,如哪些请求最频繁、哪些IP访问次数多 …… 例如服务器出现带宽持续很高,就需要看下现在哪些请求的流量大 ngxto...

    dys
  • Mysql 索引你了解多少?

    前言 Mysql 的索引是我们常用的,但实际了解多少呢?下面通过几个案例小问题来测验下,后面会有答案及相关解释 测试问题 问题1 下面的索引适合这个查询吗? C...

    dys
  • W3C 带来了一个新的语言

    继 HTML, CSS, JavaScript 之后,WebAssembly 成为了第4个 Web 语言。

    dys
  • 我的天!又一个僵尸网络开源了BYOB僵尸网络开源代码

    BYOB是一个开源项目,该项目给研究人员和开发者提供了一个能够搭建和操作基础僵尸网络的框架。大家都知道,僵尸网络每年都会感染数百万台联网设备,为了研究现代僵尸网...

    FB客服
  • 网络最大流入门

    前言 网络最大流是网络流中最基础也是最重要的部分,后边的许多模型也都是由最大流问题引申而来的 最大流 在研究这个问题之前,让我们先来学习一下前置知识 可行流 设...

    attack
  • 将python程序转换成exe程序

    1、首先访问http://www.python.org/download/去下载最新的python版本。

    py3study
  • 域名quco.com近10万元被交易

    在域名圈里,短字母域名向来不缺乏青睐者,因为其简短,好记,便于输入等优点,所以价格贵也情有可原。近段时间就有一枚字母域名quco.com以一口价98...

    躲在树上的域小名
  • 深入探索WebSockets

    在2008年中期,开发人员Michael Carter和Ian Hickson特别敏锐地感受到Comet在实施任何真正强大的东西时所带来的痛苦和局限。 通过在I...

    frontoldman
  • 实时Web与WebSocket实践

    为什么实时Web这么重要?我们生活在一个实时(real-time)的世界中,因此Web的最终最自然的状态也应当是实时的。用户需要实时的沟通、数据和搜索。我们对互...

    博文视点Broadview
  • 你真的了解 i++, ++i 和 i+++++i 以及 i+++i++ 吗?

    我想大部分都知道 i++ 和 ++i的区别,i++ 就是先拿i来使用,之后再自增加1,而++i则是先自增加1,在拿i来使用,例如对于下面这两个语句,我敢保证大部...

    帅地

扫码关注云+社区

领取腾讯云代金券