一、SpringCloud介绍
1、SpringCloud简介
SpringCloud是基于SpringBoot的一整套实现微服务的框架。它提供了微服务开发所需的管理、服务发现、断路器、智能路由、微代理、控制总线、全局所、决策精选、分布式会话、集群状态管理等组件。
官方:https://spring.io/projects/spring-cloud
中文:https://www.springcloud.cc/
2、Spring Cloud Netflix简介
该项目是Spring Cloud的核心子项目,是对Netflix公司一些列开源产品的封装。它为Spring Boot应用提供了自配置的整合,只需要通过简单的注解,就可以快速地在Spring Cloud的应用中使用起来。
主要提供的模块包括:服务发现注册(Eureka)、客户端负载均衡(Ribbon)、断路器(Hystrix)、智能路由(Zuul)、声明性REST客户端(Feign)、外部配置(Archaius)等。
二、Eureka简介
1、Eureka是什么
Eureka是Spring Cloud Netflix的一个子模块,也是核心模块之一。Eureka是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移。
服务注册于发现对于微服务架构来说非常重要,有了服务发现与注册,只需要使用服务的标识符,就可以访问到服务,而不需要修改服务调用的配置文件了。功能类似于dubbo的注册中心,比如zookeeper。
2、Eureka两个组件
Eureka包含两个组件:Eureka Server和Eureka Client
1、Eureka Server:提供服务注册功能,各节点启动后,会在Eureka Server中进行注册,这样Eureka Server中的服务注册表将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。
2、Eureka Client:是一个Java客户端,用于简化与Eureka Server的交互,客户端同时也具备一个内置的、使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会向Eureka Server发送心跳(默认周期为30秒)。如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)。
3、Eureka Server之间将会通过复制的方式,完成数据的同步。Eureka还提供了客户端缓存的机制,即使所有的Eureka Server都挂掉了,客户端依然可以利用缓存中的信息,消费其他服务的API。Eureka通过心跳检测、健康检查、客户端缓存等机制,确保了系统的高可用性,灵活性和可伸缩性。
3、Eureka高层架构
Eureka Server:提供服务注册和发现
Eureka Provider:服务提供方,将自身服务注册到Eureka,从而是服务消费方能够找到。
Service Consumer:服务消费方,从Eureka获取注册服务列表,从而能够访问服务。
4、Eureka高层架构2
进一步展示了三个角色之间的交互:
1、Service Provider会向Eureka Server做Register(服务注册)、Renew(服务续约)、Cancel(服务下线)等操作。
2、Eureka Server之间会做服务注册的同步,从而保证状态一致。
3、Service Consumer会从Eureka Server获取注册服务列表,并调用服务。
三、Eureka基本概念
1、Register:服务注册
服务提供者向Eureka Server注册,注册发生在第一次心跳,它提供关于自己的元数据(例如主机、端口、健康指标URL等)给Eureka Server。
2、Renew:服务续约
Eureka客户端会每隔30秒向Eureka Server发送一次心跳来续约,通过续约来告知Eureka Server该Eureka客户端仍然活着。通常Eureka Server如果在90秒仍没有收到来自某Eureka客户端的续约,则会将该客户端从注册列表删除。建议不要修改续约间隔。
注册信息和续约会被复制到Eureka Server集群中的所有节点,来自任何区域的Eureka Client都可查阅注册表信息(每30秒一次)。根据注册列表中的信息,Application Client可调用Application Service来消费服务。
3、Fetch Registries:获取注册列表信息
Eureka Client从Eureka Server获取注册表信息,并将其缓存在本地。Eureka Client会使用该注册表信息对远程服务进行调用。该注册列表信息每30秒更新一次,若查到的信息与本地不一致,则更新本地注册表信息。
如果由于某种原因导致本地注册表信息不能及时获取,则Eureka Client会及时调用Eureka Server来获取整个注册表信息。Eureka Server缓存注册表信息,默认Eureka Client使用压缩JSON格式来获取注册列表信息。
4、Cancel:服务下线
Eureka Client在服务关闭时,向Eureka Server发送取消请求。Eureka Server收到cancel请求后,会把该Eureka Client从注册信息表中删除。
5、Eviction:服务剔除
Eviction用来定期(默认每60秒)在Eureka Server检测失效的服务,查询在指定时间内没有renew的服务,默认失效时间为90秒,若90秒都没有心跳,则把该Eureka Client从Eureka Server注册信息表中删除。
四、为什么注册服务这么慢
1、注册延迟
Eureka Client一启动,不是马上向Eureka Server注册,它有一个延迟向Eureka Server注册的时间,也就是定期向Eureka Server发送心跳,默认是30秒。
2、Eureka Server的响应缓存
Eureka Server维护了一个每30秒更新一次的响应缓存。可通过更改配置 eureka.server.responseCacheUpdateIntervalMs来修改。所以,当某个Eureka Client刚刚注册,如果未更新到缓存,那么他不会出现在返回给客户端的注册信息列表中。
3、Eureka Server刷新缓存
Eureka Client保留了Eureka Server注册表信息到缓存,然后每30秒调用一次Eureka Server更新一次缓存。
4、在极端情况下可能需要3次心跳,Eureka Client才能发现服务
5、不要修改心跳时间间隔
可以使用eureka.instance.leaseRenewalIntervalInSeconds更改期限,这将加快客户端连接到其他服务的过程。在生产中,最好坚持使用默认值,因为服务器内部有一些计算可以 对租赁更新期进行假设。
五、Eureka和Zookeeper比较
来源:CSDN
作者:shijinghan1126
链接:https://blog.csdn.net/shijinghan1126/article/details/103654466