EurekaClient启 ,EurekaSever就会存储上EurekaClient的注册信息。
当EurekaClient调用服务时,本地没有注册信息的缓存时,去EurekaServer中去获取注册信息。
EurekaClient会通过心跳的方式去和EurekaServer进行连接。(默认30sEurekaClient会发送一次心跳请求,如果超过了90s还没有发送心跳信息的话,EurekaServer就认为你宕机了,将当前EurekaClient从注册表中移除)
eureka:
instance:
lease-renewal-interval-in-seconds: 30 #心跳的间隔
lease-expiration-duration-in-seconds: 90 # 多久没发送,就认为你宕机了
EurekaClient会每隔30s去EurekaServer中去更新本地的注册表
eureka:
client:
registry-fetch-interval-seconds: 30 # 每隔多久去更新一下本地的注册表缓存信息
Eureka的自我保护机制,统计15分钟内,如果一个服务的心跳发送比例低于85%,EurekaServer就会开启自我保护机制
eureka:
server:
enable-self-preservation: true # 开启自我保护机制
CAP定理,C - 一致性,A-可用性,P-分区容错性,这三个特性在分布式环境下,只能满足2个,而且分区容错性在分布式环境下,是必须要满足的,只能在AC之间进行权衡。
如果选择CP,保证了一致性,可能会造成你系统在一定时间内是不可用的,如果你同步数据的时间比较长,造成的损失大。
Eureka就是一个AP的效果,高可用的集群,Eureka集群是无中心,Eureka即便宕机几个也不会影响系统的使用,不需要重新的去推举一个master,也会导致一定时间内数据是不一致。
BASE理论是对CAP的扩充,在强一致性和高可用性无法同时满足的情况下,寻求一种中间解决方案。其中就有最终一致性的表述。
BASE名称由来:
也就是允许有一定的异常。比如第一次刷出现网络异常,再次刷新就好了。保持基本可用就行。到底允许多大的异常占比,就看用户的接受度了。
柔性状态,或者软状态,也就是一种中间状态;其实就是在无法做到强一致性的情况下,在数据还没有同步之前,允许存在的一个状态。
也就是经过一段时间之后,达成一致。这里的一段时间可以是几秒、也可能是几分钟、甚至几小时。(此过程是异步进行的)
自己能马上读取到自己写入的内容。比如博客,提交之后,自己马上可以看到,其他人可能要等一会才能看到。
因果一致性,也就是一种逻辑顺序上的一致性。比如先有问题才有回答。因为一致性不是很及时、或者存在地区差异导致数据同步差异,例如:北京网友提问,上海网友看到了并回答了问题。因为某些原因,上海网友的回答快。读同步到了南京地区,但北京的问题还没有同步到南京。这时就保证先有问题才能看到回答。问题没有同步、回答同步了,逻辑上也不能只显示回答,而没有问题。这时就要进行因果一致性。
在一致性研究上,还出现过很多类似的一致性名词,类似:Sequential 和 Linearizability
BASE理论是CAP的实践指导理论。因为对于系统来说,最好就是同时满足CAP,但是强CAP满足不了,我们就折中选择弱CAP,也就是BASE理论。
在BASE理论中,我们关注的是最终一致性。需要研究的也就是最终一致性。