尚硅谷springcloud2020day3(p24-30)

今天是2020-12-5
继续springcloud的学习,早上的学习可以说推翻了以前记得很多知识,果然什么东西都得持续的去学习。
一。服务发现
想要启动服务发现功能,你需要:
1.引入eureka-client依赖
2.启动类标注注解@EurekaDiscoveryClient
3.由于视频还没讲feign,目前使用springcloud的DiscoveryClient类: List services=discoveryClient.getServices();
services.forEach(log::info);
log.info("***********");
List instances=discoveryClient.getInstances(“CLOUD-PAYMENT-SERVICE”);
for (ServiceInstance s :
instances) {
log.info(s.getServiceId()+s.getHost()+s.getPort()+s.getUri());
}
可以看到,第一个集合获取了服务的列表,第二个集合则是根据服务名获取对应名称可能的一或多个实例,因为服务提供者可能是多台服务器的集群。
二。eureka的自我保护机制
(1)要说注册中心的自我保护机制,应该先从服务提供者的续约机制说起:
服务提供者启动后,向注册中心注册自己的信息,但是有如下配置需要注意:
1.#服务的续约时间间隔,长时间不向注册中心发送http请求会被删除
eureka.instance.lease-renewal-interval-in-seconds=30
2.#服务的失效时间,如果超过指定时间注册中心还未收到续约请求,服务就会被删除,一般是心跳时间的三倍
eureka.instance.lease-expiration-duration-in-seconds=90
在这里我们可以看到,注册服务后,提供者默认每隔30秒向注册中心发送一次http请求–心跳,如果注册中心距上一次心跳超过90秒还没收到下一次心跳,那么就将这个服务从服务列表中删除。
(2)说完了服务提供者,再看注册中心这边:
1.#这个值指定注册中心删除失效服务的时间间隔,现在默认是0秒,默认就是不删除服务,一般配置为60秒
eureka.server.eviction-interval-timer-in-ms=60000
2.#此值为false就会关闭自我保护机制,生产环境不要关
eureka.server.enable-self-preservation=false
3.#Eureka Server 开启自我保护的系数,默认:0.85
renewal-percent-threshold
从这些配置我们可以看到:
1.注册中心每隔60秒扫描一次服务列表,删除掉超时未发送心跳的服务
2.如果一定时间内丢失大量心跳,注册中心认为与客户端节点之间产生了网络分区故障,注册中心开启自我保护机制,开启条件:
比如我们有两个实例,实例数t为2,自我保护系数threshold是0.85,30秒续约一次,那么注册中心预计每分钟收到的请求数B=tx2x0.85=3,如果一分钟内注册中心收到请求数A=tx2=4个请求,B<A,也就是最后一分钟收到的请求数大于预计的85%,那么一切正常,可以删除失效的服务。
如果一个实例出现故障,没有定时续约,t还是2,此时B还是3,但是只有一个服务续约,导致A=1x2=2,B>A,注册中心收到的请求数低于预计的85%,此时注册中心开启自我保护机制,开启的效果是:
1、Eureka Server不再从注册列表中移除因为长时间没收到心跳而应该过期的服务。
2、Eureka Server仍然能够接受新服务的注册和查询请求,但是不会被同步到其它节点上,保证当前节点依然可用,属于。
3、当网络稳定时,即心跳数量恢复正常,当前Eureka Server新的注册信息会被同步到其它节点中。
但是注意,值B是会进行更新的,有如下情况会更新:
1.新服务注册到注册中心时,t+1,比如上面的B,注册后t是3,B=tx2x0.85,取整为5,这就可能导致:服务刚注册进来,B更新了,但是服务还没发送续约请求,导致A还是4,这个时候就会触发自我保护机制,这也是我学习实践过程中遇到的情况
2.服务注销时,t-1
3.注册中心每15分钟定时更新一次t
虽然网上很多都说是15分钟内收到的心跳数大量减少,但是只是15分钟定时更新一次预期心跳数B。首先注册中心默认60秒扫描一次服务,如果发现失效服务并删除,那么就要更新B的值,其次A是最后一分钟收到的心跳数,所以说当一分钟内收到的心跳数大量减少时,也就是突然A<B,就会开启自我保护机制,不过默认是五分钟后才会在界面给你显示提示信息。
三。使用zookeeper替换eureka
想要替换注册中心,你需要:
1.将eureka-server依赖替换成spring-cloud-starter-zookeeper-discovery
2.spring-cloud-starter-zookeeper-discovery排除自带的zookeeper3.5.3
3.导入zookeeper3.4.10,同时排除其中的slf4j-api以及slf4j-log4j12两个引起日志冲突的包
4.改动application.yml,将eureka.client.service-url.defaultZone换成cloud.zookeeper.connect-string
目前也了解到,eureka是保证AP,而zookeeper保证CP。
四。安装consul
今天也是被自我保护机制折磨了半天,才算确定最终的概念,网上很多文章也是很搞人,找了很久才找到讲的好点的文章,eureka一系列讲的挺全,但是感觉太多东西也很难记忆,重点还是学阿里的nacos吧。想了想还是决定先把consul安装上,然后访问8500端口就可以看到可视化界面,这里也是吐槽zookeeper就没有,consul和eureka都有。
linux安装,使用的是阿里云centos8,使用docker技术,安装及可视化过程:
1.docker pull consul
2.docker run -d --restart=always -p 8500:8500 -v /data/consul:/consul/data -e CONSUL_BIND_INTERFACE=‘eth0’ --name=consulone consul agent -server -bootstrap -ui -client=‘0.0.0.0’
3.阿里云安全组开放8500端口
4.访问:你的虚拟机ip:8500,即可看到可视化界面
疲惫,今天算是结束了,感觉nacos…估计更难
ps:今天疲惫的重要原因是:自己想试eureka自我保护机制,还开秒表计时,一开始很好,一分钟过去我一刷新,预期三个,实际两个,嗯?自我保护提示呢?继续等了四分多钟才刷出来,我还不信邪继续搞,最后搞了大半个小时,一看文章说,一分钟后发现实际请求小于预期是会开自我保护,但是可视化界面要等五分钟才出提示,我整个人顿时哭笑不得,但这也算实践了一下吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值