微服务
为什么要将微服务注册到nacos?
为了更好的查找这些服务
再nacos中服务端如可向nacos注册中心续约的?
每5s发送一次消息
nacos如何判断服务端的状态?
每5s接受到一次服务端的消息,15s未接收消息判断为失联,30s未接受消息删除该服务端
服务启动时如何找到服务启动注册配置类?
服务启动之后就会每5s向nacos发送消息,nacos获取服务发送的信息,进行注册/续约
服务消费方是如何调用服务方提供的服务的?
通过RestTemplate对象通信
spring
@Bean注解的作用(
一般位于配置类内部,描述相关的方法,用于告诉spring此方法的返回值要交给spring管理,bean名字默认为方法名,如需指定名字可以使用@Bean(bean的名字)最多的应用场景是整合第三方的资源,对象
@Autowired注解的作用
此注解用于描述属性,构造方法,set方法等 ,用于告诉spring框架,按照一定的规则为属性进行DI操作,默认先按属性,再按方法参数类型查找对应的对象,假如只找到一个,则直接注入,类型为多个相同类型时,还会按照属性名或者方法名进行值的注入,加入名字也不同。不能确定唯一的对象,就会报错
负载均衡
@loadBalanced的作用是什么?
用于描述RestTemplate对象,用于告诉spring框架,在使用RestTemplate进行使用服务时会被一个拦截器拦截,然后再拦截器内部启动负载均衡
Nacos中负责负载均衡的算法是如何实现的?
通过Ribbon实现,Ribbon中定义了一些负载均衡的算法,然后基于这些算法中从服务实例中获取一个实例为消费发放提供服务
ribbon是什么?
是betfix公司提供的负载均衡客户端,一般用于服务的消费方法
Ribbon可以解决什么?
基于负载均衡的策略进行服务调用时,所有的负载均衡都会实现IRule接口
我们可以自己定义负载均衡策略吗?
基于IRule接口进行策略定义,可以参考NacosRule进行实现
Ribbon内置的负载策略有哪些?
8种:
RoundRobinRule线性负载均衡,轮询调度,如果一个服务连续10次都没有获取到服务,会发出警告
RandomRule随机选取
BestAvailableRule选择一个并发最小的服务端
WeightedResponseTimeRule根据相应时间分配权重,相应越慢,权重越小,选中概率越低
AvailabilityFilteringRule过滤掉一直被标记为失败的类,和高并发的类
ZoneAvoidanceRule 从最佳区域实例集合服务中寻找一个新能最优的服务分配
RetryRule在配置时间段内当选择server不成功,则重新选择一个用的server
NacosRule 按照随机与配置的权重选择服务器
Feign 调用过程分析
1通过@EnableFeignCleints注解告诉springcloud,启动Feign Starter组件
Feign Starter 在形目中的启动过程种注册全员配置,扫描包下所由@FeignClien注解描述的接口,然后由系统底层创建接口实现类(JDK代理类),并购新建类的对象,然后交给spring管理(注册IOC容器)
接口被调用时被动态代理类逻辑拦截,,将@FeignClient请求信息通过编码器生成Reques对象,基于此对象进行远程过程调用
请求对象经Ribbon进行负载均衡,挑选出一个健康的server实例(instance)
通过Client携带Request调用远端服务返回请求响应
通过解码器生成Response返回客户端,将信息流解析成为接口,返回数据
为什么使用feign?
基于Feign可以更加友好的实现服务调用,简化服务消费方对服务提供方方法的调用。
@FeignClient注解的作用是什么?
告诉Feign Starter,在项目启动时,为此诸结藐视的接口创建实现类,代理类
Feugn方式的调用,底层负载均衡是如何实现的?
通过Ribbon
@EnblaeFeignCleints注解的作用是什么(描述配置类,例如启动类)
总结
什么是注册中心?
用于记录服务信息的一个web服务,例如淘宝平台,滴滴平台,美团外卖平台....
注册中心的核心对象
服务提供方,服务消费方,注册中心-Registry
市面上常见的注册中心:
Google consul Alibaba Nacos
微服务架构下的项目构建过程?
通过聚合工程
Nacos安装,启动,服务注册,发现机制及实现过程
Feign的基本用于及底层调用原理?
Nacos是什么?提供了什么特性(服务端注册,发现,配置)
你为什么选择NAcos?(活跃度,稳定,性能,学习成本)
Nacos在windous种的初步配置?(application.properties访问数据库的数据源)
nacos服务注册的基本过程?(服务启动时发送web请求)
Nacos服务消费的基本过程?(服务启动时获取服务实例,然后调用服务)
Nacos服务负载均衡逻辑及设计实现(Ribbon)
注册中心的核心数据是什么?(服务的名字和它对应的网络地址)
注册中心中心核心数据存储为什么采取读写锁(底层安全和性能)
Nacos健康检查的方式?(基于心跳包机制进行实现)
Nacos是如何保障高可用的?(重试,本地缓存,集群)
Feeign是什么,他的应用是怎样的,fegin应用过程种的代理对象是如何创建的?(JDK)
Feign方式的调用过程,其负载均衡是如何实现的?(Ribbon)