cloud已经使用许久,今天想系统的复习一下cloud系列。from eureka!
本文中所有的斜体,表示需要替换的值。所有的源码,删除info日志。
整体架构
首先,让我们来看一下Eureka的架构图:
Eureka的架构图
如图,为3个区域(Regin)的服务。而在每一个区域(Region)内,有多个可用区(Availability Zone),一个可用区多个Eureka组成。而这些Eureka共同构成了Eureka集群。
其中,Producer用来提供微服务,Customer用来消费微服务。在一般的企业架构中,你可以理解为Customer调用Producer就好比Controller调用Service层一样。而Customer在实际中,对应一些可以直接向页面提供接口的web层,和一些运行调度的服务层。比如我司现在的层级调用为:
web层—调用—>facade层(EurekaClient)—指向—>Service层(该层操作数据库)。
Customer调用Producer是通过spring.application.name
属性来进行调用的。
Producer默认会每隔30s发起一次心跳,然后进行更新注册列表信息,续约等操作。
而区域之间的Eureka Server、可用区内的Eureka Server都是会进行信息复制的。确保如果有一个注册中心挂掉了,其他的注册中心上的注册列表也是可用的。
ps:Eureka支持AP,即可用性和分区容错性,而当下互联网对于各个微服务的首先保证是服务的可用。ZK是支持CP(一致性和分区容错性,要求过于严格,适用于对数据一致性要求高的行业)。
Eureka Client
Client功能和源码分析链接:
Eureka Server
Server功能和源码分析链接:
进阶应用
错误部分
spring cloud eureka搭建时:
错误一为:
DiscoveryClient_ADMIN-SERVER/192.168.1.10 was unable to refresh its cache! status = Cannot execute request on any known server
或者错误为:
ERROR DiscoveryClient-<你的主机IP>- was unable to send heartbeat!
解决:
第一步:配置host文件(如果配置用localhost,可以忽略这一步)
127.0.0.1 eureka-service admin-server admin-client admin-client2
其中eureka-service
是你定义的spring.application.name的值。
第二步:
在client启动类上添加@EnableEurekaClient
注解,在server上添加@EnableEurekaServer
注解。
第三步:
在server端添加如下配置,让server不注册自己,不会自己从自己身上获取信息列表:
eureka:
client:
register-with-eureka: false
fetch-registry: false
网友评论