SpringCloud框架的复习(面试)

SpringCloud的概念:       

        SpringCloud,我们都知道它是微服务的一个框架, 但它又不仅仅是一个框架 , 它更像是在springboot基础上的一份工具包的集合, 是为了方便开发者更方便的开发 , 旨在让开发者更容易地构建分布式系统服务,尤其是微服务架构的应用。它提供了许多开箱即用的特性,如服务发现、配置管理、智能路由、断路器、负载均衡、微代理、控制总线、一次性令牌、全局锁、领导选举、分布 式会话、集群状态等。

        我们来看看springcloud光放是如何形容的::

Spring Cloud 为开发人员提供了一些工具,可以快速构建分布式系统中的一些常见模式(例如配置管理、服务发现、断路器、智能路由、微代理、控制总线、短期微服务和合约测试)。分布式系统的协调导致了样板模式,使用 Spring Cloud 开发人员可以快速建立实现这些模式的服务和应用程序。它们可以在任何分布式环境中很好地工作,包括开发人员自己的笔记本电脑、裸机数据中心和托管平台,如 Cloud Foundry。

他包含了那些功能呢?

Spring Cloud 专注于为典型用例提供良好的开箱即用体验,并为其他用例提供扩展性机制。

  • 分布式/版本控制配置

  • 服务注册和发现

Eureka:Spring Cloud Netflix项目的一部分,用于服务的自动注册与发现。

Consul:由HashiCorp开发,除了服务发现外,还支持健康检查和KV存储。

  • 路由

  • 服务到服务呼叫

  • 负载均衡

    • Ribbon:客户端负载均衡器,通常与Feign或RestTemplate一起使用。
      • LoadBalancerClient:Spring Cloud Load Balancer提供的负载均衡抽象。
  • 断路器和容错

    • Hystrix:Spring Cloud Netflix项目的一部分,提供断路器模式,防止雪崩效应。

      • Resilience4j:轻量级的故障恢复库,提供断路器、重试、缓存、批量执行等功能。
  • 分布式消息传递

  • 短期微服务(任务)

  • 消费者驱动和生产者驱动的合同测试

以上更多还是springcloud光放已经集成了的 , 但国内目前还是使用springcloud Allibaba使用的更多,Alibaba还包含nacos这个服务发现和注册中心

SpringCloud的生命周期:

因为,springcloud是在springboot的基础上的 , 所以springcloud的生命周期中自然包含了很多springboot的步骤 :

Spring Cloud 项目启动时的生命周期:

  1. Classpath扫描: 当应用启动时,Spring Boot首先会扫描classpath下的所有类,寻找带有@SpringBootApplication注解的主配置类。这个注解包含@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan,它们分别用于定义配置类、启用自动配置和组件扫描。 (先扫描配置了的组件, 即 看重要的几个配置的注解 ,此步骤重要的是 扫描 , 而非加载配置)

  2. ApplicationContext创建: Spring Boot创建一个ApplicationContext(通常是AnnotationConfigApplicationContext),然后加载配置类和自动配置类。自动配置类基于类路径上的可用jar包来决定哪些配置应该被激活。  ApplicationContext是spring IoC容器的高级版, 它包含了Bean的管理 AnnotationConfigApplicationContext 则是 ApplicationContext的一个实现, 它有 注解驱动的配置 , 自动配置

  3. Bean定义加载: 根据@ComponentScan扫描的范围,所有的@Component@Repository@Service@Controller注解的类会被注册为bean定义。

  4. Bean实例化与依赖注入: Spring容器开始实例化这些bean,并通过依赖注入填充bean之间的依赖关系。

  5. Spring Cloud组件初始化: Spring Cloud的自动配置会在此阶段初始化,例如:

    • 服务注册:如果项目配置了Eureka、Consul,Nacos等服务发现组件,那么服务会在启动时向服务注册中心注册自身。
    • 配置中心:如果使用Spring Cloud Config Server,应用会尝试从配置中心拉取配置信息。
    • 断路器和容错组件:如Hystrix或Resilience4j,会初始化并准备提供服务。
    • API网关:如Zuul或Spring Cloud Gateway,会初始化路由和过滤器规则。
  6. 初始化事件监听器: 应用上下文的初始化事件被触发,允许监听器执行必要的操作。

  7. ApplicationRunner和CommandLineRunner: 如果应用中有实现ApplicationRunnerCommandLineRunner接口的bean,它们将在应用上下文初始化完成后执行。

  8. 启动完成: 应用启动完成,Spring Boot会输出启动日志,显示应用运行的端口和其他信息。

前段调用接口时的生命周期:

  • HTTP请求到达: 当前端发起HTTP请求时,请求首先到达Spring Boot的内嵌Web服务器(如Tomcat、Jetty或Undertow)。

  • DispatcherServlet处理: 请求被传递给DispatcherServlet,这是Spring MVC的核心组件,它负责解析请求URL并找到对应的Handler。

  • HandlerMapping查找HandlerDispatcherServlet使用HandlerMapping策略来查找处理请求的Handler,即Controller方法。

  • HandlerAdapter执行Handler: 找到Handler后,DispatcherServlet使用HandlerAdapter来执行Handler方法,即Controller中的方法。

  • 参数解析: 在执行Controller方法前,HandlerAdapter会解析请求中的参数,并将它们绑定到Controller方法的参数上。

  • 执行Controller方法: Controller方法执行,这可能涉及到调用Service层的业务逻辑。调用service层代码是springmvc方面的知识了 ,这里就不多介绍了

  • 返回ModelAndView或直接返回响应体: Controller方法返回ModelAndView对象或直接返回响应体内容。

  • 视图渲染: 如果返回的是ModelAndViewDispatcherServlet会使用视图解析器(ViewResolver)来渲染视图,并将Model数据填充到视图中。

  • 响应生成: 最终的响应被构建并发送回前端,这可以是HTML页面、JSON数据或其他格式

其实这部分还差一个步骤 , 即去项目中进行一个调试,但我现在嫌麻烦 , 还没搞 , 因为一条是就必然是僵尸100多条项目,挑个半天都不一定调试的完

除了Spring Cloud 框架还有其他的一些的框架:

例如:

  • Dubbo:阿里巴巴开源的RPC框架,专注于高性能和高可用的微服务通信。Dubbo提供了服务注册、服务发现、负载均衡、服务调用、服务降级、服务限流、动态配置等核心功能。

  • Zookeeper:不是一个完整的微服务框架,而是一个协调服务,主要用于分布式系统的协调工作,比如维护集群成员信息、配置同步、命名服务等。在微服务架构中,Zookeeper常被用来作为服务注册和发现的底层实现。

除了前面已经聊到的中间键外 , 还有其他的一些没有聊到 , 例如:

1 Feign:声明式HTTP客户端,简化HTTP请求

2 ,Spring Cloud Sleuth:用于追踪分布式系统的请求 \

3 , Sentinel 是Alibaba开源的用于保护微服务架构的流量控制组件 , 主要用于提升分布式服务网集群的稳定性, 他提供有丰富的流量控制手段 , 包括限流 ,熔断 ,降级 ,热点防护等 , 咦帮助系统在高并发和高负载下依然保持稳定运行

4 .MQ (消息队列)

消息队列是一种应用程序间通信的方法,它允许进程之间异步传递消息,从而解耦合生产者和消费者。MQ的主要优点包括:

  • 解耦:生产者和消费者无需直接交互,也不必同时在线。
  • 可靠性:即使消费者暂时不可用,消息也会被持久化存储直到成功处理。
  • 缓冲:在高负载时,消息队列可以作为缓冲区,避免直接压垮后端服务。
  • 扩展性:可以轻松增加消费者来处理更多消息,提高系统吞吐量。

常见的MQ有RabbitMQ、Apache Kafka、Amazon SQS等。

5 OAuth

OAuth是一种开放标准,用于授权应用程序访问用户在另一个服务提供商处的数据,而无需共享用户的凭据。OAuth主要应用于:

  • 授权:允许第三方应用在用户授权后访问其在其他服务上的数据。
  • 访问令牌:使用访问令牌代替密码,提高安全性。
  • 细粒度权限:可以授予不同级别的访问权限,例如只读或读写。

OAuth广泛用于社交登录、API访问控制等场景。

6 线程池

线程池是一种管理线程的机制,它可以重用已存在的线程来执行新任务,而不是每次都需要创建新的线程。线程池的主要优势包括:

  • 减少开销:避免了频繁创建和销毁线程的开销。
  • 控制资源消耗:限制最大线程数量,防止资源过度消耗。
  • 提高响应时间:线程复用可以更快地响应新任务。

相关推荐

  1. SpringCloud框架复习(面试)

    2024-06-16 00:32:05       8 阅读
  2. SpringCloud面试题——Nacos

    2024-06-16 00:32:05       33 阅读
  3. SpringCloud面试题——Nacos

    2024-06-16 00:32:05       13 阅读
  4. SpringCloud面试题——Sentinel

    2024-06-16 00:32:05       9 阅读
  5. gin框架复习

    2024-06-16 00:32:05       32 阅读
  6. MySQL面试复习记录

    2024-06-16 00:32:05       19 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-16 00:32:05       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-16 00:32:05       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-16 00:32:05       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-16 00:32:05       18 阅读

热门阅读

  1. ORDER BY FIELD

    2024-06-16 00:32:05       5 阅读
  2. C语言题目:排序问题1

    2024-06-16 00:32:05       6 阅读
  3. 0-1 背包问题(动态规划 查询背包元素)

    2024-06-16 00:32:05       3 阅读
  4. 安装nginx的几种方式

    2024-06-16 00:32:05       5 阅读
  5. 游戏心理学Day15

    2024-06-16 00:32:05       7 阅读
  6. mysql大表ddl注意

    2024-06-16 00:32:05       6 阅读
  7. 使用C++调用PCL库实现三维重建示例

    2024-06-16 00:32:05       5 阅读
  8. 判断子字符串是否存在

    2024-06-16 00:32:05       7 阅读
  9. leetcode 200 岛屿数量

    2024-06-16 00:32:05       5 阅读