面试官最常问的 SpringCloud 面试题

2021-11-25 00:51 亚博全站首页
本文摘要:今天跟大家分享下SpringCloud常晤面试题的知识。1 什么是Spring Cloud?Spring cloud流应用法式启动器是基于Spring Boot的Spring集成应用法式,提供与外部系统的集成。Spring cloud Task,一个生命周期短暂的微服务框架,用于快速构建执行有限数据处置惩罚的应用法式。2 使用Spring Cloud有什么优势?

亚博全站首页

今天跟大家分享下SpringCloud常晤面试题的知识。1 什么是Spring Cloud?Spring cloud流应用法式启动器是基于Spring Boot的Spring集成应用法式,提供与外部系统的集成。Spring cloud Task,一个生命周期短暂的微服务框架,用于快速构建执行有限数据处置惩罚的应用法式。2 使用Spring Cloud有什么优势?使用Spring Boot开发漫衍式微服务时,我们面临以下问题:与漫衍式系统相关的庞大性-这种开销包罗网络问题,延迟开销,带宽问题,宁静问题。

服务发现-服务发现工具治理群集中的流程和服务如何查找和相互攀谈。它涉及一个服务目录,在该目录中注册服务,然后能够查找并毗连到该目录中的服务。冗余-漫衍式系统中的冗余问题。

负载平衡 --负载平衡改善跨多个盘算资源的事情负荷,诸如盘算机,盘算机集群,网络链路,中央处置惩罚单元,或磁盘驱动器的漫衍。性能-问题 由于种种运营开销导致的性能问题。

部署庞大性-Devops技术的要求。3 服务注册和发现是什么意思?Spring Cloud如何实现?当我们开始一个项目时,我们通常在属性文件中举行所有的设置。随着越来越多的服务开发和部署,添加和修改这些属性变得越发庞大。

有些服务可能会下降,而某些位置可能会发生变化。手动更改属性可能会发生问题。Eureka服务注册和发现可以在这种情况下提供资助。

由于所有服务都在Eureka服务器上注册并通过挪用Eureka服务器完成查找,因此无需处置惩罚服务所在的任何更改和处置惩罚。4 负载平衡的意义什么?在盘算中,负载平衡可以改善跨盘算机,盘算机集群,网络链接,中央处置惩罚单元或磁盘驱动器等多种盘算资源的事情负载漫衍。负载平衡旨在优化资源使用,最大化吞吐量,最小化响应时间并制止任何单一资源的过载。

使用多个组件举行负载平衡而不是单个组件可能会通过冗余来提高可靠性和可用性。负载平衡通常涉及专用软件或硬件,例如多层交流机或域名系统服务器历程。5 什么是Hystrix?它如何实现容错? Hystrix是一个延迟和容错库,旨在隔离远程系统,服务和第三方库的会见点,当泛起故障是不行制止的故障时,停止级联故障并在庞大的漫衍式系统中实现弹性。

通常对于使用微服务架构开发的系统,涉及到许多微服务。这些微服务相互协作。

思考以下微服务假设如果上图中的微服务9失败了,那么使用传统方法我们将流传一个异常。但这仍然会导致整个系统瓦解。随着微服务数量的增加,这个问题变得越发庞大。

微服务的数量可以高达1000.这是hystrix泛起的地方 我们将使用Hystrix在这种情况下的Fallback方法功效。我们有两个服务employee-consumer使用由employee-consumer公然的服务。简化图如下所示 现在假设由于某种原因,employee-producer公然的服务会抛出异常。我们在这种情况下使用Hystrix界说了一个回退方法。

这种后备方法应该具有与公然服务相同的返回类型。如果袒露服务中泛起异常,则回退方法将返回一些值。6 什么是Hystrix断路器?我们需要它吗? 由于某些原因,employee-consumer公然服务会引发异常。在这种情况下使用Hystrix我们界说了一个回退方法。

如果在公然服务中发生异常,则回退方法返回一些默认值。如果firstPage method() 中的异常继续发生,则Hystrix电路将中断,而且员工使用者将一起跳过firtsPage方法,并直接挪用回退方法。断路器的目的是给第一页方法或第一页方法可能挪用的其他方法留出时间,并导致异常恢复。

可能发生的情况是,在负载较小的情况下,导致异常的问题有更好的恢复时机。7 什么是Netflix Feign?它的优点是什么?Feign是受到Retrofit,JAXRS-2.0和WebSocket启发的java客户端联编法式。Feign的第一个目的是将约束分母的庞大性统一到http apis,而不思量其稳定性。在employee-consumer的例子中,我们使用了employee-producer使用REST模板公然的REST服务。

可是我们必须编写大量代码才气执行以下步骤:使用功效区举行负载平衡。获取服务实例,然后获取基本URL。使用REST模板来使用服务。前面的代码如下:@Controllerpublic class ConsumerControllerClient {@Autowiredprivate LoadBalancerClient loadBalancer;public void getEmployee() throws RestClientException, IOException { ServiceInstance serviceInstance=loadBalancer.choose("employee-producer"); System.out.println(serviceInstance.getUri()); String baseUrl=serviceInstance.getUri().toString(); baseUrl=baseUrl+"/employee"; RestTemplate restTemplate = new RestTemplate(); ResponseEntity<String> response=null;try{ response=restTemplate.exchange(baseUrl, HttpMethod.GET, getHeaders(),String.class); }catch (Exception ex) { System.out.println(ex); } System.out.println(response.getBody());}之前的代码,有像NullPointer这样的破例的时机,并不是最优的。

我们将看到如何使用Netflix Feign使呼叫变得越发轻松和清洁。如果Netflix Ribbon依赖关系也在类路径中,那么Feign默认也会卖力负载平衡。8 什么是Spring Cloud Bus?我们需要它吗? 思量以下情况:我们有多个应用法式使用Spring Cloud Config读取属性,而Spring Cloud Config从GIT读取这些属性。

下面的例子中多个员工生产者模块从Employee Config Module获取Eureka注册的产业。如果假设GIT中的Eureka注册属性更改为指向另一台Eureka服务器,会发生什么情况。在这种情况下,我们将不得不重新启动服务以获取更新的属性。

另有另一种使用执行器端点/刷新的方式。可是我们将不得不为每个模块单独挪用这个url。例如,如果Employee Producer1部署在端口8080上,则挪用 http:// localhost:8080 / refresh。

同样对于Employee Producer2 http:// localhost:8081 / refresh等等。这又很贫苦。这就是Spring Cloud Bus发挥作用的地方。Spring Cloud Bus提供了跨多个实例刷新设置的功效。

因此,在上面的示例中,如果我们刷新Employee Producer1,则会自动刷新所有其他必须的模块。如果我们有多个微服务启动并运行,这特别有用。

这是通过将所有微服务毗连到单个消息署理来实现的。无论何时刷新实例,此事件都市订阅到侦听此署理的所有微服务,而且它们也会刷新。可以通过使用端点/总线/刷新来实现对任何单个实例的刷新。

9 SpringCloud和DubboSpringCloud和Dubbo都是现在主流的微服务架构SpringCloud是Apache旗下的Spring体系下的微服务解决方案Dubbo是阿里系的漫衍式服务治理框架从技术维度上,其实SpringCloud远远的凌驾Dubbo,Dubbo自己只是实现了服务治理,而SpringCloud现在以及有21个子项目以后还会更多所以其实许多人都市说Dubbo和SpringCloud是不公正的可是由于RPC以及注册中心元数据等原因,在技术选型的时候我们只能二者选其一,所以我们经常为用他俩来对比服务的挪用方式Dubbo使用的是RPC远程挪用,而SpringCloud使用的是 Rest API,其实更切合微服务官方的界说服务的注册中心来看,Dubbo使用了第三方的ZooKeeper作为其底层的注册中心,实现服务的注册和发现,SpringCloud使用Spring Cloud Netflix Eureka实现注册中心,固然SpringCloud也可以使用ZooKeeper实现,但一般我们不会这样做服务网关,Dubbo并没有自己的实现,只能通过其他第三方技术的整合,而SpringCloud有Zuul路由网关,作为路由服务器,举行消费者的请求分发,SpringCloud还支持断路器,与git完美集身分布式设置文件支持版本控制,事务总线实现设置文件的更新与服务自动装配等等一系列的微服务架构要素10 技术选型现在海内的漫衍式系统选型主要还是Dubbo究竟国产,而且海内工程师的技术熟练水平高,而且Dubbo在其他维度上的缺陷可以由其他第三方框架举行集成举行弥补而SpringCloud现在是外洋比力盛行,固然我以为海内的市场也会逐步的偏向SpringCloud,就连刘军作为Dubbo重启的卖力人也揭晓过看法,Dubbo的生长偏向是努力适应SpringCloud生态,并不是起冲突11 Rest和RPC对比其实如果仔细阅读过微服务提出者马丁福勒的论文的话可以发现其界说的服务间通信机制就是Http RestRPC最主要的缺陷就是服务提供方和挪用方式之间依赖太强,我们需要为每一个微服务举行接口的界说,并通过连续继续公布,需要严格的版本控制才不会泛起服务提供和挪用之间因为版本差别而发生的冲突而REST是轻量级的接口,服务的提供和挪用不存在代码之间的耦合,只是通过一个约定举行规范,但也有可能泛起文档和接口纷歧致而导致的服务集成问题,但可以通过swagger工具整合,是代码和文档一体化解决,所以REST在漫衍式情况下比RPC越发灵活这也是为什么当当网的DubboX在对Dubbo的增强中增加了对REST的支持的原因12 文档质量和社区活跃度SpringCloud社区活跃度远高于Dubbo,究竟由于梁飞团队的原因导致Dubbo停止更新迭代五年,而中小型公司无法负担技术开发的成本导致Dubbo社区严重降低,而SpringCloud异军突起,迅速占领了微服务的市场,背靠Spring混的风生水起Dubbo经由多年的积累文档相当成熟,对于微服务的架构体系各个公司也有稳定的现状13 SpringBoot和SpringCloudSpringBoot是Spring推出用于解决传统框架设置文件冗余,装配组件繁杂的基于Maven的解决方案,旨在快速搭建单个微服务而SpringCloud专注于解决各个微服务之间的协调与设置,服务之间的通信,熔断,负载平衡等,技术维度并相同,而且SpringCloud是依赖于SpringBoot的,而SpringBoot并不是依赖与SpringCloud,甚至还可以和Dubbo举行优秀的整合开发总结:SpringBoot专注于快速利便的开发单个个体的微服务 SpringCloud是关注全局的微服务协调整理治理框架,整合并治理各个微服务,为各个微服务之间提供,设置治理,服务发现,断路器,路由,事件总线等集成服务SpringBoot不依赖于SpringCloud,SpringCloud依赖于SpringBoot,属于依赖关系SpringBoot专注于快速,利便的开发单个的微服务个体,SpringCloud关注全局的服务治理框架14 Eureka和ZooKeeper都可以提供服务注册与发现的功效,请说说两个的区别1.ZooKeeper保证的是CP,Eureka保证的是APZooKeeper在选举期间注册服务瘫痪,虽然服务最终会恢复,可是选举期间不行用的Eureka各个节点是平等关系,只要有一台Eureka就可以保证服务可用,而查询到的数据并不是最新的自我掩护机制会导致:Eureka不再从注册列表移除因长时间没收到心跳而应该逾期的服务Eureka仍然能够接受新服务的注册和查询请求,可是不会被同步到其他节点(高可用)当网络稳定时,当前实例新的注册信息会被同步到其他节点中(最终一致性)Eureka可以很好的应对因网络故障导致部门节点失去联系的情况,而不会像ZooKeeper一样使得整个注册系统瘫痪2.ZooKeeper有Leader和Follower角色,Eureka各个节点平等3.ZooKeeper接纳过半数存活原则,Eureka接纳自我掩护机制解决分区问题4.Eureka本质上是一个工程,而ZooKeeper只是一个历程15 微服务之间是如何独立通讯的微服务通信机制系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。围绕业务能力组织服务、自动化部署、智能端点、对语言及数据的去集中化控制。

将组件界说为可被独立替换和升级的软件单元。以业务能力为出发点组织服务的计谋。提倡谁开发,谁运营的开发运维一体化方法。

yabo888vip网页登录

RESTful HTTP协议是微服务架构中最常用的通讯机制。每个微服务可以思量选用最佳工具完成(如差别的编程语言)。允许差别微服务接纳差别的数据持久化技术。微服务很是重视建设架构及业务相关指标的实时监控和日志机制,必须思量每个服务的失败容错机制。

注重快速更新,因此系统会随时间不停变化及演进。可替代性模块化设计。微服务通信方式: 同步:RPC,REST等 异步:消息行列。

要思量消息可靠传输、高性能,以及编程模型的变化等。消息行列中间件如何选型1.协议:AMQP、STOMP、MQTT、私有协议等。

2.消息是否需要持久化。3.吞吐量。4.高可用支持,是否单点。

5.漫衍式扩展能力。6.消息聚集能力和重放能力。7.开发便捷,易于维护。

8.社区成熟度。RabbitMQ是一个实现了AMQP(高级消息行列协议)协议的消息行列中间件。

RabbitMQ支持其中的最多一次和最少一次两种。网易蜂巢平台的服务架构,服务间通过RabbitMQ实现通信。16 什么是服务熔断?什么是服务降级在庞大的漫衍式系统中,微服务之间的相互挪用,有可能泛起种种各样的原因导致服务的阻塞,在高并发场景下,服务的阻塞意味着线程的阻塞,导致当前线程不行用,服务器的线程全部阻塞,导致服务器瓦解,由于服务之间的挪用关系是同步的,会对整个微服务系统造成服务雪崩,为相识决某个微服务的挪用响应时间过长或者不行用进而占用越来越多的系统资源引起雪崩效应就需要举行服务熔断和服务降级处置惩罚。所谓的服务熔断指的是某个服务故障或异常一起类似显示世界中的“保险丝"当某个异常条件被触发就直接熔断整个服务,而不是一直等到此服务超时。

服务熔断就是相当于我们电闸的保险丝,一旦发生服务雪崩的,就会熔断整个服务,通过维护一个自己的线程池,当线程到达阈值的时候就启动服务降级,如果其他请求继续会见就直接返回fallback的默认值。17 微服务的优缺点划分是什么?说下你在项目开发中遇到的坑优点: 每一个服务足够内聚,代码容易明白开发效率提高,一个服务只做一件事 微服务能够被小团队单独开发 微服务是松耦合的,是有功效意义的服务 可以用差别的语言开发,面向接口编程易于与第三方集成 微服务只是业务逻辑的代码,不会和HTML,CSS或者其他界面组合 开发中,两种开发模式 前后端分散 全栈工程师 可以灵活搭配,毗连公共库/毗连独立库 缺点: 漫衍式系统的卖力性;多服务运维难度,随着服务的增加,运维的压力也在增大;系统部署依赖;服务间通信成本;数据一致性;系统集成测试;性能监控.18 你所知道的微服务技术栈有哪些?请枚举一二多种技术的荟萃体我们在讨论一个漫衍式的微服务架构的话,需要哪些维度维度(SpringCloud) 服务开发SpringBootSpringSpringMVC服务设置与治理 Netfilx公司的Archaiusm,阿里的Diamond服务注册与发现Eureka,ZooKeeper服务挪用Rest,RPC,gRPC服务熔断器Hystrix服务负载平衡Ribbon,Nginx服务接口挪用Feign消息行列Kafka,RabbitMq,ActiveMq服务设置中心治理SpringCloudConfing服务路由(API网关)Zuul事件消息总线SpringCloud Bus。


本文关键词:面试,官最,常问,的,SpringCloud,面,试题,今天,跟,亚博全站首页

本文来源:亚博yabo888vip官网-www.wxxrzs.com