springCloud随笔

⚫ Spring Cloud的使用和组件,谈谈你的理解?
Eureka是微服务架构中的注册中心,专门负责服务的注册与发现。Eureka Client组件专门负责将服务的信息注册到Eureka Server中,而Eureka Server是一个注册中心,里面有一个注册表,保存了各服务所在的机器和端口号。各个服务启动时,Eureka Client都会将服务注册到Eureka Server,并且Eureka Client还可以反过来从Eureka Server拉取注册表,从而知道其他服务在哪。
Feign的关键机制是使用了动态代理。如果你对某个接口定义了@FeignClient注解,Feign就会针对这个接口创建一个动态代理;接着你要是调用那个接口,本质就是会调用Feign创建的动态代理;Feign的动态代理会根据你在接口上的@RequestMapping等注解,来动态构造出你要请求的服务的地址;针对这个地址,发起请求,解析相应;
Ribbon的作用是负载均衡,会帮你在每次请求时选择一台机器,均匀的把请求分发到各个机器上,默认使用Round Robin轮询算法;
Hystrix是隔离、熔断以及降级的一个框架。发起请求是通过Hystrix的线程池来走的,不同的服务走不同的线程池,实现了不同服务调用的隔离,避免了服务雪崩的问题;
Zuul也就是微服务网关。这个组件是负责网络路由的,一般微服务架构中都必然设计一个网关在里面,像android、ios、pc前端、微信小程序、h5等,不用关心后端有几百个服务,就知道有一个网关,所有请求都往网关走,网关会根据请求中的一些特征,将请求转发给后端的各个服务。有一个网关之后,还有很多好处,比如做统一的降级、限流、认证授权、安全等等。

⚫ Dubbo和zookeep的关系
分布式的项目,server(消费)层与 service(供给)层被拆分了开来, 部署在不同的tomcat中, 我在server层需要调用 service层的接口,但是两个运行在不同tomcat下的服务无法直接互调接口,那么就可以通过zookeeper和dubbo实现。就好比把动物放到动物园,我们要看了直接去动物园就行。而不能直接去动物生活的地方去看,会有性命安全之忧(比如你去看老虎)。
Dubbox的实现原理图如下:

节点角色说明:
 Provider: 暴露服务的服务提供方。
 Consumer: 调用远程服务的服务消费方。
 Registry: 服务注册与发现的注册中心。
 Monitor: 统计服务的调用次调和调用时间的监控中心。
 Container: 服务运行容器。
调用关系说明:
 0. 服务容器负责启动,加载,运行服务提供者。
 1. 服务提供者在启动时,向注册中心注册自己提供的服务。
 2. 服务消费者在启动时,向注册中心订阅自己所需的服务。
 3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
 4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
 5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

posted on 2021-03-28 18:30  凹凹凸凸  阅读(38)  评论(0编辑  收藏  举报

导航