1. 什么是spring cloude eureka?
Eureka是spring cloude基于Netflix Eureka二次封装的服务注册中心,主要用于各个微服务实例的注册及发现。
2. spring cloude eureka服务架构
3. Spring Cloud Eureka组成
1)服务端
服务端是Eureka的核心,也被叫做注册中心。各个微服务实例将自己注册到注册中心,注册信息包括服务的主机与端口号、服务版本号、通讯协议等一些附加信息。各个服务实例之间不再通过服务实例的地址互相访问,而是通过服务实例名从注册中心中获取相应的服务列表,采用轮询的方式进行访问达到负载均衡。
同时服务端可采用集群的方式部署,服务端既做注册中心,也可以将自己注册到其他注册中心,以保证一个节点发生故障时,其他节点能够继续维护架构的可用性。当Eureka Server短时间内与大量的客户端失去连接时,Eureka Server会进入“自我保护模式”,该模式允许服务实例继续注册与发现而且不会删除已经失去连接的客户端,等待客户端心跳恢复正常,又可以正常被使用。
通过修改 eureka.server.enable-self-preservation=true开启自我保护模式,生产环境建议开启
2)客户端
客户端将自己注册到服务端,即作为服务提供者也作为服务消费者,注册到服务端的客户端能够被其他客户端发现并调用,同时也可以调用其他提供服务的客户端实例。
客户端会拉取、更新和缓存 Eureka Server 中的信息,当Server出现问题时,Client仍然可以通过缓存的服务列表获取服务。
客户端定时(默认30秒)向服务端发送心跳以维持连接(续约),当服务端长时间(默认90秒)没有收到客户端心跳,则会删除该客户端实例。
4. Eureka Instance安全性问题
Eureka Instance的状态及健康指标默认通过Spring Boot Actuator提供的/info及/health两个endPoints来监控。可以通过eureka.client.healthcheck.enabled=true来开启Eureka客户端的健康检查,避免服务注册成功出现问题时,还对外宣称自己是UP状态。
5. Eureka和Zookeepr的区别
Eureka和Zookeeper分别保证了CAP(一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance))原则中的AP和CP。
Eureka集群中的多个Server之间没有主次之分,当Eureka集群中某个服务端出现问题时,其他服务端仍然可以提供注册和发现服务。客户端会从缓存中获取服务列表,可能会出现该客户端访问的服务列表中服务不在存活的服务端注册列表中,服务仍可用,但出现信息不一致的情况。
Zookeeper中存在Leader和Follower两种角色,当Leader出现问题时,会重新选举新的Leader,需要花费时间,这段时间内Zookeeper不对外提供服务,最终虽然保证了一致性,但可用性会受到影响。