Eureka是一种基于rest的服务,主要用于aws云,为了实现中间层服务的负载均衡和故障转移。
分为Eureka server和Eureka client
Eureka主要是可以提供负载均衡。还有心跳检测,服务注册到Eureka,然后服务向Eureka服务端每30秒发送一次心跳检测,更新一次租约。如果客户端无法续订租约几次,则会在大约90秒内将其从服务器注册表中删除。注册信息和续订将会复制到群集中的所有Eureka节点。来自任何区域的客户端都可以查找注册表信息(每30秒发生一次)以查找其服务(可能位于任何区域中)并进行远程调用。
Eureka中分为region和zone,来自aws的概念。
Eureka中的region是固定的,就那几个。一个region中有好多zone
服务会通过服务注册表,注册到Eureka
Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样 Eureka Server中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直接看到。
Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也具备一个内置的、使用轮询负载算法的负载均衡器。
在应用启动后,将会向Eureka Server发送心跳(默认周期为30秒)。如果Eureka Server 在多个心跳周期内没有接受到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认是3个周期,也就是90秒)
Eureka Server之间将会通过复制的方式完成数据的同步。
Eureka还提供了客户端缓存的机制,即使所有的Eureka Server都挂掉,客户端依然可以利用缓存中的信息消费其他服务的API。
综上,Eureka通过心跳检测、健康检查、客户端缓存等机制。确保了系统的高可用性、灵活性和伸缩性。
自己编写一个Eureka server注册中心,步骤如下:
1.只需要引入Eureka的server jar包,spring-cloud-starter-eureka-server
2.然后在启动类上加上两个注解@springbootApplication和@EnableEurekaServer
3.application.yml的配置
spring:
application:
name: @project.name@ #建议名称全部用小写
server:
port: 7000
eureka:
environment: @package.environment@
instance:
appname: monitor-server
leaseRenewalIntervalInSeconds: 5
server:
enable-self-preservation: true # 关闭自我保护模式(缺省为打开)
eviction-interval-timer-in-ms: 5000 # 续期时间,即扫描失效服务的间隔时间(缺省为60*1000ms)
client:
registryFetchIntervalSeconds: 5
registerWithEureka: false #表示不要注册自己
fetch-registry: false # 表示是否从Eureka Server获取注册信息,默认为true。因为这是一个单点的Eureka Server,不需要同步其他的Eureka Server节点的数据,故而设为false。
serviceUrl:
defaultZone: http://127.0.0.1:${server.port}/eureka/ # 设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址。默认是http://localhost:8761/eureka ;多个地址可使用 , 分隔。
这样一个注册中心就完成了。
将服务注册到Eureka注册中心,步骤如下:
1.引入jar包spring-cloud-starter-eureka
2.在启动类上添加注解@EnableEurekaClient和@SpringBootApplication
其实作用就是服务发现。在此说一下@EnableEurekaClient和@EnableDiscoveryClient的区别。其实两者的作用都是用于服务发现的,但是注册中心是有多种实现的,可以有dubbo,console,Eureka等。当注册中心是Eureka时,用注解@EnableEurekaClient。当注册中心是其他时,用@EnableDiscoveryClient。
3.配置application.yml
spring:
application:
name: @project.name@
server:
port: 7006
eureka:
environment: @package.environment@
instance:
prefer-ip-address: true #启用ip配置 这样在注册中心列表中看见的是以ip+端口呈现的
leaseRenewalIntervalInSeconds: 5
statusPageUrlPath: /info
healthCheckUrlPath: /health
client:
healthcheck:
enabled: true
registryFetchIntervalSeconds: 5
serviceUrl:
defaultZone: http://127.0.0.1:7000/eureka # 设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址。默认是http://localhost:8761/eureka ;多个地址可使用 , 分隔。
spring-boot-starter-actuator是监控系统健康情况的工具。
看篇文章https://www.jianshu.com/p/481134c3fab7
Eureka深入学习
Eureka的高可用,其实就像跟zookeeper一样,做成Eureka集群,让他们之间相互注册。