内容简介: 在之前的文章中,我们详细介绍了Eureka的服务注册与发现,今天呢我们重点来做一下Eureka的集群配置,捎带介绍一下CAP原则及eureka和zookeeper的对比
Eureka集群配置:
项目结构:
文章图片
为了简便,我们这里只搭建两个Eureka服务注册中心,具体代码可以参考之前的Eureka的服务注册与发现
修改Eureka server配置(pom.xml): 修改7001的application.yml
#Eureka配置
eureka:
instance:
hostname: eurekaServer7001.com
client:
register-with-eureka: false #不向服务器注册自己
fetch-registry: false #false 自己为注册中心,true客户端
service-url:
#单机:defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
#集群,多个服务以‘,’隔开:defaultZone: http://${eureka.instance.hostname}:7002/eureka/,http://eurekaServer7003.com:7003/eureka/
defaultZone: http://eurekaServer7002.com:7002/eureka/
修改7002的application.yml
#Eureka配置
eureka:
instance:
hostname: eurekaServer7002.com
client:
register-with-eureka: false #不向服务器注册自己
fetch-registry: false #false 自己为注册中心,true客户端
service-url:
#单机:defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
#集群,多个服务以‘,’隔开:defaultZone: http://${eureka.instance.hostname}:7002/eureka/,http://eurekaServer7003.com:7003/eureka/
defaultZone: http://eurekaServer7001.com:7001/eureka/
修改服务提供者配置 应对eureka集群,服务提供者需要向集群中的所有结点注册自己,修改配置文件
#Eureka 配置
eureka:
client:
service-url:
#集群注册中心:defaultZone: http://eurekaServer7001.com:7001/eureka/,http://eurekaServer7002.com:7002/eureka/
defaultZone: http://eurekaServer7001.com:7001/eureka/,http://eurekaServer7002.com:7002/eureka/
instance:
instance-id: peo8081
至此Eureka server的集群搭建完毕
CAP原则 CAP是什么?
C(consistency) : 强一致性
A(availability) : 可用性
P(partition tolerance) : 分区容错性
CAP的三进二:AP\CP\AC
CAP理论的核心:
- 一个分布式系统不能同时满足一致性、可用性、分区容错性
- 根据CAP原则,将NoSql数据库分为满足三进二的三大类
- AC: 单点集群:满足一致性,可用性系统,可扩展性比较差
- CP: 满足一致性,分区容错性的系统,可用性不是特别高
- AP:满足可用性,分区容错性,一致性相对较差
ZOOKEEPER:保证的是CP原则,即当我们向服务中心请求资源时,我们可以容忍服务中心返回的是几分钟前的信息,但不接受服务器直接挂掉不可用,也就是说,一致性相对高于可用性,BUG:zk存在一个问题,集群中当master节点挂掉,集群会进行一次内部选举,选一个新的节点作为master,这个时间是很长的(30~120s),在此期间集群处于不可用状态,导致服务瘫痪,这是不可容忍的。
EUREKA:保证的是AP原则,相对zookeeper来说eureka的各个节点都是平等的,几个节点挂掉并不会影响服务的使用,客户端再向服务中心注册服务时,只要有一个节点可用,就不影响服务的注册,另外eureka提供自我保护机制,当一段时间(15min)内超过85%的服务没有心跳时,eureka会认为客户端与服务中心出现网络故障,eureka会采用以下方式处理:
- eureka不再移除服务列表中因为长时间没有心跳而应该过期的服务
- eureka仍可以接受新服务的注册即查询请求,但不会同步到其他节点,保证当前节点可用,
- 一旦其他节点恢复,再同步
【SpringCloud Eureka集群及CAP原则对比Zookeeper】源码地址:下载地址