服务发现与注册 Eureka 设计理念

Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。

1. AP 优于CP

eureka是在部署AWS的背景下面设计的,其设计认为,在云端,特别是大规模部署情况下面,失败是不可以避免的,可能是因为eureka自身部署失败或者网络分区等情况导致服务不可用,这些问题是不可以避免的,要解决这个问题就需要eureka在网络分区的时候,还能够正常提供服务,因此eureka选择满足availability这个特性。

eureka选择了A也就必须放弃C,也就是说在eureka中采用最终一致性的方式来保证数据的一致性问题,因此实例的注册信息在集群的所有节点之间的数据都不是强一性的,需要客户端能支持负载均衡算法及失败重试等机制。

2. Peer to Peer 架构

一般而言在分布式系统的数据有多个副本之间的复制方式,可以分为主从复制和对等复制

主从复制 Master-Slave模式

一个主副本和多个从副本,所有数据的写操作都是提交到主副本,最后由主副本更新到其他的从副本(常采用异步更新),通常写是整个系统的瓶颈所在。

对等复制 即Peer to Peer模式

副本之间不分主从,任何的副本都可以接受写数据,然后副本之间进行数据更新。在对等复制中,由于每一个副本都可以进行写操作,各个副本之间的数据同步及冲突处理是一个比较难解决的问题。

3. Zone 及 Region 设计

使用region来代表一个独立的地理区域,比如us-east-1、us-east-2,、us-west-1等。在每一个region下面还分为多个AvailabilityZone,一个region对应多个AvailabilityZone,不同的region之间相互隔离。默认情况下面资源只是在单个region之间的AvailabilityZone之间进行复制,跨region之间不会进行资源的复制。

AvailabilityZone看成是region下面的一个一个机房,各个机房相对独立,主要是为了region的高可用考虑的,一个region下面的机房挂了,还有其他的机房可以使用。

一个AvailabilityZone可以设置多个server实例,他们之间构成peer节点,然后采用peer to peer的复制模式进行数据复制。

4. Self Preservation 设计

在分布式系统设计中,通常需要对应用实例的存活进行健康检验,这里比较难处理的就是网络偶尔抖动或者短暂不可用而造成的误判。因此eureka设计了self preservation机制。server和client之间有一个租约,client定期发送心跳来维护这个租约,表示心跳还活着,eureka通过当前注册的实例数量,去计算每分钟应用从应用实例接受到的心跳数量,如果近一分钟接受到的租约的次数小于等于指定的阈值,则关闭租约失效剔除,禁止定时任务剔除失效的实例,从而保护注册信息。

自我保护模式的设计哲学是:在不确定节点是否可用的情况下,尽可能保留节点!

原创文章,作者:晴川运维,如若转载,请注明出处:https://baike.qcidc.com/14741.html

(0)
晴川运维晴川运维
上一篇 2025年10月7日
下一篇 2025年10月7日

相关推荐

  • 讲解一下C 语言布尔类型

    C语言就没有真正的布尔类型,布尔类型实际上是用数值型(int,float,char等)表示的,不能自动打印为true或者false,只能自己写代码实现。 C 语言标准(C89) 没…

    Linux系统 2025年6月8日
  • 在磁盘中查看MySQL 表大小

    我想知道 MySQL 表在磁盘上占用多少空间,但看起来很琐碎。不应该在 INFORMATION_SCHEMA.TABLES 中提供这些信息吗?没那么简单! 这个看似简单的问题实际上…

    Linux系统 2025年9月23日
  • Linux下查看端口占用具体方法

    Linux如何查看端口占用?在Linux系统中查看端口占用可以使用lsof和netstat命令,下面为大家讲解一下Linux下查看端口占用具体方法。 1、lsof -i:端口号 用…

    Linux系统 2025年6月26日
  • Linux下部署VPS

    VPS技术,将一台服务器分割成多个虚拟专享服务器的优质服务。实现VPS的技术分为容器技术,和虚拟化技术 。在容器或虚拟机中,每个VPS都可选配独立公网IP地址、独立操作系统、实现不…

    Linux系统 2025年6月13日
  • ldconfig命令使用方法

    ldconfig是一个动态链接库管理命令,其目的为了让动态链接库为系统所共享,本篇文章重点为大家讲解一下ldconfig命令使用方法,有需要的小伙伴可以参考一下。 ldconfig…

    Linux系统 2025年6月19日
  • 通过GIt备份Linux文件

    我们使用 Linux 服务器时,有时候需要备份配置文件。传统的备份方法是复制文件,改名,并在文件结尾插入一些字符。但,如果我们使用 Git ,我们可以很轻松的管理配置文件的备份。 …

    Linux系统 2025年10月11日
  • 如何使用 Linux anacron 命令

    与其手动执行重复性的任务,不如让 linux 为你做。 在 2021 年,人们有更多的理由喜欢 Linux。在这个系列中,我将分享使用 Linux 的 21 个不同理由。自动化是使…

    Linux系统 2025年6月8日
  • 非常实用的Vim插件

    工欲善其事必先利其器,windows 环境下有诸多好用的 IDE,但在 linux 环境下,可供选择的工具并不多,但是 VIM 作为一款可扩展文本编辑工具,配合丰富的功能插件,同样…

    Linux系统 2025年9月21日
  • Linux下复用外部shell脚本

    Linux开发中,经常会编写shell脚本来执行一些任务,通常是一个脚本只做一件事,随着任务的增加,脚本会越来越多,可复用的地方也会逐渐增加,这时就需要提取出脚本中的公共的功能放到…

    Linux系统 2025年10月22日
  • 如何使用Python实现多任务版的udp聊天器

    本篇文章将为大家分享一下如何使用Python实现多任务版的udp聊天器,结合具体案例形式分析了Python基于udp的聊天器功能相关实现与使用技巧,有需要的小伙伴可以参考一下。 一…

    Linux系统 2025年6月26日

发表回复

登录后才能评论