SpringCloud面试题 1、什么是SpringCloud?
Spring cloud流应用程序启动器是基于 Spring Boot的 Spring集成应用程序,提供与外部系统的集 成.
SpringcloudTask,一个生命周期短暂的微服务框架,用于快速构建执行有限数据处理的应用程 序.
2、使用SpringCloud有什么优势?
使用SpringBoot开发分布式微服务时,我们面i临以下问题 1、与分布式系统相关的复杂性-这种开销包括网络问题,延迟开销,带宽问题,安全问题.
2、服务发现-服务发现工具管理群集中的流程和服务如何查找和互相交谈.
它涉及一个服务目录,在该 目录中注册服务,然后能够查找并连接到该目录中的服务.
3、余-分布式系统中的元余问题.
4、负载平衡-负载平衡改善跨多个计算资源的工作负荷,诸如计算机,计算机集群,网络链路,中央 处理单元,或磁盘驱动器的分布.
5、性能-问题由于各种运营开销导致的性能问题.
6、部署复杂性-Dewop技能的要求 3、服务注册和发现是什么意思?
SpringCloud如何实现?
当我们开始一个项目时,我们通常在属性文件中进行的配置.
随着越来越多的服务开发和部署,添 加和修改这些属性变得更加复杂.
有些服务可能会下降,而某些位置可能会发生变化.
手动更改属性可 能会产生问题.
Eureka服务注册和发现可以在这种情况下提供帮助.
由于服务都在Eurka服务 器上注册井通过调用Ewrka服务器完成查找,因此无需处理服务地点的任何更改和处理.
4、负载平衡的意义什么?
在计算中,负载平衡可以改善跨计算机,计算机集群.
网络链接,中央处理单元或磁盘驱动器等多种计 算资源的工作负载分布.
负载平衡旨在优化资源使用,最大化吞吐量,最小化响应时间并避免任何单一 资源的过载.
使用多个组件进行负载平衡而不是单个组件可能会通过余来提高可靠性和可用性.
负载 平衡通常涉及专用软件或硬件,例如多层交换机或域名系统服务器进程.
5、什么是Hystrix?
它如何实现容错?
Hyatrik是一个延迟和容错库,旨在隔离远程系统,服务和第三方库的访问点,当出现故障是不可避免 的故障时,停止级联故障并在复杂的分布式系统中实现弹性.
通常对于使用微服务架构开发的系统,涉 及到许多微服务.
这些微服务被此协作.
思考以下微服务 Microservice2 Microservice5 Microservice7 Microservice1 Microservice5 Microservices Microservice3 Microservice4 Microservice9 假设如果上图中的微服务失败了,那么使用传统方法我们将传播一个异常.
但这仍然会导致整个系统 前渍.
随着微服务数量的增加,这个问题变得更加复杂.
微服务的数量可以高达1000.这是bgtrix出 现的地方我们将使用Hyatrix在这种情况下的 Fallback 方法功能.
我们有两个服务employee consumer 使用由employee=consumer 公开的服务.
简化图如下所示 Consume Service Employee-Producer Employee-Consumer 现在假设由于某种原因,mploye*producer公开的服务会抛出异常.
我们在这种情况下使用Hyatrix 定义了一个回退方法.
这种后备方法应该具有与公开服务相同的返回类型.
如果暴露服务中出现异常, 则回退方法将返回一些值.
6、什么是Hystrix断路器?
我们需要它吗?
由于某些原因,employeeconsuwer公开服多会引发异常.
在这种情况下使用ystrx 我们定义了一 个回退方法.
如果在公开服务中发生异常,则回退方法返回一些默认值.
Employee Producer Callthe firstPage() firstPage() method method Employee Consumer annotated with On Exception Hystrix Command fisrtPage() in method call Fallback Fallback method method() 如果firstPageMethodo中的异常继续发生,则Hgstrix电路将中断,井且员工使用者特一起跳过 frtsPag方法,并直接调用回退方法.
断路器的目的是给第一页方法或第一页方法可能调用的其他方 法留出时间,并导致异常恢复.
可能发生的情况是,在负载较小的情况下,导致异常的问题有更好的恢 复机会.
Circult Broken due Employee continuous exceptions Producer in firstpage0 method method directyincase Call me Faback trsPagel) ofcircuitbreak annotated wih mehod Command Hystix Falback method() 1、什么是NetflixFeign?
它的优点是什么?
Feign是受到Retrofit,JAxRS-2.o和 webSocket 后发的java客户摇联编程序.
Feign的第一个目标是 将约束分母的复杂性统一到httpapia,而不考虑其稳定性.
在employeeconaumer 的例子中,我们 使用了emplogeeproducer使用REST模板公开的REST服务.
但是我们必须编写大量代码才能执行以下步骤 1、使用功能区进行负载平衡.
2、获取服务实例,然后获取基本URL.
3、利用REST模板来使用服务.
前面的代码如下 eController publlc class ConsumerControllerCllent ( SAutowired private LoadBalancerClient loadBolancer: publlc void getEmploye) throus RestClientException IOException { Servicelnstanceservicelnstance-loadBalancer.chooselonployeo producer': System out.printinlservicelnstance.getUri(0)3:
String baseurtservicelnstonce.geturi0.toString(l: boselr-baseuri'/enployee": RestTenplate restTenplate =new RestTenplatell: ResponseEntity(String> response=mul tryf responserestTemplate.exchange(baseUrl HttpMethod.GET getHeaders0 String.clss Jcateh (Exception ex) Systen.out.printinlex): } System.out.printiniresponse.getBodyOl 之前的代码,有像WullPonter这样的例外的机会,并不是最优的.
我们将看到如何使用WetfixFeign 使呼叫变得更加轻松和清洁.
如果Wotflix Ribbon依赖关系也在类路径中,那么Feign默认也会负责负 载平衡.
8、什么是SpringCloudBus?
我们需要它吗?
考虑以下情况:我们有多个应用程序使用 Spring Cloud Config读取属性,而Spring Cloud Config从 GT读取这些属性.
下面的例子中多个员工生产者模块从Emplogee Config module获取 Eureka注册的财产 ServiceRegistration EmployeeProducer1 To Eureka Get Global Propertieslike Eureka Registration url EmployeeProducer2 Employee Config Server Eureka EmployeeProducer3 Service Registry Employee Producer4 Properties Storedin GIT 如果假设GIT中的Eureka注册属性更改为指向另一台Eureka服务器,会发生什么情况.
在这种情况 下,我们将不得不重新后动服务以获取更新的属性.
还有另一种使用执行器端点刷新的方式.
但是我 们将不得不为每个模块单独调用这个url例如,如果EnployeProducer1部署在端口8080上,则 调用http:// localhost:8080/refresh,同样对于Emplogee Producer2http://localhost:8081/ refresh等等.
这又很麻烦.
这就是SpringCloud Bus发挥作用的地方.
Refresh notification Service Registration EmployeeProducer1 To Eureka Refresh notification EmployeeProducer2 R Emplovee Config A Server B Eureka Service EmployeeProducer3 Registry Refresh M notificati Properties on Storedin Employee Producer4 GIT Refreshnotification Spring Cloud Bus提供了跨多个实例刷新配置的功能.
因此,在上面的示例中,如果我们刷新 Employ*Produeer1,则会自动刷新其他必需的模块.
如果我们有多个微服务后动并运行,这特 别有用.
这是通过将微服务连接到单个消息代理来实现的.
无论何时刷新实例,此事件都会订阅到 侦听此代理的微服务,并且它们也会刷新.
可以通过使用端点总线刷新来实现对任何单个实例的 刷新 9、什么是微服务 微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分为一组小的服务,每个 服务运行在其独立的自己的进程中,服务之间相互协调、互相配合,为用户提供最终价值.
服务之间采 用轻量级的通信机制互相沟通(通常是基于WTTP的RESTAPI)每个服务都围绕着具体的业务进行构 建,并且能够被独立的构建在生产环境、类生产环境等.
另外,应避免统一的、集中式的服务管理机 制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建,可以有一个非 常轻量级的集中式管理来协调这些服务,可以使用不同的语言来编写服务,也可以使用不同的数据存 储.
10、什么是服务熔断?
什么是服务降级 熔断机制是应对雪崩效应的一种微服务链路保护机制.
当某个微服务不可用或者响应时间太长时,会进 行服务降级,进而熔断该节点微服务的调用,快速返回“错误”的响应信息.
当检测到该节点微服务调用 响应正常后恢复调用链路.
在SpringCloud框架里熔断机制通过Hystri实现,Hyatrik会监控微服务间调 用的状况,当失败的调用到一定阅值,缺省是5秒内调用20次,如果失败,就会后动熔断机制.
服务降级,一般是从整体负荷考虑.
就是当某个服务熔断之后,服务器将不再被调用,此时客户端可以 自己准备一个本地的falbaek回调,返回一个缺省值.
这样做,虽然水平下降,但好列可用,比直接挂 掉强.