一、Eureka基本概念:
1.服务注册与发现原理,在任何rpc远程框架中,都会有个注册中心
2.注册中心概念:存放服务地址相关信息(接口地址)
3.SpringCloud找给你支持以下三种注册中心
3.1 Eureka
3.2 Consul(Go语言编写)
3.3 Zookeeper
4. Dubbo支持常用二种Redis和Zookeeper
5.Eureka原理(订单服务与会员服务)
5.1 首先启动注册中心(eureka注册中心)
5.2 启动会员服务
5.3 会员服务在启动的时候,会把当前服务基本信息比如服务地址和端口,以别名方式注册到注册中心(member,value:127.0.0.1:8080)
5.4 消费者在调用接口时,使用服务别名去注册中心获取实际rpc远程调用地址
5.5 消费者获取实际rpc远程调用地址后,使用本地HttpClient技术实现调用
5.6 地址会缓存在jvm内存中,默认eureka每30秒更新一次服务调用地址;微服务负载均衡:本地负载均衡
5.7 spirngCloud中使用哪些技术调用服务接口:feign客户端和restTemplate
5.8 默认rest方式开启负载均衡功能,如果以服务别名调用服务接口,必须使用注解@LoadBalanced
5.9 还能使用这种方式,将yaml配置的值附给类变量
二、搭建注册中心集群
1.微服务rpc远程调用框架最核心的是什么? 注册中心
2.如果让你来设计一套微服务rpc框架远程调用框架,你是如何设计的?核心在于服务治理--注册中心
3.如果注册中心因为原因,出现故障,如何解决,可能导致整个微服务环境不可用
解决办法:搭建注册中心集群--大型互联网公司 注册中心都是集群版本,没有单机版本
4.搭建eureka集群环境,至少二台以上
思路:eureka搭建集群原理使用相互注册原理,形成一组相互注册的注册中心,从而实现数据相互的同步,达到高可用效果
如下图:二个注册中心,相互注册对方(多台):服务名称一定要相同
eureka集群注册中心例图:
然后注册和订阅,都要关联这个集群地址,但是在注册过程中,只会保证一台注册中心有对应服务信息数据,当8100注册中心宕机后,启动转移同步数据到9100上去的。
三、Eureka自我保护机制
1.自我保护机制有二种角色:EurekaClient(注册客户端)、EurekaServer(注册中心服务端)
2.为什么会产生Eureka自我保护机制:为了防止EurekaClient可以正常运行,但是与EurekaServer网络不通的情况下,EurekaServer不会把EurekaClient服务剔除
3.原理:默认情况下EurekaClient定时向EurekaServer端发送心跳包(大概5秒),如果EurekaServer在一定时间内没有收到EurekaClient发送心跳包,便会直接从服务注册中剔除该服务.(默认90S),同样的话,在短时间内丢失大量服务实例心跳,这时候EurekaServer会开启自我保护机制,不会剔除该服务
4.为什么最终还是会剔除该服务:因为EurekaClient的服务已关闭的这种情况下,没有剔除该服务,那其他服务还能调用该服务,但是实际上该服务已不可用,页面会报错、
5.本地环境:建议禁止自我保护环境(可能自己会多次重启EurekaClient);生产环境:建议开启自我保护机制
这个配置放到EurekaServer
这个配置放到EurekaClient
关闭之后,发现EurekaClient已经剔除了该注册,但是短时间内,访问的时候还会报错,因为地址缓存在jvm内存中30s
6.如果在生产环境上发现注册服务宕机,1.先人为的把注册服务剔除掉 2.本地调用应该重试机制,重试多次还不行(保证接口网络幂等性问题),轮询到下一台服务器上 3.做好服务的降级功能