Eureka设计理念

作为一个服务注册以及发现中心,主要解决一下几个问题

服务实例如何注册到服务中心

服务启动时候,调用Eureka Server的REST API 的register方法去注册该应用实例的信息。对于java应用通过Netflix的Eureka Client封装API去调用;对于SpringCloud应用通过spring-cloud-starter-netflix-eureka-server然后基于springboot自动配置自动实现服务信息的注册

服务实例如何从服务中心剔除

正常请款改下服务实例在关闭应用的时候,通过钩子方法或者其他生命周期回调方法去调用API的do-register方法来删除自身服务的实例信息。另外解决服务实例挂掉或者异常情况时没有及时删除自身信息得问题。Eureka server要求Client端进行续约,也就是发送心跳来证明反腐无实例是否存活是健康的并且可以调用的。如果租约超过一定时间没有进行续约操作,Eureka server端就会主动提出。这一点Eureka server采用的就是分布式应用里经典的心跳模式。

服务实例信息的一致性问题

服务注册一级发现中心不可能是单点的,name服务实例注册信息如何在集群环境下保持执行呢?下面主要分AP优于CP、Peer to Peer架构、Zone及Region设计、SELF PRESERVATION设计四个方面来阐述。

AP优于CP

分布式系统CAP三个特行:consistency一致性、Availability可用性、Partition Tolerance分区容忍性

对于分布式系统来说,一般网络环境相对不可控,出现网络分区是不可避免的,因此系统必须具备分区容忍性。在这个前提下分布式系统设计则在AP以及CP之间进行选择,不过不能理解CAP三者之间必须三选二。

ZooKeeper他是"C"P,他默认并不是严格的强一致性。

Eureka实在不是在AWS的背景下设计的,其设计者认为在云端特别是在大规模部署的情况下,失败是不可能避免的,可能是因为Eureka本身部署失败注册的服务不可用,或者又去网络分区导致服务不可用,因此不能回避这个问题,则需要Eureka在网络分区的时候,还能够正常提供服务注册一级发现功能,因此Eureka选择满足Availability这个特性。有文中指出,在实际生产实践中,服务注册以及发现中心保留可用以及火气的数据总比丢失掉可用的数据好。这样的话应用实例注册信息在集群所有节点并不是强一致性的,这就需要客户端能够支持负载均衡以及失败重试。在Netflix的生态中有ribbon提供这个功能。

Peer to Peer架构

分布式系统数据在多个副本之间的复制方式可分为主从复制以及对等复制

主从复制:Master-Slavem模式,主服务同步更新到其他副本。更新方式可以细分为同步更新、异步更新、同步以及异步混合。对于主从复制模式来讲,写操作的压力都在祝福本上,他是整个系统的瓶颈,但是从副本可以帮主副本分担读请求。

对等复制:即Peer to Peer复制模式,副本之间部分主从,任何副本都可以接口写操作然后每个副本之间相互进行数据更新。由于任何副本都可以接口写操作,不存在写操作压力瓶颈,但各个副本之间的数据同步以及冲突处理是比较棘手的问题。

数据同步:单个Eureka server启动时,执行syncUp操作然后复制到其他peer节点,在执行复制操作的时候,通过http head中加入HEADER_REPLICATION标识为复制请求,避免其他peer节点接收到请求无厘头进行复制操作导致死循环。

冲突处理:Eureka采用lastDirtyTimestamp标识【类似版本号机制】和heartbeat【renewLease兜底操作-重新进行register操作】来解决

Zone及Region设计

Eureka Server原生支持了Region以及AZ,由于资源在Region之间默认是不会复制的,因此Eureka Server的高可用主要就在于Region下面的AZ。

Eureka Client支持preferSameZone,也就是获取服务的serviceUrl有限拉去跟应用实在痛处一个AZ的服务端地址列表,一个AZ可以设置多个服务端实例,他们之间构成peer节点然后此阿勇Peer to Peer的复制模式

Netflix的Rebbon组件针对多个AZ提供了ZoneAffinity支持,允许在客户端路由或者网管路由时,有限选择与自身实例处于同一个AZ的服务实例

SELF PRESERVATION设计

客户端和服务端通过心跳来维持租约,Eureka通过当前注册实例数去计算每分钟应该从应用实例接受到的心跳数。如果浸一分钟接受的心跳书小于制定阈值的话,则关闭逐月失效剔除,禁止定时任务剔除失效的实例,从而保护注册信息。




到底什么是Partition Tolerance分区容忍性

一个分布式系统里面,节点组成的网络本来应该是连通的。然而可能因为一些故障,使得有些节点之间不连通了,整个网络就分成了几块区域。数据就散布在了这些不连通的区域中。这就叫分区。当你一个数据项只在一个节点中保存,那么分区出现后,和这个节点不连通的部分就访问不到这个数据了。这时分区就是无法容忍的。提高分区容忍性的办法就是一个数据项复制到多个节点上,那么出现分区之后,这一数据项就可能分布到各个区里。容忍性就提高了。

解决分区容错性->复制->引发C->引发A

当没有出现分区问题的时候,系统就应该有完美的数据一致性和可用性。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,036评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,046评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,411评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,622评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,661评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,521评论 1 304
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,288评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,200评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,644评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,837评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,953评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,673评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,281评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,889评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,011评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,119评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,901评论 2 355

推荐阅读更多精彩内容