• Java面试题(9) Springcloud组件介绍


    一、Spring Cloud与Dubbo的区别

    二、什么是Hystrix?简述实现机制

    三、Spring Cloud核心组件及其作用

    四、Dubbo的整体架构设计及分层

    一、Spring Cloud与Dubbo的区别

    https://blog.csdn.net/m0_37787662/article/details/120505601

    初始定位不同

    生态环境不同

    调用方式不同

    二、什么是Hystrix?简述实现机制

    Hystrix是一个帮助解决分布式系统交互时超时处理和容错的类库,它同样拥有保护系统的能力。

    Hystrix设计原则包括:资源隔离、熔断器、命令模式。

    容错限流的原理:

    • 主动超时:在调用依赖时尽快的超时,可以设置比较短的超时时间,比如2s,防止长时间的等待。
    • 限流:限制最大并发数。
    • 熔断:错误数达到阈值时,可以设置比较短的时间,比如2s,防止长时间的等待。
    • 隔离:隔离不同的依赖调用
    • 服务降级:资源不足的时候进行服务降级

    三、Spring Cloud核心组件及其作用

    服务注册与发现------NetFlix Eureka

    客户端负载均衡-------NetFlix Ribbon

    服务熔断器-----NetFlix  Hystrix

    服务网关-----NetFlix Zuul

    服务接口调用----NetFlix Feign

    服务跟踪-----NetFlix Sleuth

    聚合Hystrix监控数据-----NetFlix Turbine

    分布式配置-------Spring Cloud Config

    你所知道的微服务技术栈?

    服务注册与发现------Eureka,Zookeeper

    服务路由(API网关)-------Zuul

    服务熔断器------Hystrix

    服务负载均衡------Ribbon Nginx

    服务接口调用-----Fegin

    服务配置与管理------NetFix 公司的Archaiusm,阿里的Diamond

    服务调用------Rest RPC gRpc

    消息队列------Kafka Rabbitmq activemq

    服务配置中心管理------Spring Cloud Config

    事件消息总线------Spring Cloud Bus

    SpringCloud核心组件作用以及解决了什么问题?

    SpringCloud核心组件简单介绍

    Eureka
    Eureka是微服务架构中的注册中心,专门负责服务的注册与发现;
    每个微服务中都有一个Euraka client组件,专门负责将这个服务的服务id(serviceId)、ip、端口等信息注册到Eureka server中;
    Euraka Server是一个注册中心,该组件内部维护了一个注册表,保存了各个服务所在的机器ip和端口号等信息。
    
    Feign
    Feign主要负责与其他服务建立连接,构造请求,发起请求,获取响应等等,用来远程调用其他的服务;
    Feign使用Jdk的动态代理来针对FeignClient注解修饰的接口创建动态代理;
    调用FeignClient注解修饰的接口,实际是调用Feign创建出来的动态代理;
    根据RequestMapping等注解信息,动态构造出要请求的服务地址;
    针对该构造出来的地址,发起请求,解析响应;
    
    Ribbon
    Ribbon主要负责负载均衡,针对每次请求,Ribbon会从Euraka client服务列表中选择一个服务发起请求,均匀的把请求分发到各个服务中;
    默认使用的是Round Robin轮询算法;
    Feign使用Ribbon去获取服务信息,例如服务的ip、端口等信息,然后针对服务的信息构造并发起请求。
    
    Hystrix
    微服务架构中,存在着恐怖的服务雪崩问题,也是当服务直接互相调用,如果其中某个服务挂掉了,会导致其他服务不可用,甚至导致其他服务也挂掉了;
    Hystrix是隔离、熔断以及降级的一个框架;
    Hystrix默认是通过线程池技术对服务进行隔离,每个微服务对应一个线程池,对每个服务进行调用时,都是通过在自己的线程池中调用;
    如果某个服务挂了,hystrix就直接返回,这个过程就是熔断;
    如果某个服务挂了,hystrix就执行一个默认的方法逻辑,这个过程就是降级;
    
    Zuul
    Zuul是微服务的网关,这个组件是负责网络的路由;
    所有请求都往网关走,网关会根据请求中的特征,将请求转发给后端的各个服务;

    Spring Cloud 核心组件

    Eureka(注册中心)
    每个微服务都有一个 Eureka Client 组件,专门负责将这个服务的信息注册到 Eureka Server 中,也就是告诉 Eureka Server,自己在
    哪台机器上,监听着哪个端口。而 Eureka Server 是一个注册中心,里面有一个注册表,保存了各服务所在的机器和端口号。
    
    Feign(REST 客户端)
    Feign 是一个声明式 REST 客户端,主要是为了简便服务调用,更快捷、优雅地调用 HTTP API。主要是实现原理是用动态代理,你要是调用
    哪个接口,本质就是调用 Feign 创建的动态代理。
    
    Ribbon(负载均衡)
    Ribbon 的作用是负载均衡,会帮你在每次请求时选择一台机器,均匀的把请求分发到各个机器上,默认使用的最经典的 Round Robin 轮询
    算法(如果发起 10 次请求,那就先让你请求第 1 台机器、然后是第 2 台机器、第 3 台机器,接着再来—个循环,第 1 台机器、第 2 台
    机器。。。以此类推)
    
    Hystrix(熔断器)
    微服务框架是许多服务互相调用的,要是不做任何保护的话,某一个服务挂了,就会引起连锁反应,导致别的服务也挂。Hystrix 是隔离、熔
    断以及降级的一个框架。如果调用某服务报错(或者挂了),就对该服务熔断,在 5 分钟内请求此服务直接就返回一个默认值,不需要每次都
    卡几秒,这个过程,就是所谓的熔断。但是熔断了之后就会少调用一个服务,此时需要做下标记,标记本来需要做什么业务,但是因为服务挂
    了,暂时没有做,等该服务恢复了,就可以手工处理这些业务。这个过程,就是所谓的降级。
    
    Zuul(服务网关)
    Zuul,也就是微服务网关。这个组件是负责网络路由的。假设你后台部署了几百个服务,现在有个前端兄弟要来调用这些服务,难不成你让他把
    所有服务的名称和地址全部记住,这是不现实的,所以一般微服务架构中都必然会设计一个网关,所有请求都往网关走,网关会根据请求中的一
    些特征,将请求转发给后端的各个服务。而且有一个网关之后,还有很多好处,比如可以做统一的降级、限流、认证授权、安全,等等。
    
    总结
    第一步:服务注册
    第二步:服务发现
    第三步:负载均衡
    第四步:服务调用
    第五步:隔离、熔断与降级
    第六步:网关路由
    总结详细讲解:各个服务启动时,Eureka Client 都会将服务注册到 Eureka Server,并且 Eureka Client 还可以反过来从 Eureka 
    Server 拉取注册表,从而知道其他服务在哪里。服务间发起请求的时候,基于 Ribbon 做负载均衡,从一个服务的多台机器中选择一台。基
    于 Feign 的动态代理机制,根据注解和选择的机器,拼接请求 URL 地址,发起请求。发起请求是通过 Hystrix 的线程池来走的,不同的服
    务走不同的线程池,实现了不同服务调用的隔离,避免了服务雪崩的问题。如果前端、移动端要调用后端系统,统一从 Zuul 网关进入,由 
    Zuul 网关转发请求给对应的服务。

    四、Dubbo的整体架构设计及分层

    五个角色

    注册中心registry:  服务注册与发现

    服务提供者provider:调用远程服务

    服务消费者consumer:调用远程服务

    监控中心monitor: 统计服务的调用次数和调用时间

    容器container:服务允许容器

    调用流程

    1、container容器负载启动、加载、允许provider

    2、provider在启动时,向registry中心订阅自己所需的服务

    3、consumer在启动时,向registry中心订阅自己所需的服务

    4、regisitry返回服务提供者列表给consumer,如果有变更,registry将基于长连接推送变更数据给consumer

    5、consumer调用provider服务,基于负载均衡算法进行调用

    6、consumer调用provider的统计,基于短连接定时每分钟一次统计monitor

    分层:
    接口服务层(service):面向开发者

    配置层(config):对外配置接口,以serviceConfig和ReferenceConfig为中心

    服务代理层(registry):封装服务地址的注册和发现,以服务URL为中心

    路由层(Cluster):封装多个提供者的路由和负载均衡,并桥接注册中心。

    监控层(Monitor):RPC调用次数和调用时间监控

    远程调用层(Protocal):封装RPC调用

    信息交换层(Exchange):封装请求响应模式,同步转异步

    网络传输层(Transport):抽象mina和Netty为统一接口,统一网络传输接口

    数据序列化层(Serialize):数据传输的序列化和反序列化

    Spring Cloud 和 Dubbo的对比

    底层协议:SpringCloud基于HTTP协议,Dubbo基于TCP协议,决定了Dubbo的性能相对会比较好

    注册中心:SpringCloud使用的Eureka,dubbo推荐使用zookeeper

    模型定义:dubbo将一个接口定义为一个服务,SpringCloud则是将一个应用定义为一个服务

    SpringCloud是一个生态,而Dubbo是SpringCloud生态中关于服务调用一种解决方案(服务治理)

  • 相关阅读:
    FastAPI 学习之路(十)请求体的字段
    FastAPI 学习之路(九)请求体有多个参数如何处理?
    FastAPI 学习之路(八)路径参数和数值的校验
    FastAPI 学习之路(七)字符串的校验
    FastAPI 学习之路(六)查询参数,字符串的校验
    【2021-09-09】被人说自大是有原因的
    【2021-09-08】连岳摘抄
    【2021-09-07】管理工作,得上下同步
    【2021-09-06】连岳摘抄
    【2021-09-05】连岳摘抄
  • 原文地址:https://www.cnblogs.com/nastu/p/15850002.html
Copyright © 2020-2023  润新知