eureka原理
服务注册
EurekClient端会调用EurekServer端的接口吧自己的信息当做参数传过去,EurekServer 拿到信息放到ConcurrentHashMap中存放,然后返回204代表成功;
ConcurrentHashMap<String, Map<String, Lease>> registry
Eureka服务续约(心跳)
EurekClient是正常关闭
会向EurekServer发送一个通知剔除该服务
续约
EurekClient端默认30s发送一个心跳去续约,把该地址的最后更新时间改为当前时间。EurekServer端会有一个定时任务线程 ,默认是60s去检查,谁没在30s内继续发送心跳就剔除该服务。
Eureka服务保护机制
当15分钟内,心跳失败的服务大于一定比例时(默认85%),会触发自我保护机制,也就是说不会剔除这些服务
Nacos原理
和Eurek基本一样
Nacos服务续约(心跳)
Nacos Client是正常关闭
会向NacosServer发送一个通知剔除该服务
续约
Nacos Client默认每隔5s发送心跳续约包,修改续约时间为当前系统时间
当前系统时间-最后续命时间>30s, 则认为该地址过期 从nacos服务器中移除该地址。
Nacos服务器端 判断如果续约超时15s 的情况下不会移除该缓存地址,而发布超时事件
Nacos服务器端 判断如果续约超时30s 的情况下才会移除该缓存地址
Nacos配置中心
原理
客户端启动的时候会从配置中心服务端拉取配置文件缓存起来,并且建立一个长链接,当配置文件发生变化的时候就会同步给客户端
集群的时候
nacos要连接同一个数据库,保证数据的一致。
CAP定律
**一致性©**在分布式系统中,如果服务器集群,每个节点在同时刻访问必须要保持数据的一致性。
**可用性(A)**集群节点中,部分节点出现故障后任然可以使用 (高可用)
**分区容错性§**在分布式系统中网络会存在脑裂的问题,部分Server与整个集群失去节点联系,无法组成一个群体。
只有在CP和AP选择一个平衡点
eureka和nacos的区别
eureka 采用Ap模式设置,去中心话的,没有主从之分,采用互相注册的原理,保证可用性。
Ap
假如在某台服务器暂时不可用的情况下, 服务依然可用,等这个节点恢复的时候可能出现数据不一致的现象;
nacos 支持Ap(默认)和Cp两种模式
cp模式在集群的时候会选举一个领导节点,所有的写请求都是交给领导节点完成的,采用日志形式同步给子节点,当领导节点挂了就会选举一个新的领导节点,而且选举的时候所有节点是不能访问的,从而保证的数据的一致性
cp
假如leader节点短暂时间不可用的时候,不会重新选举,而是整个集群会不可用,从而保证数据的一致性现象;
feign原理
1 在服务启动时,通过aop对加@FeignClient注解的接口,生成一个代理代理对象(jdk动态代理),注入到Spring IOC容器中,
2 当我们调用接口的方法的时候,就会调用到代理对象里面的方法,方法里面会通过服务名称去注册中心去拿到地址在本地去调用接口然后返回
gateway和zuuld区别
网关能干什么
限流
跨域
黑名单
token验证
Zuul
底层是用servlet,处理的是http请求
没有提供异步支持,限流等均由hystrix支持
Gateway
底层基于Netty实现的,不能和Servlet一起使用,不然会报错。
提供了异步支持,还有限流。
gateway 常用词汇
路由,权重,过滤器
Sentinel 与hytrix区别
隔离:信号量隔离
降级:当某个接口报错的时候降级返回,规定的状态码
限流:对某个接口限流 (控制线程数或者每秒钟最多多少个线程数(qps))