今天给大家分享一下SpringCloud常见面试题的知识。1.什么是SpringCloud?SpringCloudStreamApplicationEnabler是一个基于SpringBoot的SpringIntegration应用程序,提供与外部系统的集成。SpringcloudTask,一个短暂的微服务框架,用于快速构建执行有限数据处理的应用程序。2、使用SpringCloud有什么优势?在使用SpringBoot开发分布式微服务时,我们面临以下问题:与分布式系统相关的复杂性——这种开销包括网络问题、延迟开销、带宽问题、安全问题。服务发现-服务发现工具管理集群中的进程和服务如何相互查找和对话。它涉及一个服务目录,在该目录中注册服务,然后能够找到并连接到该目录中的服务。冗余-分布式系统中的冗余问题。负载平衡——负载平衡改善了工作负载在多个计算资源(例如计算机、计算机集群、网络链接、中央处理器或磁盘驱动器)之间的分布。性能问题由于各种操作开销导致的性能问题。部署复杂性-DevOps技能的要求。3、服务注册和发现是什么意思?SpringCloud是如何实现的呢?当我们开始一个项目时,我们通常会在属性文件中进行所有配置。随着更多服务的开发和部署,添加和修改这些属性变得更加复杂。某些服务可能会关闭,某些位置可能会发生变化。手动更改属性可能会有问题。EurekaServiceRegistrationandDiscovery可以在这种情况下提供帮助。由于所有服务都注册在Eureka服务器上,通过调用Eureka服务器进行查找,所以不需要处理服务位置的任何变化和处理。4、负载均衡是什么意思?在计算中,负载平衡改善了工作负载在多个计算资源(例如计算机、计算机集群、网络链接、中央处理器或磁盘驱动器)之间的分布。负载平衡旨在优化资源使用、最大化吞吐量、最小化响应时间并避免使任何单个资源过载。使用多个组件进行负载平衡而不是单个组件可以通过冗余提高可靠性和可用性。负载平衡通常涉及专门的软件或硬件,例如多层交换机或域名系统服务器进程。5.什么是Hystrix?它是如何实现容错的?Hystrix是一个延迟和容错库,旨在隔离远程系统、服务和第三方库的访问点,停止级联故障,并在故障不可避免时在复杂的分布式系统中实现弹性。通常对于使用微服务架构开发的系统,会涉及到很多微服务。这些微服务相互协作。考虑以下微服务:假设如果上图中的微服务9失败,那么我们将使用传统方法传播异常。但这仍然会使整个系统崩溃。随着微服务数量的增加,这个问题变得更加复杂。微服务的数量可以高达1000。这就是hystrix的用武之地。我们将在这种情况下使用Hystrix的Fallback方法功能。我们有两个服务employee-consumerconsumingservicesexposedbyemployee-consumer。简化图如下所示:现在假设由于某种原因,employee-producer公开的服务抛出异常。在这种情况下,我们使用Hystrix定义了一个回退方法。此回退方法应具有与公开服务相同的返回类型。如果暴露的服务发生异常,回退方法将返回一些值。6、什么是Hystrix断路器?我们需要它吗出于某种原因,员工-消费者公开服务会引发异常。在这种情况下使用Hystrix,我们定义了一个回退方法。如果暴露的服务发生异常,回退方法返回一些默认值。如果firstPagemethod()中的异常继续出现,Hystrix电路将中断,workerconsumer将一起跳过firstsPage方法,直接调用fallback方法。断路器的目的是给第一页方法,或者第一页方法可能调用的其他方法时间,并导致异常恢复。可能发生的情况是,导致异常的问题在负载较小的情况下有更好的恢复机会。7.NetflixFeign是什么?它的优点是什么?Feign是一个受Retrofit、JAXRS-2.0和WebSocket启发的java客户端绑定程序。Feign的首要目标是将约束分母的复杂性统一到httpapi而不管它们的稳定性。在员工-消费者示例中,我们使用了员工-生产者使用REST模板公开的REST服务。但是我们要写很多代码来执行下面的步骤:1.使用Ribbon做负载均衡。2.获取服务实例,然后获取基础URL。3.利用REST模板消费服务。上述代码如下:@ControllerpublicclassConsumerControllerClient{@AutowiredprivateLoadBalancerClientloadBalancer;publicvoidgetEmployee()throwsRestClientException,IOException{ServiceInstanceserviceInstance=loadBalancer.choose("employee-producer");System.out.println(serviceInstance.getUriancel()service;.toString();baseUrlbaseUrl=baseUrl+"/employee";RestTemplaterestTemplate=newRestTemplate();ResponseEntityresponse=null;try{response=restTemplate.exchange(baseUrl,HttpMethod.GET,getHeaders(),String.class);}catch(Exceptionex){System.out.println(ex);}System.out.println(response.getBody());}之前的代码,有可能像NullPointer这样的异常,并不是最优的。我们将看到NetflixFeign如何让通话更轻松、更清晰。如果NetflixRibbon依赖项也在类路径中,那么Feign也会默认负责负载平衡。8.什么是SpringCloudBus?我们是否需要它考虑以下情况:我们有多个应用程序使用SpringCloudConfig读取属性,而SpringCloudConfig从GIT读取这些属性。在下面的示例中,多个员工生产者模块从员工配置模块中获取Eureka注册的属性。如果假设GIT中的Eureka注册表属性更改为指向另一个Eureka服务器,会发生什么情况。在这种情况下,我们将不得不重新启动服务以获取更新的属性。还有另一种使用执行器端点/refresh的方法。但是我们必须为每个模块单独调用这个url。例如EmployeeProducer1部署在8080端口,调用http://localhost:8080/refresh。EmployeeProducer2也一样http://localhost:8081/refresh等,又麻烦了。这就是SpringCloudBus发挥作用的地方。SpringCloudBus提供了跨多个实例刷新配置的能力。所以在上面的例子中,如果我们刷新EmployeeProducer1,所有其他需要的模块将自动刷新。如果我们启动并运行了多个微服务,这将特别有用。这是通过将所有微服务连接到单个消息代理来实现的。每当一个实例被刷新时,这个事件就会被订阅到所有监听这个代理的微服务,它们也会被刷新。可以通过使用端点/bus/refresh来刷新任何单个实例。9、SpringCloud和DubboSpringCloud和Dubbo都是主流的微服务架构;SpringCloud是Apache的Spring体系下的微服务解决方案;Dubbo是阿里体系的分布式服务治理框架。在技??术上,SpringCloud其实是远远超过Dubbo的。Dubbo本身只是实现了服务治理,而SpringCloud现在有21个子项目,未来还会有更多。所以其实很多人会说Dubbo和SpringCloud不公平,但是由于RPC和注册中心元数据等原因,我们在选择技术的时候只能二选一,所以我们经常拿它们来做比较。服务调用方式Dubbo使用的是RPC远程调用,而SpringCloud使用的是RestAPI,其实更符合官方对微服务的定义。从服务注册中心的角度来看,Dubbo使用第三方ZooKeeper作为其底层注册中心,实现服务注册和发现。SpringCloud使用SpringCloudNetflixEureka实现注册中心。当然SpringCloud也可以使用ZooKeeper来实现,但一般我们不会做。服务网关,Dubbo没有自己的实现,只能通过其他第三方技术集成,而SpringCloud有Zuul路由网关,作为路由服务器,分发消费者请求,SpringCloud也支持断路器,与git完美集成分布式配置文件支持版本控制,事务总线实现了配置文件的更新、服务的自动组装等一系列微服务架构元素。10、技术选型目前国内分布式系统选型主要是Dubbo,毕竟是国产的,而且国内工程师的技术水平高,Dubbo在其他维度的缺陷可以通过集成其他的来弥补第三方框架。SpringCloud目前在国外比较流行。当然,我认为国内市场会逐渐向SpringCloud靠拢。就连作为Dubbo重启负责人的刘军也发表了自己的看法。Dubbo的发展方向是主动适配SpringCloud生态,不冲突。11、Rest与RPC相比,如果你仔细阅读微服务创始人MartinFowler的论文,你会发现它定义的服务间通信机制是Http。RestRPC的主要缺陷是服务提供者和调用方法之间存在过多的依赖。我们需要为每个微服务定义接口,并通过不断的继承来发布。需要严格的版本控制,才能保证服务的提供和调用不会因为版本不同而产生冲突。REST是一个轻量级的接口,服务提供和调用中的代码之间没有耦合,只是通过约定来规范,但是也可能存在文档和接口不一致导致的服务集成问题,但是可以通过swagger工具,它是代码和文档的一体化解决方案,所以REST在发行版中,这也是为什么当当网的DubboX在Dubbo的增强中加入了对REST的支持。12、文档质量和社区活跃度SpringCloud社区活跃度远高于Dubbo。毕竟,由于梁飞团队的原因,Dubbo停止了五年的更新迭代,中小企业无力承担技术开发成本,导致Dubbo社区严重衰退,SpringCloud的异军突起,迅速占领了微服务市场。文档积累相当成熟,各家公司对微服务架构体系的现状都比较稳定。单体微服务和SpringCloud重点解决各个微服务之间的协调配置、服务之间的通信、熔断器、负载均衡等,技术维度是一样的,SpringCloud依赖SpringBoot,而SpringBoot不依赖SpringCloud,并且甚至可以与Dubbo进行出色的集成开发。总结:1.SpringBoot专注于快速便捷的开发个体微服务2.SpringCloud它是一个微服务协调和治理框架,着眼于全局,集成和管理各种微服务,提供各种微服务之间的配置管理、服务发现、断路器、路由、事件总线等集成服务。3、SpringBoot不依赖SpringCloud,SpringCloud依赖SpringBoot,属于依赖关系。4.SpringBoot专注于快速便捷地开发单个微服务。SpringCloud专注于全局服务治理框架。14、Eureka和ZooKeeper都可以提供服务注册和发现功能。请说说两者的区别1、ZooKeeper保证的是CP,Eureka保证的是选举期间APZooKeeper的注册服务瘫痪。虽然服务最终会恢复,但选举期间不可用的Eureka节点是相等的。只要有一个Eureka,就可以保证服务可用,但是查询到的数据不是最新的自我保护机制会导致:Eureka不再移除因长期接收不到心跳而应该过期的服务登记表。Eureka仍然可以接受新服务的注册和查询请求,但不会同步到其他节点(高可用)。当网络稳定时,会将当前实例的新注册信息同步到其他节点(最终一致性)。Eureka可以很好地处理部分节点因网络故障而失去联系的情况。不会像ZooKeeper一样瘫痪整个注册系统。2、ZooKeeper有Leader和Follower的角色,Eureka的每个节点都是平等的。而ZooKeeper只是一个进程15.微服务之间如何独立通信的微服务通信机制:系统中的每个微服务都可以独立部署,每个微服务是松耦合的。每个微服务只专注于完成一项任务。任务并做好。围绕业务功能组织服务、自动化部署、智能端点以及分散对语言和数据的控制。将组件定义为可以独立替换和升级的软件单元。一种基于业务能力组织服务的策略。提倡谁开发,谁运营一体化的开发运维方式。RESTfulHTTP协议是微服务架构中最常用的通信机制。每个微服务都可以考虑选择最好的工具来完成(比如不同的编程语言)。允许不同的微服务使用不同的数据持久化技术。微服务非常重视对架构和业务相关指标建立实时监控和日志记录机制,必须考虑到每个服务的容错机制。专注于快速更新,因此系统会随着时间不断变化和发展。替代模块化设计。微服务通信方式:同步:RPC、REST等异步:消息队列。要考虑消息的可靠传输、高性能、编程模型的改变。如何选择消息队列中间件:1、协议:AMQP、STOMP、MQTT、私有协议等2、消息是否需要持久化。3.吞吐量。4.高可用支持,是否是单点。5.分布式可扩展性。6.消息累积能力和重放能力。7、开发方便,维护方便。8.社区成熟度。RabbitMQ是一个消息队列中间件,实现了AMQP(高级消息队列协议)协议。RabbitMQ支持最多一次和至少一次。网易蜂巢平台的服务架构,服务之间的通信是通过RabbitMQ实现的。16、什么是服务融合?什么是服务降级?在复杂的分布式系统中,当微服务相互调用时,各种原因可能导致服务阻塞。在高并发场景下,服务阻塞是指线程被阻塞,导致当前线程不可用,服务器的所有线程都被阻塞,导致服务器崩溃。由于服务之间的调用关系是同步的,所以会造成整个微服务系统的服务雪崩。为了解决某个微服务调用响应时间过长或不可用,会占用越来越多的系统资源,造成雪崩效应,需要进行服务熔断和服务降级处理。所谓服务熔断,是指服务出现故障或异常,类似于显示界的“熔断器”。当触发异常情况时,直接熔断整个服务,而不是等到服务超时。服务熔断器相当于我们交换机的熔断器。一旦发生服务雪崩,整个服务就会被熔断。通过维护自己的线程池,当线程达到阈值时,服务就会降级。如果其他请求继续访问,则直接返回fallback为默认值。17.微服务的优点和缺点是什么?说说你在项目开发中遇到的坑。优点:每个服务足够内聚,代码通俗易懂,提高开发效率,一个服务只做一件事。微服务可以很小团队单独开发的微服务是松耦合的,可以用不同的语言开发具有功能意义的服务。面向接口的编程很容易与第三方集成。微服务只是业务逻辑代码,不会与HTML、CSS或其他接口结合开发。其中,两种开发模式前后端分离,可灵活搭配全栈工程师对接公共库/对接独立库。缺点:分布式系统的责任;多业务运维难度。随着业务的增多,运维的压力也越来越大。增加;系统部署依赖;服务间通信成本;数据一致性;系统集成测试;对于分布式微服务架构,需要哪些维度(SpringCloud)?服务开发SpringBootSpringMVC服务配置与管理Netfilx的Archaiusm、阿里的Diamond服务注册与发现Eureka、ZooKeeper服务调用Rest、RPC、gRPC服务熔断Hystrix服务负载均衡Ribbon、Nginx服务接口调用Feign消息队列Kafka、RabbitMq、ActiveMq服务配置中心管理SpringCloudConfig服务路由(API网关)Zuul事件消息总线SpringCloudBus参考:https://blog.csdn.net/moakun/article/details/82817757今天分享了这么多,如果觉得文章对您有帮助,请点击【正在看】点击右下角,让更多人看到文章。