当前位置: 首页 > 后端技术 > Java

分布式、微服务相关的面试必备题

时间:2023-04-02 00:33:07 Java

1.微服务和SOA的区别,优缺点?区别1).SOA(ServiceOrientedArchitecture)“面向服务的体系结构”:是一种设计方法,它包括多个服务,服务通过相互依赖最终提供一系列的功能。服务通常以独立的形式存在于操作系统进程中。每个服务都通过网络调用。2).微服务架构:其实类似于SOA架构。微服务是SOA的升华。微服务架构强调的重点之一就是“业务需要完全组件化、服务化”。将原来单一的业务系统拆分成多个可以独立开发、设计、运行的小应用。这些小应用通过服务完成交互和集成。微服务架构=80%SOA服务架构思想+100%组件架构思想+80%领域建模思想优缺点1、引入微服务会涉及到各种分布式问题:数据一致性、分布式部署一个微服务应用也是非常复杂的。分布式应用程序只需要在复杂的平衡器后面部署自己的服务器。每个应用实例都需要配置数据库、消息中间件等基础服务。相比之下,微服务应用程序通常由大量服务组成。每个服务都有多个实例。这会产生大量的配置、部署、扩展和监控,在此之上,您需要实现服务发现机制等,以发现与之通信的服务的地址(包括服务器地址和端口)。传统的问题解决方法无法解决此类复杂问题。那么,一个微服务应用的成功部署需要开发者对部署方式有足够的控制力,并且自动化程度高2.画一张dubbo(SOA)的角色调用关系图,并简单描述一下?(1)系统角色Provider:暴露服务的服务提供者。消费者:调用远程服务的服务消费者。注册表:用于服务注册和发现的注册表。Monitor:统计服务调用频率和调用时间的监控中心。容器:服务运行容器。(2)调用关系服务容器负责服务提供者的启动、加载和运行。当服务提供者启动时,它向注册中心注册它提供的服务。当服务消费者启动时,它向注册中心订阅它需要的服务。注册中心将服务提供者地址列表返回给消费者。如果有变化,注册中心会基于长连接将变化数据推送给消费者。服务消费者,从提供者地址列表中,根据软负载均衡算法选择一个提供者调用,如果调用失败,再选择另一个提供者调用。服务消费者和提供者在内存中累积调用次数和调用时间,每分钟定时向监控中心发送统计数据。3.分布式系统原理——CAP、BASE?CAPC-一致,一致。具体来说,操作成功后,所有节点同时看到相同的数据。因此,一致性指的是数据的一致性。A-可用性,可用性。表示服务持续可用,并在规定时间内完成响应。P-Partitiontolerance,分区容错。这意味着分布式系统在遇到节点或网络分区故障时仍然可以对外提供服务。CAP原则指出这三个指标不能同时满足,在分布式系统中最多要满足其中两个,所以只有两个选择:CP和APBASEBASE是BasiclyAvailable(基本可用),Soft-状态(软状态),最终一致的缩写。BasicallyAvailable,基本可用是指当分布式系统发生故障时,允许其失去部分可用性,即保证核心可用。电商推广期间,为应对访问量激增,部分用户可能会被引导至降级页面,服务层可能仅提供降级服务。这就是失去部分可用性的体现。软状态(SoftState)软状态是指允许系统存在于一种中间状态,并且该中间状态不会影响系统的整体可用性。在分布式存储中,一条数据一般至少有两到三个副本,不同节点之间允许副本同步的延迟就是软状态的体现。mysql复制的异步复制也是一种表现。最终一致性(EventualConsistency)最终一致性是指系统中的所有数据副本在经过一定时间后最终能够达到一致状态。弱一致性是强一致性的对立面,最终一致性是弱一致性的特例。4、RPC(如:dubbo)包含哪些组件,RPC协议的组成?5、你了解分布式事务吗?你是如何解决分布式事务问题的?五种解决方案:分为两大类:CAP理论事务方案:两阶段提交方案/XA方案BAS灵活事务方案:*TCC(两阶段型,补偿型)本地消息表*可靠消息最终一致性(异步保证型)Besteffortnotification(不可靠消息,定期校对)Reliablemessageeventualconsistency(异步保证型)RocketMQ事务消息方案:执行过程  为了方便理解,我们也以注册送分的例子来描述整个过程.生产者是MQ发送者。在这个例子中,它是用户服务,负责添加新用户。MQ订阅者是消息消费者。在本例中,是积分服务,负责添加积分。1)、Producer发送事务消息  Producer(MQ发送者)发送事务消息给MQServer,MQServer将消息状态标记为Prepared(就绪状态),注意这个消息消费者(MQ订阅者)是不能被消费的.本例中,Producer向MQServer发送“增加积分消息”。2)、MQServer响应消息发送成功  MQServer收到Producer发送的消息,然后响应消息发送成功,表示MQ已经收到消息。3)、Producer执行本地事务  Producer执行业务代码逻辑,由本地数据库事务控制。在此示例中,生产者执行添加用户操作。4)消息传递  如果Producer本地事务执行成功,会自动向MQServer发送commit消息。MQServer收到commit消息后,会将“IncreasePointsMessage”状态标记为可消费。此时MQ订阅者(点服务)即正常消费消息;  Producer如果执行本地事务失败,会自动向MQServer发送回滚消息,MQServer收到回滚消息后删除“增分消息”。MQ订阅者(点服务)消费消息,消费成功则向MQ响应ack,否则重复接收消息。这里的ack默认是自动响应的,也就是程序正常运行的时候自动响应ack。5)事务审核  如果Producer端本地事务执行过程中执行端挂了或者超时,MQServer会不断询问同组的其他Producer获取事务执行状态。这个过程称为交易退货检查。MQServer会根据事务审核的结果决定是否投递消息。  以上主要流程已经由RocketMQ实现。对于用户端,用户需要分别实现本地事务执行和本地事务审核方法,因此只需要关注本地事务的执行情况即可。贵公司如何处理分布式事务?如果真要问的话,可以说我们用TCC是为了在特别严格的场景下保证强一致性;还有一些场景是基于阿里的RocketMQ实现分布式事务。如果您正在寻找具有严格资本要求的场景,那么您永远不会出错。你可以说你用的是TCC方案;如果是一般的分布式事务场景,插入订单后,需要调用库存服务更新库存。库存数据不像资金那样敏感。您可以使用可靠的消息最终一致性方案。6.说说你对IO、NIO、AIO的理解?IO(同步阻塞)NIO(同步非阻塞)AIO(异步非阻塞)是在NIO的基础上实现的,利用事件机制调用(通过指定CompletionHandler回调接口)实现异步io操作谈谈对多路复用的理解?基于selector监听多个chanelready事件,一个线程可以处理多个chanel的读写数据。与同步阻塞IO线程相比,处理一个socekt连接性能更高,可以解决高并发场景下大量线程造成的资源浪费。