Java后端面试题(微服务相关)(day12)

news2024/11/26 19:41:15

目录

  • 分布式与微服务区别?
  • 什么是CAP原则?
  • Spring Cloud Alibaba 组件有哪些?
  • Nacos配置中心动态刷新原理
  • 目前主流的负载方案有哪些?
  • Nginx作为服务端负载均衡器,常见的负载均衡策略有哪些?
  • Spring Ribbon相关
      • Spring Ribbon是什么?
      • Ribbon负载均衡策略有哪些?
      • Ribbon第一次调用为什么会很慢?
  • Feign 和 OpenFeign 的区别?
  • 流量网关与服务网关的区别?
  • 降级和熔断有什么区别?

分布式与微服务区别?


  • 概念层面:
    1. 微服务设计层面的东西,一般考虑如何将系统从逻辑上进行拆分,也就是垂直拆分;
    2. 分布式部署层面的东西,即强调物理层面的组成,即系统的各子系统部署在不同计算机上。
  • 粒度划分:
    1. 微服务倾向于更细粒度的服务划分,每个服务只专注于一个特定的业务功能,并力求做到“做一件事并做好”
    2. 分布式系统中的服务划分粒度可大可小,可以包含多个紧密相关的业务功能
  • 目标:
    1. 微服务架构的核心理念是围绕业务能力组织服务,强调服务之间的松耦合和高内聚
    2. 分布式系统的设计目标是为了提高系统的可靠性、可用性、可扩展性和稳定性

一句话概括:分布式:分散部署;微服务:分散能力。

什么是CAP原则?


  • 一致性Consistency):所有节点在同一时刻看到相同的数据。
  • 可用性Availability):每个请求不管成功或者失败都应该在合理的时间内得到响应。
  • 分区容错性Partition tolerance):分区容错性是说当网络故障导致分布式系统的一部分节点无法与其他节点通信(有节点挂掉时),系统仍应该能够运作。

在一个分布式系统中,不可能同时实现一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)。因此,设计分布式系统时必须在这三个属性之间做出选择,只能同时满足其中的两个。

常见的有CA、CP、AP三种系统,而我们通常使用AP保证可用性和分区容错性,不追求实时一致性,只保证最终一致性即可。

Spring Cloud Alibaba 组件有哪些?


Spring Cloud Alibaba 是阿里开源的一套微服务开发组件,致力于提供微服务开发的一站式解决方案,核心组件有下面这些:

  • Sentinel:以流量为切入点,从流量控制熔断降级系统负载保护等多个维度保护服务的稳定性。
  • Nacos:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
  • RocketMQ:一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。
  • Seata分布式事务解决方案。

除了上面这些之外,使用 Spring Cloud Alibaba 的时候一般会搭配下面这些 Spring Cloud 组件一起使用:

  • OpenFeign:轻量级 RESTful 的 HTTP 服务客户端,用于替代已经进入停更维护状态的 Feign(Netflix Feign)
  • Gateway:用于网关服务,实现请求的转发和路由。
  • Ribbon:用于客户端负载均衡,将请求分发给不同的微服务实例。

Nacos配置中心动态刷新原理


Nacos 使用长轮询机制来实现实时配置更新。具体过程如下:

  1. 客户端发起请求:客户端通过后台线程发起一个 HTTP 请求 到 Nacos 服务端,用于 监听配置变化。
  2. 服务端挂起连接:Nacos 服务端接收到请求后,会挂起(hold)这个 HTTP 连接一段时间(例如 30 秒),在此期间服务端监控配置文件的变化。
  3. 两种情况
    • 无变化情况:若在这段时间内没有检测到配置文件有任何变更,服务端将释放连接并向客户端返回一个指示,表明配置没有更新。
    • 配置变更情况:如果在挂起期间检测到配置文件发生变化,服务端会立即释放连接并将最新的配置推送给客户端。
  4. 循环轮询:无论哪种情况,客户端在接收完响应后,会在短暂延迟(如 10 毫秒)之后重新发起一个新的 HTTP 请求,从而形成循环轮询机制以持续监听配置更新。

这种方式使得客户端能够及时获取到最新的配置信息,同时减少了不必要的频繁请求。

目前主流的负载方案有哪些?


目前主流的负载方案分为以下两种:

  • 服务端负载均衡
    在消费者和服务提供方中间使用独立的代理方式进行负载,有硬件的(比如 F5),也有软件的(比如 Nginx,OpenResty)
  • 客户端负载均衡器
    客户端根据自己的请求情况做负载均衡,Ribbon 就属于客户端自己做负载均衡。

Nginx作为服务端负载均衡器,常见的负载均衡策略有哪些?


  • Round Robin Rule轮询策略,依次选择每个服务实例。
  • Least Connections最少连接数,最少连接数算法将请求分配给当前活动连接数最少的后端服务器。这有助于避免某些服务器过载,而其他服务器则处于空闲状态的情况。
  • IP HashIP哈希,IP哈希算法根据客户端IP地址的哈希值将请求分配给后端服务器。这样,同一个客户端的请求总是被分配到同一台后端服务器,从而实现会话粘性。
  • URL HashURL哈希,URL哈希算法根据请求URL的哈希值将请求分配给后端服务器。这样,相同URL的请求总是被分配到同一台后端服务器。
  • Weighted Round Robin加权轮询,加权轮询算法在轮询的基础上,为每台后端服务器分配一个权重。数字越大,权重越高,分配到的请求越多。适用于后端服务器性能差异较大的情况。

Spring Ribbon相关


最少连接数算法将请求分配给当前活动连接数最少的后端服务器。这有助于避免某些服务器过载,而其他服务器则处于空闲状态的情况。

Spring Ribbon是什么?

Spring Ribbon 是一个客户端负载均衡工具,它可以在调用微服务时动态地从多个实例中选择一个来进行访问。Ribbon主要作为Netflix OSS组件集成在Spring Cloud中使用,帮助服务消费者在不同的服务实例之间进行负载均衡,通过这种方式增加系统的可用性和容错性

Ribbon负载均衡策略有哪些?

  • Round Robin Rule轮询策略,依次选择每个服务实例。
  • Random Rule随机策略,随机选择一个服务实例。
  • Weighted Response Time Rule根据响应时间来分配权重,响应时间短的服务实例权重越大。

Ribbon第一次调用为什么会很慢?

Ribbon默认是采用懒加载,Ribbon 客户端在第一次使用时需要初始化一些内部状态,例如从服务注册中心拉取服务实例列表、构建连接池,TCP 三次握手创建连接等,因此第一次调用会很慢。

饥饿加载则会在项目启动时创建,降低第一次访问的耗时。

Feign 和 OpenFeign 的区别?


    • Feign是由Netflix开发的一个声明式的HTTP客户端库
    • OpenFeignSpring Cloud官方基于Feign开发的一个分支
      1. 提供了对Spring MVC的支持
      2. 提供了对Spring的自动配置支持,使得集成更加简便
      3. 整合了更多的扩展 (请求重试策略、超时控制、请求拦截器

流量网关与服务网关的区别?


网关图示
流量网关和服务网关在系统整体架构中所处的位置如上图所示,

  • 流量网关:(如Nignx,OpenResty,Kong)是指提供全局性的、与后端业务应用无关的策略,例如 HTTPS证书认证、Web防火墙、全局流量监控,黑白名单等。

  • 服务网关:(如Spring Cloud Gateway)是指与业务紧耦合的、提供单个业务域级别的策略,如服务治理、token认证,负载均衡等。也就是说,流量网关负责南北向流量调度及安全防护,微服务网关负责东西向流量调度及服务治理。

在微服务架构中,降级(Degradation)和熔断(Circuit Breaker)都是用来提升系统稳定性和可用性的技术手段。虽然它们的目的都是为了应对服务间的依赖关系所带来的风险,但它们的作用机制和应用场景有所不同。

降级和熔断有什么区别?


  • 目的:
    • 熔断(Circuit Breaker):当某个依赖服务出现故障或响应时间过长时,暂时停止对该服务的请求,避免进一步加重故障服务的负担,并保护调用方免受性能影响。
    • 降级(Degradation):当系统资源紧张或服务性能下降时,通过主动降低服务质量来保证核心功能的可用性
  • 触发条件:熔断是自动的,通常由框架或库实现;降级则是手动设计的策略,需要开发者明确指定哪些功能可以降级处理。
  • 恢复机制:熔断有自动恢复机制,即半开状态下的试探性恢复;降级则需要根据实际情况手动或通过某种策略恢复。
  • 使用场景:熔断更多用于处理服务间的依赖问题,而降级则更广泛地应用于整个系统的资源管理

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

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

相关文章

中秋佳节,好物相伴 —— 精选五款数码好物推荐

中秋佳节,不仅是家人团聚的时刻,也是享受科技与生活的完美结合的好时机。在这个充满温情的节日里,我们为您精心挑选了五款数码好物,其中包括备受好评的南卡Runner Pro5骨传导耳机,以及其他四款各具特色的数码产品&…

中国电子学会Python3级等级考试202403客观题解析2

11、单选题 关于语句 fopen(r"c:\计算.txt",w),下列描述不正确的是?( ) A f 是变量 B w以写方式打开文件 C 如果文件“计算.txt”不存在,不会报错 D 如果文件“计算.txt”内原来有内容,将不…

数据库透明加密的定义与原理

数据库透明加密(TDE)是一种先进的加密技术,主要用于保护存储在数据库中的敏感数据,防止未经授权的访问和数据泄露。以下是对数据库透明加密的详细解析: 一、定义与原理 定义:数据库透明加密是一种在数据库管理系统(DBMS)中集成加密…

软考高级:系统架构设计师——软件架构设计 Chapter 笔记

软考高级:系统架构设计师——软件架构设计 1 软件架构设计—基本概念架构所处的位置架构发展历程架构的“41”视图例题 架构描述语言(ADL)例题 2软件架构设计—架构风格数据流风格调用/返回 风格独立构件风格虚拟机风格仓库风格(以…

Codeforces Round 970 (Div. 3) (个人题解)(未补完)

前言: 昨天晚上的比赛,可惜E题太笨了没想到如何解决,不过好在看到F过的多直接跳过去写F了,能过个5个也还不错了,而且一个罚时也没吃。之后的题我还是会再能补的时候补完的噢! 正文: 链接&…

ELK(Elasticsearch、Logstash、Kibana) 分布式日志搭建详细过程

ELK是三款软件的简称,分别是Elasticsearch、 Logstash、Kibana组成 本文中描述了ELK日志平台的详细搭建过程,不对工具用途做描述。 一、准备 安装包 所需安装包及官网下载地址: elasticsearch-8.14.3-linux-x86_64.tar.gz (https://www…

2024 【Delphi 12】苹果ios开发环境配置(五星保姆级)

目录 一、创建证书 1. 创建证书签名请求:(在苹果电脑上操作): .certSigningRequest 文件 2. 创建证书:在苹果的 开发者网站 上操作 重复以上步骤并下载对应的证书文件如下: 3. 创建标识符(…

引爆关注!LLM大模型开源项目突破34.4千星,热度飙升!

其实这个Repo在外网知名度很高,但咱这似乎没看到咋推 随着近两年大型语言模型的发展,LLM在生活中发挥着愈发重要的作用,通过改变我们与技术互动的方式,为医疗、金融和教育等各领域带来变革性的变化,之前AI周刊中也说了…

开放式耳机怎么戴?开放式耳机比入耳式耳机舒适吗?

开放式耳机佩戴教程如下: 选择合适的耳挂或支架:开放式耳机通常有耳挂式或头梁式等设计。如果是耳挂式,确保耳挂的大小和形状适合您的耳朵,能够稳固地挂在耳朵上;如果是头梁式,调整头梁的长度,使…

交易处理商TAAL公司深度参与BSV区块链的ARC研发

​​发表时间:2024年8月7日 TAAL技术主管Michael Bckli表示,TAAL公司一直在对ARC进行测试,并准备在今年年底全面发布。因TAAL在区块链交易处理方面具备深厚的专业知识,BSV区块链委托TAAL进行ARC开源参考落地方案的开发。 ARC是一个…

jmeter的1个线程如何遍历提取到的1个变量的多个值?

某个请求的uri是动态变化的,且这个url这个从上一个接口中提取到,但是其值可能有多个,也可能有1个,1个用户执行时,需要将这几个值作为uri全部请求一遍。 如我需要把变量C53这个变量(共计取到了3个值&#x…

Language Models are Few-Shot Learners

Abstract 最近的研究表明,通过在大量文本语料上进行预训练,然后在特定任务上进行微调,可以在许多自然语言处理任务和基准测试中取得显著进展。尽管这种方法在架构上通常是任务无关的,但它仍然需要特定任务的微调数据集&#xff0…

机器人外呼有哪些优势?

机器人外呼,作为一种结合了计算机技术和人工智能技术的自动化工具,具有多重显著优势。以下是其主要优势的详细阐述: ### 1. 高效性 * **大幅提升工作效率**:机器人外呼可以全天候、不间断地进行工作,不受时间、地点和…

第二十一届华为杯数学建模经验分享之资料分享篇

今天给大家分享一些数学建模的资料,通过这些资料的学习相信你们一定在比赛中获得好的成绩。今天分享的资料包括美赛和国赛的优秀论文集、研赛的优秀论文集、推荐数学建模的相关书籍、智能算法的学习PPT、python机器学习的书籍和数学建模经验分享与总结,其…

PlugIR:开源还不用微调,首尔大学提出即插即用的多轮对话图文检索 | ACL 2024

即插即用的PlugIR通过LLM提问者和用户之间的对话逐步改进文本查询以进行图像检索,然后利用LLM将对话转换为检索模型更易理解的格式(一句话)。首先,通过重新构造对话形式上下文消除了在现有视觉对话数据上微调检索模型的必要性&…

想亲手制作一款属于自己的游戏吗,游戏零基础入门【文末送书】

学习目录 📢 前言 🎬 Unity简介🎥 Unity学习专栏介绍🥇 专栏亮点🙉 适用对象🎁 赠送学习书籍 💬 结语 📢 前言 随着科技的不断进步,游戏制作领域迎来了前所未有的发展机…

EE trade:辨别真假银5个实用的技巧

从古至今, 银器以其闪耀的光泽和高贵典雅的魅力, 深受人们喜爱。 然而, 由于银具有较高的市场价值, 也引来了一些不法商贩的仿造。 如何辨别真假银, 成为许多人关注的话题。 别担心, 今天我们就来揭秘5个简…

FT4232芯片(USB转4串口)的国产化替代

之前有些项目用到FT4232HL芯片,无奈不好买(加之价格高等原因),需要找些Pin脚替代的型号。此前,部分项目已经使用了沁恒微电子发布的一些自有封装型号,像CH344Q、CH9344L等。但个别项目(主板复杂…

react-native ios Android 打包 以及 Ios 证书 签名问题

mai一、ios 查看当前可用设备 xcrun simctl list devices 修改名称 info.plist 文件下: CFBundleDisplayName 下的名称: 修改图标: 图标工厂 iOS一键生成所有尺寸的应用图标/启动图 - 知乎,生成你需要的图标,在XCode 打开项…

java导出Excel接口

需求:需要实现一个导出的接口,点导出同时导出5个Excel表格,五种表格的数据筛选不同数据 public String export(MarketReceiveVo query) {Date winApprovalStartDate query.getWinApprovalStartDate();Date winApprovalEndDate query.getWin…