赞
踩
在Springcloud
项目中,服务提供者对外提供服务,服务消费者进行消费服务,如果微服务很多,就需要一个服务管理中心去统一管理服务,而消费者在调用服务时就可以去这个管理中心中去查找需要调用的服务进行调用。
Eureka
在Springcloud
中就作为最常用的服务注册与发现的组件,下面主要记录一下Eureka
的基本原理与使用方法。
Eureka
是Netflix
的核心模块之一,它采用CS架构,基于CAP理论中的AP原则,是一种高可用的服务注册中心, 用于服务发现和故障转移。
Eureka的原理简述如下:
Eureka Server
启动后,当微服务客户端(Eureka Client
/Application Client
)启动时,根据配置将服务信息(服务主机ip、端口、服务名称等)注册到Eureka Server
中;
当Eureka客户端(Eureka Client
/Application Client
)启动时,根据配置将服务信息(服务主机ip、端口、服务名称等)注册到Eureka Server
中;
Eureka Server 通过Replicate复制方式向Eureka集群中其他各个节点的Eureka Server同步服务信息;
服务消费者调用微服务时,先去Eureka Server中去查找可用的服务;
Eureka Server 通过查找可用的服务信息,并返回给Eureka Client进行调用。
Eureka Server启动后,Eureka Client每隔30s便会给Eureka Server发送心跳,以表示自己的可用状态,如果在指定的心跳周期内(默认90s),没有收到某个Client的心跳,造成server没有收到client心跳的原因大体分为两种:
基于上述两点,Eureka Server无法确定是由于哪种原因导致的收不到Client的心跳,所以Eureka Server会启动自我保护机制:不再删除和注销任何微服务的注册信息,即使该服务真的不可用。当网络恢复正常(所有的Client都能正常发送心跳)时,Eureka Server将推出自我保护。
Eureka的另一种自我保护机制:当超过15分钟没有接收到85%的Client的心跳时,EurekaServer认为出现网络分区错误,则:
分布式数据库系统满足CAP定理,由于网络分区原因,P(Partition Tolerance分区容错)是必须要解决而且保证的,C(Consistant强一致性)和A(Avalibale可用性)不可能同时满足,所以需要根据需要进行两者之间的权衡。Eureka是AP原则实现的,保证了集群的高可用。
Eureka集群的每个节点都是平等的,没有master-slave(主从)关系,当其中某个节点down掉之后,其他的节点是没有影响的,继续提供服务,Eureka中的负载均衡器会寻找其他的可用的节点继续提供服务,除非所有节点都不可用。
Zookeeper是基于CP原则实现的,集群采用master-slave模式,当master节点出现故障后,其他的slave节点将会进行选举新的mater,这个选举过程一般在30s-120s,此段时间内,整个集群是不可用的。
Eureka是基于AP原则实现的,具有高可用性。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
server:
port: 7010
eureka:
instance:
hostname: eureka7001.com #服务主机名
client:
register-with-eureka: false #不把自己注册进注册中心
fetch-registry: false #发现服务时不用检查自己
service-url:
# 单机时只需指定自己
# defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka
#集群中不必指定自己,只需指定其他的节点的访问地址 ,中间用逗号分隔
defaultZone: http://eureka7002.com:7002/eureka,http://eureka7003.com:7003/eureka
@SpringBootApplication
@EnableEurekaServer // 启用EurekaServer
public class App {
public static void main( String[] args ) {
SpringApplication.run(App.class, args);
}
}
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
eureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka,http://eureka7003.com:7003/eureka
instance:
appname: aitao-sevice-usercenter8003
prefer-ip-address: true # 可以显示微服务主机ip
@EnableEurekaClient
注解。Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。