1. Eureka与传统无服务注册中心对比
1.1. 无服务注册中心:
-1.1.1. 需要知道在代码中hard code请求具体的ip、端口和具体的路由。
2. 当接口系统服务器不固定,随时可能增删机器时,我们得频繁修改nginx或者代码。
@Autowired
private RestTemplate restTemplate;
@GetMapping("index")
public Object getIndex(){
return restTemplate.getForObject("http://localhost:8090/",String.class,"");
}
1.2. eureka
1. 服务提供者启动时:定时向Eureka-server注册自己的服务信息(服务名、ip、端口等)
2. 服务消费者启动时:后台定时拉取eureka-server中存储的服务信息。
3. ```
#yml文件配置
spring:
application:
name: helloserver
```
4. ```
//服务调用代码
@Autowired
private RestTemplate restTemplate;
@GetMapping("index")
public Object getIndex(){
//HELLOSERVER为服务名
return restTemplate.getForObject("http://HELLOSERVER/",String.class,"");
}
```
![](https://img.haomeiwen.com/i271180/a157b83946bcf4ee.png)
2. eureka提供zone的概念。
- 如果消费者是在广东,而服务器有在广东、上海、背景,那么可以在配置文件中设置分区。使服务响应更加高效。
eureka.client.availability-zones.beijing:zone-1
eureka.client.service-url.zone = http://localhost:100001/eureka
3. 当有多个服务提供者(简称服务)注册到注册中心时,我们消费者去调用可以会调用到不同的服务中去。
4. client服务启动时服务如何注册到eureka中?
- 在client初始化的时候,会初始化一大堆的定时任务。
- 定时任务中,包含了一个叫HeartBeat的定时任务。
- 心跳(heartbeat)定时任务启动后,会定时的给服务注册中心发起一次请求(应该是请求自身服务),判断当前服务实例有没有注册到eureka上面去。如果没有注册,将返回404回来。如果已经注册,将返回服务实例是否正常的结果。
- 如果请求返回404 。那么将调用register方法,将当前服务实例注册到eureka中。
5. 服务端如何保存这些信息?
- 通过给eureka服务器发送http请求,从而来将自己的服务实例存放到register(一个concurrentHashMap)中。
6. 消费者如何根据服务名称发现服务实例?
- 启动时通过后台的定时任务,定期从eurekaServer拉取服务信息,缓存到消费者本地内存中。
7. 如何构建高可用的eureka集群?
在eureka的高可用状态下,这些注册中心是对等的,他们会将互相将注册在自己的实例同步给其他的注册中心。
- eureka有什么机制防止在同步过程中陷入同步循环(不断同步实例到其他注册中心)?
在发送同步信息时,会带上isReplication参数,用于判断是客户端发过来的数据。还是其他注册中心同步过来的数据。如果isReplication为true则将跳过注册步骤。
8. 心跳和服务剔除机制是什么?
- 心跳:客户端定期发送心跳请求包到eurekaServer
- 一旦出现心跳长时间没有发送,那么eureka会采用剔除机制,将服务实例改为Down状态。
- 前提是eureka没有开始保护机制,如果enable-self-preservation:true开启了保护机制,那么即使超时,eureka也不会将服务下线。
9. eureka自我保护模式是什么?
- 在配置文件中配置enable-self-preservation:true,即开启了保护机制,那么即使超时没有给服务发送心跳,eureka也不会将服务下线。
默认情况下,如果Eureka Server在一定时间内没有接收到某个微服务实例的心跳,Eureka Server将会注销该实例(默认90秒)。但是当网络分区故障发生时,微服务与Eureka Server之间无法正常通信,以上行为可能变得非常危险了——因为微服务本身其实是健康的,此时本不应该注销这个微服务。
Eureka通过“自我保护模式”来解决这个问题——当Eureka Server节点在短时间内丢失过多客户端时(可能发生了网络分区故障),那么这个节点就会进入自我保护模式。一旦进入该模式,Eureka Server就会保护服务注册表中的信息,不再删除服务注册表中的数据(也就是不会注销任何微服务)。当网络故障恢复后,该Eureka Server节点会自动退出自我保护模式。
综上,自我保护模式是一种应对网络异常的安全保护措施。它的架构哲学是宁可同时保留所有微服务(健康的微服务和不健康的微服务都会保留),也不盲目注销任何健康的微服务。使用自我保护模式,可以让Eureka集群更加的健壮、稳定。
10. Eureka注册表多级缓存架构有了解过吗?
11. 微服务注册中心的注册表如何更好的防止读写并发冲突?
12. Nacos&Eureka&Zookeeper集群架构都有脑裂问题吗?
13.eureka服务名称区分大小写吗?
不区分。
网友评论