黑狐家游戏

微服务和分布式有什么区别,面试题微服务和分布式的区别

欧气 4 0

《微服务与分布式:深入剖析二者的区别》

一、概念阐述

(一)分布式系统

分布式系统是一个广义的概念,它指的是将一个系统拆分成多个独立的组件,这些组件分布在不同的机器或进程中,通过网络进行通信和协作,以实现共同的目标,其目的在于提高系统的性能、可扩展性、可靠性等,一个大型的电商系统,将订单处理、库存管理、用户认证等功能分布在不同的服务器上运行,这些服务器共同组成了一个分布式系统。

(二)微服务

微服务是一种架构风格,它是分布式系统的一种特定实现形式,微服务将一个大型的应用程序拆分成多个小型的、独立的服务,每个服务都有自己的业务逻辑、数据库(可以是独立的数据库,也可以共享部分数据存储),并且可以独立开发、部署和扩展,一个在线旅游平台的微服务架构可能包含酒店预订服务、机票预订服务、旅游攻略服务等,每个服务都可以独立进行维护和升级。

二、架构特征区别

(一)服务粒度

1、分布式系统

分布式系统的组件划分粒度相对较粗,它可能按照功能模块或者业务子系统进行划分,例如在企业资源规划(ERP)系统中,将财务模块、生产模块、销售模块分布在不同的服务器上,每个模块内部可能包含多个功能相关的部分,它们作为一个整体在分布式环境下协作。

2、微服务

微服务的粒度更细,它强调单一职责原则,每个微服务专注于完成一个特定的、小型的业务功能,以电商系统为例,商品图片的存储和管理可能就是一个独立的微服务,它只负责图片的上传、存储、检索等功能,与其他诸如商品信息管理、订单处理等服务完全分离。

(二)独立性

1、分布式系统

分布式系统中的组件虽然是独立部署的,但在数据共享和交互方面可能存在较紧密的耦合,不同的分布式组件可能共享同一个数据库,对数据库结构的修改可能会影响到多个组件,并且在通信协议上,可能采用一些内部定制的协议,这些协议在不同组件之间的耦合度较高。

2、微服务

微服务具有高度的独立性,每个微服务都有自己独立的数据库(或者数据存储方式),可以使用不同的技术栈进行开发,如一个微服务可以用Java编写,另一个可以用Python编写,它们之间通过轻量级的通信协议(如RESTful API或者消息队列)进行交互,这种交互是松耦合的,一个微服务的更新或故障不会直接影响到其他微服务的正常运行。

(三)部署与扩展

1、分布式系统

分布式系统的部署相对复杂,由于组件之间的耦合度较高,在进行扩展时可能需要整体考虑,当一个分布式系统中的某个功能模块面临高并发压力时,可能需要同时对相关的多个组件进行硬件资源的扩展或者重新配置,因为它们可能共享某些资源或者在业务逻辑上紧密相关。

2、微服务

微服务的部署非常灵活,由于每个微服务都是独立的,所以可以根据业务需求单独对某个微服务进行部署和扩展,在电商促销活动期间,如果订单服务面临高并发压力,可以单独对订单微服务进行水平扩展,增加处理订单的实例数量,而其他微服务(如商品推荐微服务)不受影响。

三、通信机制区别

(一)分布式系统

分布式系统的通信机制多样,可能采用基于远程过程调用(RPC)的方式,这种方式在效率上可能较高,但通常依赖于特定的语言和框架,Java的RMI(远程方法调用)就是一种典型的RPC机制,它在Java分布式系统中被广泛应用,但这种方式使得不同语言编写的组件之间通信较为困难,并且分布式系统内部的通信可能包含大量的内部逻辑和复杂的配置。

(二)微服务

微服务主要采用轻量级的通信协议,RESTful API是最常见的一种,它基于HTTP协议,具有跨语言、跨平台的特性,使得不同技术栈的微服务之间可以方便地进行通信,消息队列(如RabbitMQ、Kafka等)也被广泛应用于微服务之间的异步通信,这种方式可以提高系统的响应速度和可靠性,通过消息的发布 - 订阅模式,各个微服务之间可以解耦得更加彻底。

四、数据管理区别

(一)分布式系统

分布式系统可能存在集中式的数据管理方式,虽然组件分布在不同的地方,但可能共享一个大型的数据库,数据的一致性维护相对复杂,在分布式数据库系统中,需要通过复杂的分布式事务处理机制来保证数据在不同节点上的一致性,如两阶段提交(2PC)或者三阶段提交(3PC)协议。

(二)微服务

微服务倡导每个微服务拥有自己的数据存储,这样可以更好地实现数据的隔离,每个微服务可以根据自己的业务需求选择合适的数据库类型,如关系型数据库(MySQL)或者非关系型数据库(MongoDB),虽然这种方式增加了数据管理的复杂性(如数据同步等问题),但提高了每个微服务的自主性和灵活性。

五、故障处理区别

(一)分布式系统

在分布式系统中,由于组件之间的耦合度较高,一个组件的故障可能会影响到整个系统的运行,如果分布式系统中的核心通信组件出现故障,可能会导致多个功能模块之间无法正常通信,从而使整个系统陷入瘫痪,故障的排查和恢复也相对困难,因为需要考虑多个组件之间的交互关系。

(二)微服务

微服务的故障隔离性较好,一个微服务的故障通常不会影响到其他微服务的正常运行,因为它们之间是松耦合的,如果商品评论微服务出现故障,用户仍然可以正常浏览商品信息、下单等,只是无法查看商品评论,并且在故障恢复方面,由于每个微服务相对独立,可以快速定位故障微服务并进行修复或重新部署。

微服务和分布式虽然有一定的关联,但在架构特征、通信机制、数据管理和故障处理等方面存在明显的区别,在实际的系统架构设计中,需要根据业务需求、团队技术能力、成本等多方面因素综合考虑选择合适的架构方式。

标签: #微服务 #分布式 #区别 #面试题

黑狐家游戏
  • 评论列表

留言评论