面试题答案
一键面试服务注册原理与机制
- 服务提供者注册:
- 服务启动时,会向Eureka Server发送一个HTTP POST请求,将自身的元数据(如服务名称、IP地址、端口号、健康检查URL等)封装在请求体中,发送到Eureka Server的
/eureka/apps/
+<serviceName>
接口。 - Eureka Server接收到注册请求后,会将该服务实例信息保存到一个名为
registry
的ConcurrentHashMap中,这个Map以服务名称为键,服务实例列表为值。
- 服务启动时,会向Eureka Server发送一个HTTP POST请求,将自身的元数据(如服务名称、IP地址、端口号、健康检查URL等)封装在请求体中,发送到Eureka Server的
- 集群间数据同步:
- 在Eureka集群环境下,Eureka Server之间会相互注册。当一个Eureka Server接收到新的服务注册信息时,它会通过Replication机制将该信息同步到其他Eureka Server节点。
- 同步过程基于HTTP协议,通过调用其他Eureka Server的
/eureka/replicate
接口,将新注册的服务实例信息发送过去,确保各个节点的数据一致性。
服务发现原理与机制
- 服务消费者获取服务列表:
- 服务消费者启动时,会向Eureka Server发送一个HTTP GET请求,请求地址为
/eureka/apps/
+<serviceName>
,以获取特定服务的实例列表。 - Eureka Server接收到请求后,从
registry
中取出对应服务的实例列表,并返回给服务消费者。
- 服务消费者启动时,会向Eureka Server发送一个HTTP GET请求,请求地址为
- 缓存机制:
- 为了减少对Eureka Server的请求压力,服务消费者会在本地缓存从Eureka Server获取的服务实例列表。
- 缓存有一定的过期时间,默认30秒。过期后,服务消费者会再次向Eureka Server获取最新的服务实例列表。
心跳检测原理与机制
- 服务提供者发送心跳:
- 服务提供者在注册到Eureka Server后,会周期性地(默认30秒)向Eureka Server发送HTTP PUT请求,请求地址为
/eureka/apps/
+<serviceName>
+/
+<instanceId>
,告知Eureka Server自己仍然存活。
- 服务提供者在注册到Eureka Server后,会周期性地(默认30秒)向Eureka Server发送HTTP PUT请求,请求地址为
- Eureka Server处理心跳:
- Eureka Server接收到心跳请求后,会更新对应服务实例的最后心跳时间。
- 如果Eureka Server在一定时间(默认90秒)内没有收到某个服务实例的心跳,会将该实例从
registry
中剔除,并通过Replication机制同步到其他Eureka Server节点,同时向服务消费者发送服务实例变更的通知,让服务消费者更新本地缓存的服务实例列表。