SpringCloud面试题
一、什么是SpringCloud?
SpringCloud是一系列框架的集合。它利用了SpringBoot的便携性对分布式的基础组件进行开发,
例如注册中心(Eureka),配置中心(Config),消息总线(Bus),负载均衡(Ribbon),
智能路由/网关(Zuul),熔断器(Hystrix),数据监控(Hystrix Dashboard)等,
都可以使用SpringBoot风格进行开发配置并一键启动和部署。
二、优缺点
1、优点:
- 出身Spring家族,背景强大
- 组件丰富,功能齐全
- 微服务是跨平台的,适用于任何语言
- 服务拆分较细,耦合度低
2、缺点
- 微服务过多,治理成本高
- 分布式系统开发成本高
- 学习成本高
三、整体架构
四、SpringBoot和SpringCloud的关系
SpringBoot专注于单个微服务开发,SpringCloud则是对微服务系统整体进行 管理和协调。
SpringBoot可以离开SpringCloud单独开发,而SpringCloud则 依赖于SpringBoot。
五、使用SpringBoot开发微服务面临的问题
1、分布式系统的复杂性---包括带宽问题、安全问题、延迟问题等
2、服务发现问题---如何注册服务,如何查找并连接已注册服务的问题
3、冗余---分布式系统中的冗余问题
4、负载均衡---如何分配各种资源的合理使用问题
5、性能---如何在各种服务运营时保证性能 6、部署的复杂性问题
六、服务注册和发现是什么?SpingCloud如何实现?
在一个SpringCloud项目中会有多个微服务,每个微服务之间通过API相互调用
,当其中有微服务API发生改变时调用方也需要作出改变,因此需要一个服务用
来保存各个微服务的API信息,当其他服务需要调用时从该服务中查找所需服务
API即可。
在SpringCloud中是通过Eureka实现服务注册与发现。
七、SpringCloud和Dubbo的区别
- Dubbo服务调用方式是RPC,SpringCloud的调用方式是Restful风格的API
- 注册中心:Dubbo是Zookeeper,SpringCloud是Eureka,也可以是Zookeeper
- Dubbo很多服务自己没有实现,通过整合第三方实现功能,SpringCloud有完善的服务体系
八、负载均衡的意义是什么?
负载平衡旨在优化资源使用,最大化吞吐量,最小化响应时间,避免单一资源过载。
九、什么是Hystrix?它是如何实现容错的?
Hystrix是一个延迟和容错库,当出现故障不可避免时,停止级联故障在复杂的
分布式系统中实现弹性。
容错实现方式:在服务提供方使用Hystrix并定义Fallback方法,当正常服务出
现异常时则会执行Fallback方法。Fallback方法应和公开的服务方法返回相同
数据类型。
十、什么是SpringCloud Bus?
Bus通常和Config一起使用,当配置文件修改时,用到该配置文件的服务需要
重新刷新获取最新配置信息,如果服务太多则太多繁琐。因此可已通过Bus将各
个服务之间连接起来,可以用于广播配置文件的更改和服务的监控和管理。
十一、什么是SpringCloud Feign?
Feign是Spring Cloud组件中一个轻量级RESTful的HTTP服务客户端,Feign内置了Ribbon,用来做客户端负载均衡,去调用服务注册中心的服务。
十二、SpringCloud熔断器作用?
当一个服务调用另一个服务时,由于网络或自身原因,调用者就会等待被调用者
响应消息,当更多的服务请求该资源时就会产生更多的请求等待,从而造成雪崩
效应。
熔断器完全打开状态:一段时间内,请求达到一定数量就无法调用,而且多次监测没有恢复迹象,熔断器就会完全打开
熔断器半开状态:短时间内有恢复迹象,熔断器会将部分请求发送给该服务,正常调用时熔断器关闭
熔断器关闭状态:当服务一直处于正常状态,就可以正常调用
十三、什么是SpringCloud Config?
由于分布式系统中配,由于服务数量多,为了方便服务的配置文件统一管理,实时更新,所以需要分布式配置中心服务。
配置文件可以放在本地,也可以放在git仓库。
十四、什么是SpringCloud Gateway?
Spring Cloud Gateway是Spring Cloud官方推出的第二代网关框架,取代
Zuul网关。网关在微服务系统中有着非常重要作用,网关常见的功能
有路由转发、权限校验、限流控制等作用。
使用了一个RouteLocatorBuilder的bean去创建路由,除了创建路由
RouteLocatorBuilder可以让你添加各种predicates和filters,predicates断
言的意思,顾名思义就是根据具体的请求的规则,由具体的route去处理,
filters是各种过滤器,用来对请求做各种判断和修改。