【微服务】面试题(一)

 

最近进行了一些面试,这几个问题分享给大家

一、分别介绍一下微服务、分布式以及两者的区别

微服务(Microservices)和分布式系统(Distributed Systems)是两种不同的软件架构风格,虽然它们之间有些重叠,但是它们解决的问题和关注的重点有所不同。

1.1 微服务(Microservices):

1. 架构风格: 微服务是一种架构风格,其核心理念是将单个应用程序拆分成一组小型服务,每个服务都是独立的、可独立部署的单元。每个服务都有自己的进程和数据存储,通常通过轻量级通信协议进行通信,如HTTP或消息队列。

2. 强调的特点: 微服务架构强调服务之间的松耦合和独立部署,每个微服务都应该专注于解决特定领域的问题,而不是试图包含整个应用程序的所有功能。

3. 技术选型: 微服务架构通常采用多种技术栈来实现各个服务,因为每个服务都可以选择最适合自己需求的技术栈,例如使用Java的Spring Boot、Node.js、Python等。

4. 部署与扩展: 微服务可以独立部署和扩展,这意味着可以根据需要对某个服务进行水平扩展,而不会影响其他服务。

5. 适用场景: 微服务适用于大型复杂应用,特别是需要频繁变更和快速迭代的场景,因为微服务的独立部署使得团队可以更快速地发布新功能和修复bug。

1.2 分布式系统(Distributed Systems):

1. 系统范式: 分布式系统是由多个独立的计算机节点组成的系统,这些节点通过网络进行通信和协作,共同完成某个任务。分布式系统可以是一个完整的应用程序,也可以是一个底层基础设施,用于支持其他应用程序。

2. 强调的特点: 分布式系统强调将系统的不同部分分布到不同的计算机上,以提高系统的性能、可用性和可扩展性。它通常关注于解决分布式计算、数据共享、一致性和容错性等问题。

3. 技术选型: 分布式系统涉及到网络通信、数据存储、并发控制等多个领域,因此需要综合考虑多种技术选型,如消息队列、分布式数据库、一致性协议等。

4. 部署与扩展: 分布式系统的部署和扩展通常涉及到多个节点,需要考虑节点之间的通信、数据同步和负载均衡等问题。

5. 适用场景: 分布式系统适用于需要处理大量数据和高并发请求的场景,例如大型互联网应用、电子商务平台、社交网络等。

  1. 1.3 区别总结:

1. 关注点不同: 微服务更注重将应用程序拆分成独立的服务单元,强调服务之间的松耦合和独立部署;而分布式系统更关注将系统的不同部分分布到不同的计算机上,以提高系统的性能、可用性和可扩展性。

2. 粒度不同: 微服务通常更细粒度,每个服务都解决一个特定领域的问题;而分布式系统的粒度可以更大,涉及到系统中的多个组件和模块。

3. 解决的问题不同: 微服务主要解决的是大型复杂应用的开发和部署问题;分布式系统主要解决的是数据管理、并发控制和系统可扩展性等问题。

综上所述,微服务和分布式系统虽然有一定的重叠,但是它们的关注点和解决的问题有所不同,理解它们之间的区别对于设计和开发分布式应用程序至关重要。

1.4 代码示例

下面我演示了一个简单的微服务架构和一个分布式系统架构中的不同:

微服务示例:

在这个微服务示例中,用户服务、商品服务和订单服务被定义为独立的类,每个服务都有自己的功能。订单服务在创建订单时会调用用户服务和商品服务来获取所需的信息。

# 用户服务
class UserService:def get_user(self, user_id):# 模拟从数据库中获取用户信息return {'id': user_id, 'name': 'John Doe', 'email': 'john@example.com'}# 商品服务
class ProductService:def get_product(self, product_id):# 模拟从数据库中获取商品信息return {'id': product_id, 'name': 'Laptop', 'price': 999.99}# 订单服务
class OrderService:def create_order(self, user_id, product_id):user_info = UserService().get_user(user_id)product_info = ProductService().get_product(product_id)# 创建订单逻辑return {'user': user_info, 'product': product_info}# 使用示例
order = OrderService().create_order(1, 1001)
print("Order:", order)

分布式系统示例:

在这个分布式系统示例中,用户服务、商品服务和订单服务都是简单的函数,而不是类。订单服务在创建订单时调用了远程的用户服务和商品服务来获取所需的信息。

# 分布式系统示例# 用户服务
def user_service_get_user(user_id):# 模拟从远程用户服务获取用户信息# 在真实环境中可能会使用 RPC 或 RESTful API 等方式进行通信return {'id': user_id, 'name': 'John Doe', 'email': 'john@example.com'}# 商品服务
def product_service_get_product(product_id):# 模拟从远程商品服务获取商品信息# 在真实环境中可能会使用 RPC 或 RESTful API 等方式进行通信return {'id': product_id, 'name': 'Laptop', 'price': 999.99}# 订单服务
def order_service_create_order(user_id, product_id):user_info = user_service_get_user(user_id)product_info = product_service_get_product(product_id)# 创建订单逻辑return {'user': user_info, 'product': product_info}# 使用示例
order = order_service_create_order(1, 1001)
print("Order:", order)

这两个示例的区别在于微服务示例中的服务被设计为独立的类,而分布式系统示例中的服务是简单的函数,并且通过远程调用来实现分布式通信。

二、详细介绍一下RPC与restful以及两者的区别

RPC(Remote Procedure Call)和RESTful(Representational State Transfer)是两种不同的远程通信机制,它们在设计理念、实现方式和使用场景上有很大的差异。

RPC(远程过程调用):

1. 架构风格: RPC是一种远程通信协议,它允许一个计算机程序调用另一个地址空间(通常是另一台机器上)的子程序,而不需要显式编码这个远程调用的细节。RPC的目标是让分布式应用程序的通信过程尽可能地像本地调用一样简单。

2. 通信协议: RPC通常基于二进制协议(如Google的Protocol Buffers、Apache的Thrift等)或者基于文本的协议(如JSON-RPC、XML-RPC等),它们可以在不同的编程语言和平台之间进行通信。

3. 强调方法调用: RPC强调远程方法调用的概念,客户端像调用本地方法一样调用远程服务的方法,并等待返回结果。

4. 状态管理: RPC在通信过程中通常不考虑状态管理,即请求与响应之间没有关联,每次请求都是独立的。

RESTful(表征状态转移):

1. 架构风格: RESTful是一种软件架构风格,其核心理念是使用标准的HTTP协议,并遵循一组约束条件,如统一接口、无状态性、资源标识、按需响应等。RESTful不是一种协议,而是一种设计风格,它通常基于HTTP方法(GET、POST、PUT、DELETE等)对资源进行操作。

2. 资源导向: RESTful强调对资源的操作,每个资源都有一个唯一的URI来标识,并且可以使用HTTP方法对资源进行增删改查操作。

3. 状态管理: RESTful强调无状态性,即每个请求都应该包含足够的信息来完成操作,服务器不应该保存客户端的状态信息。

4. 数据传输: RESTful通常使用JSON或者XML等标准数据格式来传输数据,使得数据在不同的系统之间能够轻松地解析和交换。

区别总结:

1. 通信方式不同: RPC强调远程方法调用,客户端像调用本地方法一样调用远程服务的方法;而RESTful则是基于HTTP协议对资源进行操作,使用HTTP方法对资源进行增删改查操作。

2. 传输数据格式不同: RPC通常基于二进制协议或者文本协议进行通信,而RESTful通常使用JSON或者XML等标准数据格式来传输数据。

3. 状态管理不同: RPC在通信过程中通常不考虑状态管理,每次请求都是独立的;而RESTful强调无状态性,服务器不保存客户端的状态信息。

4. 约束条件不同: RPC并没有明确的约束条件,可以根据具体的实现选择合适的协议和序列化方式;而RESTful则是基于一组约束条件来设计的,如统一接口、无状态性、资源标识、按需响应等。

综上所述,RPC和RESTful是两种不同的远程通信机制,它们在设计理念、实现方式和使用场景上有很大的差异,开发人员在选择时需要根据具体的需求和情况进行权衡和选择。

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

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

相关文章

SpriingBoot整合MongoDB多数据源

背景&#xff1a; MongoDB多数据源&#xff1a;springboot为3以上版本&#xff0c;spring-boot-starter-data-mongodb低版本MongoDBFactory已过时&#xff0c; 改为MongoDatabaseFactory。 1、pom引入&#xff1a; <dependency><groupId>org.springframework.boo…

汇编基础----mov基本操作

汇编基础----mov基本操作 下载VS2022 这个网上教程很多,自行下载安装即可 新建项目 选择空项目,如何点击下一步 在源文件下创建这二个文件 修改配置使asm文件能被解析,右击项目名(demo)->生成依赖项->生成自定义->勾选如下图所示选项->确定 立即数寻址 main…

qt环境搭建-镜像源安装Qt Creator(5.15.2)以及配置环境变量

前言&#xff1a; 版本&#xff1a;5.15.2 镜像源&#xff1a;ustc与清华 纯小白&#xff0c;找了半天的镜像源安装qtcreator&#xff0c;搞了半天结果安装的是最新的&#xff0c;太新的对小白很不友好&#xff0c;bug比较多&#xff0c;支持的系统也不全&#xff0c;口碑不…

【SCI绘图】【小提琴系列1 python】绘制按分类变量分组的垂直小提琴图

SCI&#xff0c;CCF&#xff0c;EI及核心期刊绘图宝典&#xff0c;爆款持续更新&#xff0c;助力科研&#xff01; 本期分享&#xff1a; 【SCI绘图】【小提琴系列1 python】绘制按分类变量分组的垂直小提琴图&#xff0c;文末附完整代码 小提琴图是一种常用的数据可视化工具…

鸿蒙原生应用已超4000个!

鸿蒙原生应用已超4000个&#xff01; 来自 HarmonyOS 微博近期消息&#xff0c;#鸿蒙千帆起# 重大里程碑&#xff01;目前已有超4000个应用加入鸿蒙生态。从今年1月18日华为宣布首批200多家应用厂商正在加速开发鸿蒙原生应用&#xff0c;到3月底超4000个应用&#xff0c;短短…

约跑小程序源码(asp.net+vue+element++uniapp+sqlserver)

开发语言&#xff1a;c# 框架&#xff1a;后端 asp.net mvc pc管理页面&#xff1a;vueelement 数据库&#xff1a;sqlserver 开发软件&#xff1a;eclipse/myeclipse/idea 浏览器&#xff1a;谷歌浏览器 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X …

PyCharm关闭项目后等待时间长

每次关闭项目或PyCharm时&#xff0c;会显示正在关闭项目&#xff0c;而这个关闭时间很长且不可确定&#xff0c;很浪费我们的时间&#xff0c;不过愿意等的话&#xff0c;倒也是可以。 解决方法 Help -> Find Action -> 查找 Registry -> 禁用 ide.await.scope.comp…

ChatGPT基础(一) GPT的前世今生

文章目录 GPT模型简史GPT系列模型ChatGPT的应用 最近ChatGPT3.5可以免注册使用了&#xff0c;出来刨一波坟 说一说ChatGPT的来源和应用。 GPT模型简史 Generative pre-trained transformers(GPT)生成式预训练转换模型是大语言模型的一种(Large Language Model–>LLM)。它是…

PPT在线压缩工具推荐

有时候使用邮箱发送邮件时&#xff0c;添加的PPT、Word、PDF文档总会因为过大而转为其他类型的附件发送&#xff0c;不仅上传缓慢&#xff0c;对方查收下载时还有有效期限制&#xff0c;7天或15天后就过期再也无法下载了&#xff0c;有没有什么办法可以压缩PPT等文档&#xff0…

【QT+QGIS跨平台编译】076:【libdxfrw跨平台编译】(一套代码、一套框架,跨平台编译)

点击查看专栏目录 文章目录 一、libdxfrw介绍二、QGIS下载三、文件分析四、pro文件五、编译实践一、libdxfrw介绍 libdxfrw是一个用于读取和写入DXF(Drawing Exchange Format)文件的开源C++库。DXF是一种由AutoCAD开发的文件格式,用于存储CAD(计算机辅助设计)图形数据,它…

【大数据】安装hive-3.1.2

1、上传HIVE包到/opt/software目录并解压到/opt/modules/ tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /opt/modules/ 2、修改路径 mv /opt/modules/apache-hive-3.1.2-bin/ /opt/modules/hive 3、将hIVE下的bin目录加入到/etc/profile中 export HIVE_HOME/opt/module…

3d怎么在一块模型上开个孔---模大狮模型网

在进行3D建模时&#xff0c;有时候需要在模型上创建孔&#xff0c;以实现特定的设计需求或功能。无论是为了添加细节&#xff0c;还是为了实现功能性的要求&#xff0c;创建孔都是常见的操作之一。本文将介绍在3D模型上创建孔的几种常用方法&#xff0c;帮助您轻松实现这一目标…

pytorch 演示 tensor并行

pytorch 演示 tensor并行 一.原理二.实现代码 本文演示了tensor并行的原理。如何将二个mlp切分到多张GPU上分别计算自己的分块,最后做一次reduce。 1.为了避免中间数据产生集合通信,A矩阵只能列切分,只计算全部batch*seqlen的部分feature 2.因为上面的步骤每张GPU只有部分featu…

2024 Tuxera NTFS for Mac功能介绍及如何安装使用

随着科技的发展&#xff0c;我们的日常生活和工作越来越依赖于电子设备。而在这些设备中&#xff0c;Mac由于其出色的稳定性和易用性&#xff0c;成为了许多用户的首选。然而&#xff0c;尽管Mac自带的文件系统已经足够强大&#xff0c;但仍有一些用户希望获得更加高效、稳定的…

【氮化镓】在轨实验研究辐射对GaN器件的影响

【Pioneering evaluation of GaN transistors in geostationary satellites】 摘要&#xff1a; 这篇论文介绍了一项为期6年的空间实验结果&#xff0c;该实验研究了在地球静止轨道上辐射对氮化镓&#xff08;GaN&#xff09;电子元件的影响。实验使用了四个GaN晶体管&#xf…

如何水出第一篇SCI:SCI发刊历程,从0到1全过程经验分享!!!

如何水出第一篇SCI&#xff1a;SCI发刊历程&#xff0c;从0到1全路程经验分享&#xff01;&#xff01;&#xff01; 详细的改进教程以及源码&#xff0c;戳这&#xff01;戳这&#xff01;&#xff01;戳这&#xff01;&#xff01;&#xff01;B站&#xff1a;Ai学术叫叫兽e…

WPS解决插入公式在正文带来行间距变大问题

问题描述 写论文解释公式时&#xff0c;插入对应的变量&#xff0c;导致行间距变大&#xff0c;如图 显然上文与下文行间距不等。但无法通过修改数值修改下文行间距。 解决办法

消息队列之RabbitMQ的安装配置

一&#xff0c;前言 RabbitMQ是由erlang语言开发&#xff0c;基于AMQP&#xff08;Advanced Message Queue 高级消息队列协议&#xff09;协议实现的消息队列&#xff0c;它是一种应用程序之间的通信方法&#xff0c;消息队列在分布式系统开发中应用非常广泛。点击跳转RabbitM…

90天玩转Python—05—基础知识篇:Python基础知识扫盲,使用方法与注意事项

90天玩转Python系列文章目录 90天玩转Python—01—基础知识篇:C站最全Python标准库总结 90天玩转Python--02--基础知识篇:初识Python与PyCharm 90天玩转Python—03—基础知识篇:Python和PyCharm(语言特点、学习方法、工具安装) 90天玩转Python—04—基础知识篇:Pytho…

SSM整合----第一个SSM项目

文章目录 前言一、使用步骤1.引入库2.建表3 项目结构4 web.xml的配置5 配置数据源6 SpringMVC配置7 配置MyBatis Mapper8 书写控制类 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; SSM整合是指Spring、SpringMVC和MyBatis这三个框架的整合使用。…