Spring Cloud 面试题(七)

1. Spring Cloud的版本关系

Spring Cloud是一个微服务架构下的一系列框架的集合,它与Spring Boot紧密集成,并且两者之间存在一定的版本对应关系。以下是一些Spring Cloud和Spring Boot的版本对应关系:

  • Spring Cloud 2022.0.x (代号Kilburn) 需要与 Spring Boot 3.0.x 版本配合使用。
  • Spring Cloud 2021.0.x (代号Jubilee) 可以与 Spring Boot 2.6.x2.7.x 版本配合使用(从Spring Cloud 2021.0.3开始)。
  • Spring Cloud 2020.0.x (代号Ilford) 可以与 Spring Boot 2.4.x2.5.x 版本配合使用(从Spring Cloud 2020.0.3开始)。
  • Spring Cloud Hoxton 可以与 Spring Boot 2.2.x2.3.x 版本配合使用(从Hoxton SR5开始)。
  • Spring Cloud Greenwich 需要与 Spring Boot 2.1.x 版本配合使用。
  • Spring Cloud FinchleyEdgware 通常与 Spring Boot 2.0.x1.5.x 版本配合使用。

此外,Spring Cloud Alibaba作为Spring Cloud的增强版本,也提供了与Spring Cloud和Spring Boot的适配版本。例如:

  • Spring Cloud Alibaba 2022.0.0.x 适配 Spring Cloud 2022.0.0 版本和 Spring Boot 3.0.x 版本。
  • Spring Cloud Alibaba 2021.0.5.x 适配 Spring Cloud 2021.0.5 版本和 Spring Boot 2.6.x 版本。

开发者在选择Spring Cloud版本时,需要确保所选版本与Spring Boot版本兼容,以避免潜在的集成问题。通常,Spring Cloud的官方文档会提供详细的版本兼容性信息,建议开发者在搭建项目时参考最新的官方文档。

2. Spring Cloud和SpringBoot版本对应关系

Spring Cloud和Spring Boot的版本对应关系对于确保项目兼容性和稳定性非常重要。以下是一些Spring Cloud版本与Spring Boot版本的对应关系。

  1. Spring Cloud 2022.0.x (Kilburn)

    • 适配Spring Boot 3.0.x版本。
  2. Spring Cloud 2021.0.x (Jubilee)

    • 适配Spring Boot 2.6.x2.7.x版本(从2021.0.3开始)。
  3. Spring Cloud 2020.0.x (Ilford)

    • 适配Spring Boot 2.4.x2.5.x版本(从2020.0.3开始)。
  4. Spring Cloud Hoxton

    • 适配Spring Boot 2.2.x2.3.x版本(从SR5开始)。
  5. Spring Cloud Greenwich

    • 适配Spring Boot 2.1.x版本。
  6. Spring Cloud Finchley

    • 适配Spring Boot 2.0.x版本。
  7. Spring Cloud EdgwareSpring Cloud Dalston

    • 适配Spring Boot 1.5.x版本。
  8. Spring Cloud Alibaba

    • 2022.x分支适配Spring Boot 3.0版本,例如2022.0.0.0-RC2适配Spring Cloud 2022.0.0和Spring Boot 3.0.2。
    • 2021.x分支适配Spring Boot 2.4版本,例如2021.0.5.0适配Spring Cloud 2021.0.5和Spring Boot 2.6.13。
    • 2.2.x分支适配Spring Boot 2.4版本,例如2.2.10-RC1适配Spring Cloud Hoxton.SR12和Spring Boot 2.3.12.RELEASE。

请注意,一些老版本的Spring Cloud,如Dalston、Edgware、Finchley和Greenwich,已经达到了生命周期的终点,不再受到支持。因此,建议使用较新的版本以确保获得持续的更新和安全修复。

在实际开发中,建议访问Spring Cloud的官方网站或使用Spring Initializr等工具来获取最新的版本对应关系和兼容性信息。

3. Spring Cloud和各子项目版本对应关系

Spring Cloud是一个由多个子项目组成的生态系统,每个子项目都可能有自己的版本,并且与Spring Cloud的版本有一定的对应关系。以下是一些Spring Cloud及其子项目的版本对应关系:

  1. Spring Cloud 2022.0.x (代号Kilburn)

    • 对应 Spring Boot 3.0.x 版本。
    • Spring Cloud Alibaba 2022.0.0.x 适配此版本,其中版本命名方式调整为对应Spring Cloud版本号,后跟一个扩展版本号。
  2. Spring Cloud 2021.0.x (代号Jubilee)

    • 可以与 Spring Boot 2.6.x2.7.x 版本配合使用(从2021.0.3开始)。
    • Spring Cloud Alibaba 2021.0.x 适配此版本。
  3. Spring Cloud 2020.0.x (代号Ilford)

    • 可以与 Spring Boot 2.4.x2.5.x 版本配合使用(从2020.0.3开始)。
  4. Spring Cloud Hoxton

    • 可以与 Spring Boot 2.2.x2.3.x 版本配合使用(从SR5开始)。
    • Spring Cloud Alibaba 2.2.x 适配此版本。
  5. Spring Cloud Greenwich

    • 需要与 Spring Boot 2.1.x 版本配合使用。
    • Spring Cloud Alibaba 2.1.x 适配此版本。
  6. Spring Cloud FinchleyEdgware

    • 通常与 Spring Boot 2.0.x1.5.x 版本配合使用。
    • 这些版本已经达到生命周期的终点,不再受支持。
  7. Spring Cloud Alibaba

    • 版本命名方式从2021.x分支开始进行了调整,以对应Spring Cloud版本,前三位为Spring Cloud版本,最后一位为扩展版本。

请注意,上述信息可能会随着新版本的发布而变化,因此建议参考最新的官方文档或通过Spring Cloud的官方网站来获取最准确的版本对应信息。此外,Spring Cloud的版本命名方式从2020.0.X版本开始变更为时间线的方式,而之前的版本则是以伦敦地铁站的站名命名。

4. 分布式和微服务有什么区别?

分布式系统(Distributed Systems)和微服务架构(Microservices Architecture)是两个相关但不同的概念,它们在设计和实现上有着根本的区别。下面是它们的主要区别:

  1. 定义

    • 分布式系统:是由多个物理或逻辑上分离的计算机组件组成的系统,这些组件通过计算机网络进行通信和协作,以完成共同的任务或服务。分布式系统强调的是组件之间的通信和数据管理。
    • 微服务架构:是一种软件开发架构风格,它将应用程序分解为一组小的服务,每个服务围绕特定的业务功能构建,运行在自己的进程中,并通常由不同的团队独立开发、部署和扩展。
  2. 组件大小和复杂性

    • 在分布式系统中,组件可以是任何大小和复杂性的服务或应用程序,它们可以是大型的单体应用,也可以是小型的服务。
    • 微服务架构中的服务通常是小的、轻量级的,并且高度专注于单一的业务功能。
  3. 部署

    • 分布式系统中的组件可以独立部署,也可以作为一个整体部署。
    • 微服务架构中的每个服务都是独立部署的,可以独立扩展,并且与其他服务松耦合。
  4. 技术多样性

    • 分布式系统通常不强调技术多样性,组件可以使用相同的技术栈。
    • 微服务架构鼓励使用最合适的技术栈来构建每个服务,这意味着不同的服务可以使用不同的编程语言和数据库。
  5. 团队结构

    • 在分布式系统中,团队结构可能是集中的,所有开发人员可能都在同一个项目上工作。
    • 微服务架构通常与小团队和跨功能团队结构相匹配,每个团队负责一个或多个服务的整个生命周期。
  6. 扩展性

    • 分布式系统可以通过增加更多的节点来扩展,但扩展通常是整体的。
    • 微服务架构允许独立扩展单个服务,这使得系统可以根据需求更灵活地扩展。
  7. 容错性

    • 分布式系统需要考虑节点故障和网络分区等问题,但容错性的设计可能因系统而异。
    • 微服务架构强调每个服务的独立性和容错性,一个服务的故障不应该影响整个系统。
  8. 数据管理

    • 在分布式系统中,数据管理可能是集中的,所有组件可能访问相同的数据存储。
    • 微服务架构倾向于让每个服务管理自己的数据库,这可能导致数据的分布式管理。

总的来说,分布式系统是一种更广泛的概念,涵盖了多个计算机组件通过网络协作的多种场景。而微服务架构是一种特定的设计方法,它专注于将应用程序分解为小的、独立的服务,以提高灵活性、可维护性和可扩展性。微服务架构可以被视为分布式系统的一种实现方式,但它引入了更多的设计原则和实践,以支持现代应用程序的需求。

5. 为什么会产生Eureka的自我保护呢?

Eureka是Netflix开源的服务发现框架,用于在微服务架构中定位服务。Eureka服务器用于维护服务实例的注册信息,而服务实例(即客户端)会定期发送心跳以表明它们的可用性。然而,在某些情况下,Eureka可能会进入自我保护模式(self-preservation mode),这通常是由以下几个原因引起的:

  1. 网络分区问题:当Eureka服务器和客户端之间的网络连接不稳定时,服务器可能无法接收到客户端的心跳。如果这种情况持续发生,Eureka服务器可能会认为客户端不可达,并从注册表中移除这些实例。

  2. 心跳丢失:如果客户端由于某些原因(如实例崩溃、网络延迟或GC暂停)未能及时发送心跳,Eureka服务器可能会将这些实例视为下线状态。

  3. Eureka重启:当Eureka服务器重启时,它会重置其注册表信息。如果重启后客户端的心跳迅速涌入,Eureka可能会认为这是网络分区恢复的迹象,而不是正常的心跳。

  4. 大量实例同时续约:如果许多服务实例同时发送心跳请求,可能会导致Eureka服务器的负载突然增加,从而触发自我保护模式。

  5. Eureka配置不当:如果Eureka的配置参数(如续约间隔、实例超时阈值等)设置不当,可能会导致自我保护行为。

当Eureka进入自我保护模式时,它会减少从注册表中移除实例的频率,以避免由于上述原因导致的服务实例丢失。这可以防止Eureka“脑裂”(即Eureka服务器之间的信息不一致)和“雪崩”(即服务实例大量下线)的问题。

要解决Eureka的自我保护问题,可以采取以下措施:

  • 优化网络:确保Eureka服务器和客户端之间的网络连接是稳定可靠的。
  • 调整心跳间隔:适当调整客户端的心跳间隔和超时阈值,以适应网络延迟和实例的状态。
  • 负载均衡:使用负载均衡器分散Eureka服务器的流量,避免单个服务器过载。
  • 集群部署:通过将Eureka部署为集群来提高其可用性和容错性。
  • 监控和报警:实施监控和报警机制,以便在Eureka进入自我保护模式时及时发现并采取措施。

通过这些方法,可以减少Eureka自我保护模式的发生,并确保服务发现系统的稳定性和可靠性。

6. 如何关闭Eureka的自我保护机制?

Eureka是Netflix开源的服务发现框架,它是Spring Cloud体系中的核心组件之一。Eureka Server充当服务注册中心,提供服务注册和发现的功能。Eureka Server具有自我保护机制(Self-preservation),这是在网络分区或其他异常情况下,防止Eureka集群过度清理服务实例的一种保护措施。

当Eureka Server的网络分区或其他异常情况发生时,它可能会进入自我保护模式。在这种模式下,Eureka Server会减少对服务实例的清理频率,以避免因为网络问题导致的服务下线。

要关闭Eureka的自我保护机制,可以采取以下几种方法:

  1. 调整自我保护阈值
    通过调整eureka.server.renewal-percent-threshold配置项,可以设置触发自我保护机制的阈值。默认值通常是0.85(85%)。如果设置为0,则可以关闭自我保护机制。

    eureka:server:renewal-percent-threshold: 0
    
  2. 禁用自我保护
    通过设置eureka.server.enable-self-preservation=false,可以禁用自我保护机制。

    eureka:server:enable-self-preservation: false
    

3.调整实例过期时间
Eureka Server会根据eureka.instance.lease-expiration-duration-in-seconds配置项来决定服务实例的过期时间。适当增加这个值可以减少自我保护机制的触发机会。

eureka:instance:lease-expiration-duration-in-seconds: 90 # 默认值通常是90秒
  1. 优化网络和系统性能
    确保Eureka集群的网络环境稳定,减少分区发生的可能性。同时,确保Eureka Server的资源(如CPU、内存)充足,避免因为资源不足导致的自我保护。

  2. 监控和日志
    通过监控Eureka Server的性能和日志,可以及时发现和解决导致自我保护机制触发的问题。

请注意,关闭或禁用自我保护机制可能会使Eureka集群在异常情况下更容易受到不稳定因素的影响,因此请在充分了解其影响后谨慎操作。在生产环境中,建议先在测试环境中进行充分的测试和评估。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/842080.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【权威出版】2024年城市建设、智慧交通与通信网络国际会议(UCSTCN 2024)

2024年城市建设、智慧交通与通信网络国际会议 2024 International Conference on Urban Construction, Smart Transportation, and Communication Networks 【1】会议简介 2024年城市建设、智慧交通与通信网络国际会议即将盛大召开,这是一次聚焦城市建设、智慧交通与…

深入理解Java的设计模式

设计模式(Design Patterns)是软件开发中的宝贵经验总结,提供了解决常见设计问题的模板和最佳实践。在Java开发中,设计模式尤为重要,因为它们能够提高代码的可维护性、可扩展性和可重用性。本篇博客将详细介绍几种常见的…

四轮麦轮平衡车四个轮子安放位置要求,以及编码器测速注意事项(强调,否则无法正常平移)——基于STM32F103ZET6

轮子推荐ABBA,当然BAAB也可以 如图安放: 这两种安防位置可以实现平移效果 若要实现平移则需要先实现PID控制平衡,这里用到520编码电机,相较于370电机他的动力更足,在调节PID时能节约不少时间而且更加容易。 需要注意…

存放Google key的芯片中安全区域能否作为POS机的安全芯片SP存放密钥使用?

能否当作SP使用? 存放Google key的芯片中安全区域是否能作为POS机的安全芯片(Secure Processor, SP)存放密钥使用,这个问题涉及几个关键方面: 硬件安全性: 安全级别:POS机用于处理支付信息&…

uniapp项目 使用vue-plugin-hiprint静默打印功能

插件地址:https://toscode.mulanos.cn/gyy155/vue-plugin-hiprint h5项目使用插件的静默打印功能 1.下载vue-plugin-hiprint和jquery npm install vue-plugin-hiprint npm install jquery --save2.在mian.js引入插件和jqerry //引入vue-plugin-hiprint import { h…

git 检查用户是否是gitlab用户

背景: 公司代码要从老的git库迁到新的git库,老git库上部分提交用户在新git库上没有,解决方法: 让gitlab不再检查提交用户是否是gitlab用户。具体操作: 去掉下面的勾选,保存配置即可。

金融数据库,实时行情,股票财务数据在线查询

jvQuant在线SQL 文档(current)接入 测试 查询 #股票代码股票简称最新价(元)2024-05-21股东总户数(户)截至2024-05-21上市板块是否ST股票区间涨跌幅(%)2024-05-15-2024-05-21市盈率(TTM)(倍)2024-05-21营业收入(元)截至2024-03-31总市值(元)2024-05-21量比2024-05-21利润率(%…

qt实现秒表功能

最近项目里需要一个计时功能,可以实现暂停,继续,结束,开始的功能,如同秒表一样,我就写了一个demo,效果如图: 代码如下: #ifndef WIDGET_H #define WIDGET_H#include &l…

深入解析与实现:变分自编码器(VAE)完整代码详解

VAE理论上一篇已经详细讲完了,虽然VAE已经是过去的东西了,但是它对后面强大的生成模型是很有指导意义的。接下来,我们简单实现一下其代码吧。 1 VAE在minist数据集上的实现 完整的代码如下,没有什么特别好讲的。 import cv2 im…

代码随想录算法训练营day31 | 491.递增子序列、46.全排列、47.全排列 II

491.递增子序列 未去重的代码 class Solution:def findSubsequences(self, nums: List[int]) -> List[List[int]]:result []self.backtracking(nums, result, [], 0)return resultdef backtracking(self, nums, result, path, startIndex):if len(path) > 2:result.ap…

【代码随想录】【算法训练营】【第20天】 [654]最大二叉树 [617]合并二叉树 [700]二叉搜索树中的搜索 [98]验证二叉搜索树

前言 思路及算法思维,指路 代码随想录。 题目来自 LeetCode。 day 19,一个愉快的周日~ day 20,一个悲伤的周一~ 题目详情 [654] 最大二叉树 题目描述 654 最大二叉树 解题思路 前提:构造二叉树 思路:寻找根节…

python两个列表如何取交集

在Python编程中,我们经常需要处理各种数据集合,包括列表(list)。有时候,我们可能想要找出两个列表中的共同元素,这通常被称为取交集。下面,我将介绍几种在Python中实现两个列表取交集的方法。 …

如何设置XHSC(华大)单片机的IO口中断

XHSC(华大)单片机IO口中断使用 一、代码说明 华大单片机的历程在华大或者小华的官网上都可以下载到,但是我们下载的历程基本注释都是非常简单,有的还没有注释;再加上小华跟华大的历程在代码架构上有所区别,所以新手在直接调用华大或者小华历程后,历程代码的可读性并不…

内网安全--域渗透准备知识

目录 知识点: 0x01 0x02 0x03 系列点: Linux主机信息收集 windows主机信息收集 知识点: 0、域产生原因 1、内网域的区别 2、如何判断在域内 3、域内常见信息收集 4、域内自动化工具收集 -局域网&工作组&域环境区别 -域…

Hinton揭秘GPT之父【Ilya】成长历程:Scaling Law是他学生时代就有的直觉

2003年夏天的一个周日,AI教父Hinton在多伦多大学的办公室里敲代码,突然响起略显莽撞的敲门声。门外站着一位年轻的学生,说自己整个夏天都在打工炸薯条,但更希望能加入Hinton的实验室工作。Hinton问,你咋不预约呢&#…

SQLite 如何导出某些SQLite3表的数据

https://deepinout.com/sqlite/sqlite-questions/44_sqlite_how_do_i_dump_the_data_of_some_sqlite3_tables.html 要导出整个SQLite3数据库的数据,可以使用SQLite3的.dump命令。首先,打开终端或命令提示符,并进入SQLite3终端会话。然后&…

# LLM高效微调详解-从Adpter、PrefixTuning到LoRA

一、背景 目前NLP主流范式是在大量通用数据上进行预训练语言模型训练,然后再针对特定下游任务进行微调,达到领域适应(迁移学习)的目的。 Context Learning v.s. SFT 指令微调是预训练语言模型微调的主流范式,其目的是…

嵌入式C语言--基础知识

嵌入式C语言–基础知识 嵌入式C语言--基础知识 嵌入式C语言--基础知识一. 含参数的宏与函数的不同点1)函数2)宏 二. scanf格式化输入的注意事项三. 指针1)指针变量(地址变量)2)指针常见含义 四. 数组五. 数组与指针的区…

解读 Nginx:构建高效反向代理和负载均衡的秘密

解读 Nginx:构建高效反向代理和负载均衡的秘密 一、简介 Nginx (Engine-X) 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。Nginx 以其高并发、高可靠性、低内存消耗等特点,成为了众多互联网公司首选的服务器软…

通用代码生成器应用场景三,遗留项目反向工程

通用代码生成器应用场景三,遗留项目反向工程 如果您有一个遗留项目,要重新开发,或者源代码遗失,或者需要重新开发,但是希望复用原来的数据,并加快开发。 如果您的项目是通用代码生成器生成的,…