1、什么是Spring Cloud?

Spring cloud 流应用程序启动器是基于 Spring Boot 的 Spring 集成应用程序,提供与外部系统的集成,更专注于服务治理。Spring cloud Task,一个生命周期短暂的微服务框架,用于快速构建执行有限数据处理的应用程序。

2、Spring Cloud和Dubbo的区别

  • Dubbo关注的领域是Spring Cloud的一个子集。Dubbo专注于服务治理,其在服务治理、灰度发布、流量分发方面比Spring Cloud更全面。Spring Cloud覆盖整个微服务架构领域。
  • Dubbo使用RPC调用效率高一些,Spring Cloud使用HTTP调用效率低,使用更简单。

3、REST和RPC的区别

  • REST风格的系统交互更方便,RPC调用服务提供方和调用方式之间依赖太强。
  • REST调用系统性能较低,RPC调用效率比REST高。
  • REST的灵活性可以跨系统跨语言调用,RPC只能在同语言内调用。
  • REST可以和Swagger等工具整合,自动输出接口API文档。

4、SpringCloud如何实现服务的注册和发现

  1. 服务在发布时 指定对应的服务名(服务名包括了IP地址和端口) 将服务注册到注册中心(eureka或者zookeeper)。
  2. 这一过程是springcloud自动实现 只需要在main方法添加@EnableDisscoveryClient 同一个服务修改端口就可以启动多个实例。
  3. 调用方法:传递服务名称通过注册中心获取所有的可用实例 通过负载均衡策略调用(ribbon和feign)对应的服务。

5、什么是服务熔断和服务降级?

  • 熔断机制是应对雪崩效应的一种微服务链路保护机制。当某个微服务不可用或者响应时间太长时,会进行服务降级,进而熔断该节点微服务的调用,快速返回“错误”的响应信息。当检测到该节点微服务调用响应正常后恢复调用链路。在SpringCloud框架里熔断机制通过Hystrix实现,Hystrix会监控微服务间调用的状况,当失败的调用到一定阈值,缺省是5秒内调用20次,如果失败,就会启动熔断机制。
  • 服务降级,一般是从整体负荷考虑。就是当某个服务熔断之后,服务器将不再被调用,此时客户端可以自己准备一个本地的fallback回调,返回一个缺省值。这样做,虽然会出现局部的错误,但可以避免因为一个服务挂机,而影响到整个架构的稳定性。

Hystrix相关注解:

  • @EnableHystrix:开启熔断
  • @HystrixCommand(fallbackMethod=”XXX”):声明一个失败回滚处理函数XXX,当被注解的方法执行超时(默认是1000毫秒),就会执行fallback函数,返回错误提示。

6、项目中zuul常用的功能

  • 提供动态路由
  • 提供安全、鉴权处理
  • 跨域处理
  • 全局动态路由的hystrix(熔断、降级、限流)处理

7、服务网关的作用

  • 简化客户端调用复杂度,统一处理外部请求。
  • 数据裁剪以及聚合,根据不同的接口需求,对数据加工后对外。
  • 多渠道支持,针对不同的客户端提供不同的网关支持。
  • 遗留系统的微服务化改造,可以作为新老系统的中转组件。
  • 统一处理调用过程中的安全、权限问题。

Spring Cloud中的网关有:Zuul和Spring Cloud Gateway,最新版本中推荐使用后者。

8、ribbon和feign区别

  • Ribbon添加maven依赖 spring-starter-ribbon 使用@RibbonClient(value="服务名称") 使用RestTemplate调用远程服务对应的方法。
  • feign添加maven依赖 spring-starter-feign 服务提供方提供对外接口 调用方使用 在接口上使用@FeignClient("指定服务名")

Ribbon和Feign的区别:

Ribbon和Feign都是用于调用其他服务的,不过方式不同。

  1. 启动类使用的注解不同,Ribbon用的是@RibbonClient,Feign用的@EnableFeignClients。
  2. 服务的指定位置不同,Ribbon是在@RibbonClient注解上声明,Feign则是在定义抽象方法的接口中使用@FeignClient声明。
  3. 调用方式不同,Ribbon需要自己构建http请求,模拟http请求然后使用RestTemplate发送给其他服务,步骤相当繁琐。

Feign则是在Ribbon的基础上进行了一次改进,采用接口的方式,将需要调用的其他服务的方法定义成抽象方法即可,

不需要自己构建http请求。不过要注意的是抽象方法的注解、方法签名要和提供服务的方法完全一致。

9、ribbon的负载均衡策略

  1. RoundRobinRule: 轮询策略,Ribbon以轮询的方式选择服务器,这个是默认值。所以示例中所启动的两个服务会被循环访问;
  2. RandomRule: 随机策略,也就是说Ribbon会随机从服务器列表中选择一个进行访问;
  3. BestAvailableRule: 最大可用策略,即先过滤出故障服务器后,选择一个当前并发请求数最小的;
  4. WeightedResponseTimeRule: 带有加权的轮询策略,对各个服务器响应时间进行加权处理,然后在采用轮询的方式来获取相应的服务器;
  5. AvailabilityFilteringRule: 可用过滤策略,先过滤出故障的或并发请求大于阈值的一部分服务实例,然后再以线性轮询的方式从过滤后的实例清单中选出一个;
  6. ZoneAvoidanceRule: 区域感知策略,先使用主过滤条件(区域负载器,选择最优区域)对所有实例过滤并返回过滤后的实例清单,依次使用次过滤条件列表中的过滤条件对主过滤条件的结果进行过滤,判断最小过滤数(默认1)和最小过滤百分比(默认0),最后对满足条件的服务器则使用RoundRobinRule(轮询方式)选择一个服务器实例。

10、简述什么是CAP,并说明Eureka包含CAP中的哪些?

CAP理论:一个分布式系统不可能同时满足C (一致性),A(可用性),P(分区容错性).由于分区容错性P在分布式系统中是必须要保证的,因此我们只能从A和C中进行权衡.

Eureka 遵守 AP

  • Eureka各个节点都是平等的,几个节点挂掉不会影响正常节点的工作,神域的节点依然可以提供注册和查询服务。
  • 而Eureka的客户端在向某个Eureka 注册或查询是如果发现连接失败,则会自动切换至其他节点,只要有一台Eureka还在,就能保证注册服务可用(保证可用性),只不过查的信息可能不最新的不保证强一致性)。

11、Eureka和zookeeper都可以提供服务注册与发现的功能,请说说两个的区别?

  • Zookeeper保证了CP(C:一致性,P:分区容错性)
  • Eureka保证了AP(A:高可用)
  1. 当向注册中心查询服务列表时,我们可以容忍注册中心返回的是几分钟以前的信息,但不能容忍直接down掉不可用。也就是说,服务注册功能对高可用性要求比较高,但zk会出现这样一种情况,当master节点因为网络故障与其他节点失去联系时,剩余节点会重新选leader。问题在于,选取leader时间过长,30 ~ 120s,且选取期间zk集群都不可用,这样就会导致选取期间注册服务瘫痪。在云部署的环境下,因网络问题使得zk集群失去master节点是较大概率会发生的事,虽然服务能够恢复,但是漫长的选取时间导致的注册长期不可用是不能容忍的。
  2. Eureka保证了可用性,Eureka各个节点是平等的,几个节点挂掉不会影响正常节点的工作,剩余的节点仍然可以提供注册和查询服务。而Eureka的客户端向某个Eureka注册或发现时发生连接失败,则会自动切换到其他节点,只要有一台Eureka还在,就能保证注册服务可用,只是查到的信息可能不是最新的。除此之外,Eureka还有自我保护机制,如果在15分钟内超过85%的节点没有正常的心跳,那么Eureka就认为客户端与注册中心发生了网络故障,此时会出现以下几种情况:
  • Eureka不在从注册列表中移除因为长时间没有收到心跳而应该过期的服务。
  • Eureka仍然能够接受新服务的注册和查询请求,但是不会被同步到其他节点上(即保证当前节点仍然可用)。
  • 当网络稳定时,当前实例新的注册信息会被同步到其他节点。

因此,Eureka可以很好的应对因网络故障导致部分节点失去联系的情况,而不会像Zookeeper那样使整个微服务瘫痪。

12、链路跟踪Sleuth

当我们项目中引入Spring Cloud Sleuth后,每次链路请求都会添加一串追踪信息,格式是[server-name, main-traceId,sub-spanId,boolean]:

  • server-name:服务结点名称。
  • main-traceId:一条链路唯一的ID,为TraceID。
  • sub-spanId:链路中每一环的ID,为SpanID。
  • boolean:是否将信息输出到Zipkin等服务收集和展示。

Sleuth的实现是基于HTTP的,为了在数据的收集过程中不能影响到正常业务,Sleuth会在每个请求的Header上添加跟踪需求的重要信息。这样在数据收集时,只需要将Header上的相关信息发送给对应的图像工具即可,图像工具根据上传的数据,按照Span对应的逻辑进行分析、展示。

SpringCloud面试题分享相关推荐

  1. 冲击双十一,我是怎么拿下蚂蚁金服的offer的,Java面试题分享

    本文转载自:冲击双十一,我是怎么拿下蚂蚁金服的offer的,Java面试题分享 一.JVM面试题 1. 说说你对JVM内存模型的了解,每个区的作用是什么? 栈区: 栈分为java虚拟机栈和本地方法栈 ...

  2. springcloud是什么_阿里P8道出,入职阿里必会199道SpringCloud面试题,你能掌握多少?...

    前言 Spring Cloud 自 2016 年 1 月发布第一个 Angel.SR5 版本,到目前 2020 年 3 月发布 Hoxton.SR3 版本,已经历经了 4 年时间.这 4 年时间里,S ...

  3. Python培训之就业面试题分享

    近几年,学习Python编程的人越来越多,大家对于Python编程技术非常感兴趣,想要转型到这个行业,下面小编为大家整理一份Python找工作的面试题分享,希望能够帮助正在找Python工作的小伙们. ...

  4. python开发工程师面试题-2019超实用Python开发工程师面试题分享

    原标题:2019超实用Python开发工程师面试题分享 Python诞生很早,但真正火爆时间并不长.目前Python语言的应用领域非常广泛,主要有系统编程.图形处理.数学处理.文本处理.数据库编程.网 ...

  5. java只会用不知道原理6_程序员面试宝典之14道初级Java面试题分享

    程序员面试宝典之14道初级Java面试题分享 程序员面试宝典之14道初级Java面试题分享! 关于赢在面试的Java题系列基本收集整理完成了,所有题目都是经过精心挑选的,很基础又考验求职者的基本功,应 ...

  6. Python面试题分享,不要错过哟!

    近几年,学习Python编程的人越来越多,大家对于Python编程技术非常感兴趣,想要转型到这个行业,下面小千为大家整理一份Python找工作的面试题分享,希望能够帮助正在找Python工作的小伙们. ...

  7. 2017年秋招二十套前端面试题分享

    前端面试--四月二十家前端面试题分享 1.正文 第一套 第二套 第三套 第四套 第五套 第六套 第七套 第八套 第九套 第十套 第十一套 第十二套 第十三套 第十四套 第十五套 第十六套 第十七套 第 ...

  8. 神州数码笔试题C语言,神州数码程序类笔试题分享

    神州程序类笔试题分享: 神州数码笔试1)description of the students table: sid_id number start_date date end_date date w ...

  9. 优秀简历模板和面试题分享

    优秀简历模板和面试题分享 简历模板下载地址:提取码5555 面试八股文 下载地址:提取码5555

最新文章

  1. 列表ListView和列表选择框的使用编写步骤
  2. 【今日CV 计算机视觉论文速览 第148期】Mon, 29 Jul 2019
  3. 【kafka】kafka 指定分区消费 不会触发 reblance
  4. js获取今天剩余时间_js动画,setTimeout/setInterval的不准确
  5. python自动化办公都能做什么-用python进行办公自动化都需要学习什么知识呢?
  6. DevExpress XtraTreeList的复选框 禁用
  7. C语言计算机题库第91套,二级c语言上机题库 2013年9月全国计算机等级考试二级C语言上机题库100套.doc...
  8. iis php环境安装包下载,php5 环境集成安装包 for IIS6
  9. Matlab对圆环进行N等分
  10. 利用charles抓包
  11. mysql update无效_Mysql update记录无效如何解决
  12. SSR、SSE、SST、判定系数(可决系数、拟合优度)的计算公式
  13. OCJP 1Z0-808考题解析 题31--60
  14. build.sh脚本
  15. 应当重视监控系统维保业务的生态建设
  16. P7826 「RdOI R3」RBT
  17. JDK 8 新特性之接口详解
  18. 伦茨科技小知识-蓝牙的通信原理和协议
  19. 各种免费的API,手工整理,免费API
  20. (C语言篇)static关键字

热门文章

  1. python3 上传文件到目标机器_Python3 +服务器搭建私人云盘,再也不怕限速了
  2. 国防科技大学计算机学院教员,我国最好的四所科技大学,第一名排名世界前列,还有一所是铁饭碗...
  3. android系统语音合成,android 语音合成报错
  4. map集合的putall_Map.put和Map.putAll方法之间的区别?
  5. mysql 多个密码登录_mysql 多实例登录密码测试
  6. TIM怎么显示每条信息的时间
  7. RTSP播放器开发填坑之道
  8. springboot使用jxls导出excel___(万能通用模板)--- SpringBoot导入、导出Excel文件___SpringBoot整合EasyExcel模板导出Excel
  9. springboot+shiro:ShiroConfiguration配置
  10. JAVA 判断Socket 远程端是否断开连接