Python 官方文档:入门教程 => 点击学习
目录Eureka大白话解析1.Eureka 介绍2. Eureka 的工作细节2.1 Eureka Server2.2 Eureka ClientEureka分区策略第一步:背景和概
笔记补录:
spring cloud Eureka 是 spring Cloud Netflix 微服务套件的一部分,基于 Netflix Eureka 做了二次封装,主要负责实现微服务架构中的服务治理功能。
服务治理是微服务架构中必不可少的一部分,阿里开源的 dubbo 框架就是针对服务治理的。服务治理必须要有一个注册中心,除了用 Eureka 作为注册中心外,我们还可以使用 Consul、Etcd、ZooKeeper 等来作为服务的注册中心。
Eureka 由两部分组成:服务端和客户端,服务端就是注册中心,用来接收其它的服务注册,客户端是一个java客户端,用来注册,并可以实现负载均衡等功能。 Eureka 的搭建和集群请点击查看这篇文章。
Eureka图解如下:
从图中可以看出Eureka有三个角色:
Eureka Server
:注册中心Eureka Provider
:服务提供者Eureka Consumer
:服务消费者注册中心就是管理所有服务的信息和状态,12306 就好比一个注册中心,顾客就好比调用的客户端,当他们需要坐火车时,就会在 12306 网站上查询余票,有票就可以购买,然后获取火车的车次、时间等,最后出发。程序也是一样,当你需要调用某一个服务的时候,你会先去 Eureka 中去拉取服务列表,查看你调用的服务在不在其中,在的话就拿到服务地址、端口等信息,然后调用。
注册中心带来的好处就是,不需要知道有多少提供方,你只需要关注注册中心即可,就像顾客不必关心有多少火车在开行,只需要去 12306 网站上看有没有票就可以了。
为什么 Eureka 比 Zookeeper 更适合作为注册中心呢?主要是因为 Eureka 是基于 AP 原则构建的,而 ZooKeeper 是基于 CP 原则构建的。在分布式系统领域有个著名的 CAP 定理,即 C 为数据一致性;A 为服务可用性;P 为服务对网络分区故障的容错性。这三个特性在任何分布式系统中都不能同时满足,最多同时满足两个。Zookeeper 有一个 Leader,而且在这个 Leader 无法使用的时候通过 Paxos(ZAB)算法选举出一个新的 Leader。这个 Leader 的任务就是保证写数据的时候只向这个 Leader 写入,Leader 会同步信息到其他节点。通过这个操作就可以保证数据的一致性。
想要保证 AP 就要用 Eureka,想要保证 CP 就要用 Zookeeper。
Dubbo 中大部分都是基于 Zookeeper 作为注册中心的。Spring Cloud 中当然首选 Eureka。
Eureka Server主要对外提供了三个功能:
Eureka Client 主要是来简化每一个服务和Eureka Server 之间的交互。Eureka Client 会自动拉取、更新以及缓存Eureka Server 中的信息,这样,即便Eureka Server 所有节点都宕机,Eureka Client 依然能够获取到想要调服务的地址(但是地址可能不准确)。
2.2.1 服务注册
服务提供者将自己注册到服务注册中心(Eureka Server),需要注意,所渭的服务提供者,只是一个业务上的划分,本质上他就是一个 Eureka Client 。当 Eureka Client 向 Eureka Server 注册时,他需要提供自身的一些元数据信息,例如IP地址、端囗、名称、运行状态等等。
2.2.2 服务续约
Eureka Client 注册到 Eureka Server 上之后,事情还没有结束,刚刚开始而已。注册成功后,默认情况下,Eureka Client 每隔30秒就要向 Eureka Server 发送一条心跳消息,来告诉Eureka Server 我还在运行。如果 Eureka Server 连续90秒有沿有收到Eureka Client 的续约消息(连续三次没发送),它会认为Eureka Client已经线了,会将掉线的Eureka Client从当前的服务注册列表中剔除。
服务续约,有两个相关的属性(一般不建议修改):
# 表示服务的续约时间,默认是30秒
eureka.instance.lease-renewal-intetval-in-seconds=30
# 服务失效时间,默认是90秒
eureka.instance.lease-expiration-duration-in-seconds=90
2.2.3 服务下线
当 Eureka Client 下线时,它会主动发送一条消息,告诉Eureka Server,我下线了。
2.2.4 获取注册表信息
Eureka Client 从Eureka Server 上获取服务的注册信息,将其缓存在本地。本地客户端在需要调用远程服务时,会从该信息中查找远程服务所对应的IP地址、端囗等信息。Eureka Client 上缓存的服务注册信息会定期更新(30秒),如果 Eureka Server 返回的注册表信息与本地缓存的注册表信息不同的话,Eureka Client 会自动处理。
这里,也涉及至两个属性,一个是是否允许获取注册表信息:
eureka.client.fetch-reGIStry=true
Eureka Client 上缓存的服务注册信息,定期更新的时间间隔,默认30秒:
eureka.client.registry-fetch-interval-seconds=30
背景:用户量比较大或者用户地理位置分布范围很广的项目,一般都会有多个机房。这个时候如果上线SpringCloud服务的话,我们希望一个机房内的服务优先调用同一个机房内的服务,当同一个机房的服务不可用的时候,再去调用其它机房的服务,以达到减少延时的作用。
概念:region:能够简单理解为地理上的分区。好比亚洲地区,或者华北地区,再或者北京地区等等,没有具体大小的限制,根据项目具体的状况,能够自行划分region。 zone:能够简单理解为 region 内的具体机房,好比说 region 划分为华北地区,而后华北地区有两个机房,就能够在此 region 之下划分出 zone1、zone2 两个 zone eureka 也借用了 region 和 zone 的概念架构
如图所示,有一个 region:华北地区,下面有两个机房,机房A 和机房Burl
服务注册相关:
eureka: client: # 尽可能向同一区域的 eureka 注册,默认为true prefer-same-zone-eureka: true #地区 region: huabei availability-zones: huabei: zone-1,zone-2 service-url: zone-1: Http://Eureka的Ip地址:8761/eureka/ zone-2: http://Eureka的Ip地址:8761/eureka/
当存在多个注册中心时,选择逻辑为cdn
注册失败后每隔一个心跳时间,会再次尝试。it
为了保证服务注册到同一个 zone 的注册中心,必定要注意 availability-zones 的顺序,必须把同一 zone 写在最前面
eureka: instance: # 服务和注册中心的心跳间隔时间,默认为30s lease-renewal-interval-in-seconds: 30 # 服务和注册中心的心跳超时时间,默认为90s lease-expiration-duration-in-seconds: 90 metadata-map: # 当前服务所属的 zone zone: zone1
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。
--结束END--
本文标题: Spring Cloud Eureka(全面解析) 大白话
本文链接: https://lsjlt.com/news/141275.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0