后端开发面试题9(附答案)

devtools/2024/11/7 0:25:55/

前言

        在下首语言是golang,所以会用他作为示例。

原文参见 @arialdomartini的: Back-End Developer Interview Questions

面向服务架构(SOA)和微服务(Microservice)相关问题 

1. 在SOA中,为什么长期存活的事务(Long-lived transation)不被看好,而Saga却被看好?

        在面向服务的体系结构(SOA)中,长期存活的事务(Long-lived transaction)之所以不被看好,主要是因为以下几个原因:

  1. 数据一致性问题:长期事务跨越长的时间窗口,涉及多个服务的操作,这期间任何一个服务的失败或暂时不可用都可能导致事务无法完成。传统的ACID(原子性、一致性、隔离性和持久性)事务模型在这种场景下很难保证事务的完整性和一致性。

  2. 锁定资源时间过长:长事务在等待所有服务操作完成的过程中可能会持有数据库或其他资源的锁,这可能导致资源争用加剧,降低系统的并发性能,甚至导致死锁。

  3. 复杂性增加:在分布式环境下,维护跨越多个服务边界的大事务会显著增加系统的复杂性,尤其是在涉及到多个服务回滚逻辑时,往往需要复杂的补偿动作。

  4. 可靠性下降:长事务的生命周期越长,面临的问题越多,比如网络中断、服务重启、数据状态变化等不确定因素,这都会降低事务成功的概率。

        相比之下,Saga作为一种分布式事务解决方案,更适合处理这类长期的、跨越多个服务边界的业务流程。Saga的主要优点如下:

  • 补偿性事务:Saga模式采用了柔性事务(Eventually Consistent Transaction)的思想,将一个大事务分解成一系列的本地事务,每个本地事务完成后都不可逆,但如果后续事务失败,则通过执行预定的补偿操作来撤销之前已完成事务的影响,从而实现业务流程的整体一致性。

  • 解耦与恢复:Saga允许服务之间的解耦,每个服务只需关心自己的业务逻辑和补偿逻辑,无需了解全局事务状态。同时,Saga通过序列化的事务和对应的补偿事务来应对失败,可以在失败后恢复到一个一致的状态。

  • 更好的性能和可扩展性:Saga模式避免了长时间锁定资源,提高了系统的并发能力和响应速度,同时也更容易适应大规模分布式环境下的服务扩展。

  • 适合微服务架构:在微服务架构中,服务之间相互独立,Saga模式很好地适应了这种分散自治的服务结构,使得每个服务都能够独立地进行版本管理和部署,而不受制于全局事务的约束。

2. SOA和MicroService之间有什么区别?

        SOA(面向服务的架构)和微服务架构是两种不同的软件架构风格,它们分别在不同的时代背景下兴起,各有其特点和应用场景,以下是它们之间的一些主要区别:

  1. 服务粒度

    • SOA:SOA的服务通常是较大的业务功能单元,服务粒度相对较粗,一个服务可能封装多个业务功能,并且这些服务倾向于互相协作以完成更复杂的业务流程。
    • 微服务:微服务架构主张服务的细粒度划分,每个服务只专注于完成一个单一的业务功能,并且每个服务都是自主的、可独立部署的实体。
  2. 自治性与耦合度

    • SOA:SOA服务虽然也是松耦合的,但服务间仍可能存在较高的依赖性,特别是对于共享的数据源和中间件设施如ESB(企业服务总线)。
    • 微服务:微服务强调服务的高自治性,每个服务有自己的数据存储,服务间通过轻量级的API接口进行通信,耦合度较低。
  3. 开发与部署

    • SOA:在SOA中,服务可能仍然是较大规模的应用,开发和部署通常以单体或模块化的方式进行,更新和迭代可能会影响整个服务或者一部分服务。
    • 微服务:微服务架构倡导单个服务的小团队独立开发、独立测试和独立部署,这意味着更新可以更加敏捷,风险也更易控制,符合持续集成与持续部署(CI/CD)的实践。
  4. 技术栈选择

    • SOA:SOA服务的技术栈可能较为统一,尤其是在大型企业中,可能会有一套标准的技术栈和基础设施。
    • 微服务:每个微服务可以自由选择最适合自己的技术栈,比如不同的语言、数据库和其他工具,使得团队可以根据服务的具体需求进行最佳实践。
  5. 通信方式

    • SOA:SOA架构常常使用SOAP这样的重量级协议进行通信,也可能依赖于ESB来进行服务的中介和编排。
    • 微服务:微服务更倾向于使用RESTful API、gRPC等轻量级通信协议,而且通常不依赖于中心化的服务总线,而是直接点对点通信。
  6. 架构目标与重点

    • SOA:SOA旨在解决企业级别的系统集成问题,提高服务的重用性,打破信息孤岛。
    • 微服务:微服务架构则着重于快速迭代、持续交付、高可用性和可伸缩性,尤其适用于快速发展的互联网应用和服务。

        总结来说,SOA是一个较为宏观的架构思想,它提倡将企业级应用拆分成一系列服务,而微服务架构则是SOA思想的一种进化,它将服务的拆分做得更为彻底,使每个服务都能成为一个可独立运作、易于维护和扩展的实体。

3. 我们来谈谈Web服务的版本管理、版本兼容性、重大变更管理这些事情吧

        Web服务的版本管理、版本兼容性以及重大变更管理是现代软件开发和运维中至关重要的环节,它们确保了服务的稳定性、可维护性和持续演进能力。以下是对这三个方面的详细阐述:

Web服务的版本管理

  • 目的:版本管理主要用于追踪Web服务的演变过程,包括功能增删改查、性能优化、安全更新等,使得开发者能够有效地控制不同版本的服务,方便回溯历史版本、对比差异和进行协同开发。

  • 策略:常见的版本命名一般遵循语义化版本控制系统(Semantic Versioning, SemVer),即主版本号.次版本号.修订号的形式。主版本号变动表


http://www.ppmy.cn/devtools/131876.html

相关文章

Set

1.概念 Set与Map一样是一个接口&#xff0c;是一颗搜索树&#xff0c;所以在创建Set对象时&#xff0c;必须实现其类&#xff08;HashSet或TreeSet&#xff09; Set<String> setnew HashSet<>(); 2.常用方法 注意 Set中只存储key&#xff0c;并且要求key唯一Set…

Apache Dubbo (RPC框架)

本文参考官方文档&#xff1a;Apache Dubbo 1. Dubbo 简介与核心功能 Apache Dubbo 是一个高性能、轻量级的开源Java RPC框架&#xff0c;用于快速开发高性能的服务。它提供了服务的注册、发现、调用、监控等核心功能&#xff0c;以及负载均衡、流量控制、服务降级等高级功能。…

【MySQL】深度学习与解析 : 库的操作知识整合

前言&#xff1a;本节内容是MySQL库的操作&#xff0c; 内容较少&#xff0c; 大体内容为创建库、删除库、修改库、库备份操作。 ps:本节内容适合安装了MySQL的友友们进行观看&#xff0c; 实操更有利于记住哦。 目录 创建数据库 查看数据库列表 创建数据库 删除数据库 …

Array.prototype.push()的理解和手写

1.Array.prototype.push()的用法 Array.prototype.push() 方法用于向数组的末尾添加一个或多个元素&#xff0c;并返回修改后数组的新长度。该方法会直接修改原始数组&#xff0c;而不是创建一个新的数组副本。 以下是 Array.prototype.push() 方法的用法&#xff1a; var ar…

Oracle OCP认证考试考点详解082系列13

题记&#xff1a; 本系列主要讲解Oracle OCP认证考试考点&#xff08;题目&#xff09;&#xff0c;适用于19C/21C,跟着学OCP考试必过。 61. 第61题&#xff1a; 题目 解析及答案&#xff1a; 关于数据库链接&#xff0c;以下哪项陈述是正确的&#xff1f; A. 在一个数据库中…

多模态PaliGemma——Google推出的基于SigLIP和Gemma的视觉语言模型

前言 本文怎么来的呢&#xff1f;其实很简单&#xff0c;源于上一篇文章《π0——用于通用机器人控制的流匹配VLA模型&#xff1a;一套框架控制7种机械臂(改造了PaliGemma和ACT的3B模型)》中的π0用到了PaliGemma 故本文便来解读下这个PaliGemma 第一部分 PaliGemma 1.1 Pal…

软件设计师 7日速成

数据流图和数据字典 数据流图 定义 数据流图是一种图形化的工具&#xff0c;用于描述系统中数据的流动情况。它可以帮助我们可视化数据在系统中的处理过程&#xff0c;包括数据的来源、去向、存储位置以及处理方式。 组成元素 数据流图通常包含以下四个基本元素&#xff1…

ML 系列:机器学习和深度学习的深层次总结( 19)— PMF、PDF、平均值、方差、标准差

一、说明 在概率和统计学中&#xff0c;了解结果是如何量化的至关重要。概率质量函数 &#xff08;PMF&#xff09; 和概率密度函数 &#xff08;PDF&#xff09; 是实现此目的的基本工具&#xff0c;每个函数都提供不同类型的数据&#xff1a;离散和连续数据。 二、PMF 的定义…