SpringCloud面试题

什么是SpringCloud

SpringCloud是一系列框架的有序集合。他利用SpringBoot的开发便利行巧妙地简化了分布式系统基础设施的开发,如注册中心、配置中心、只能路由、消息总线、负载均衡、熔断器、数据监控等,都可以使用SpringBoot的开发风格做到一键启动和部署。SpringCloud没有重复制造轮子,只是将各个公司比较成熟,经得起实际考验的服务框架组合起来,通过SpringBoot风格进行封装,屏蔽掉了复杂的配置和实现原理。

优点

1.出自于Spring家族,可以保证后续的更新、完善
2.组件丰富,功能齐全
3.社区活跃度高,教程丰富,遇到问题能够很容易的找到解决方案
4.服务拆分粒度更细,耦合度低,有利于资源重复利用,提高开发效率
5.可以更精准的指定优化服务方案,提高系统的可维护性
6.减轻团队的成本,可以并行开发,不用关注其他人怎么开发,先关注自己的开发
7.微服务可以跨平台
8.适用于物联网时代,产品迭代周期更短

缺点

1.微服务过多,治理成本高,不利于维护
2.分布式系统开发的成本高(容错、分布式事务)对团队挑战大。

SpringCloud的五大组件

服务发现Eureka

Eureka就好比滴滴、负责管理、记录服务提供者信息。服务调用者无需自己寻找服务,而是把自己的需求告诉Eureka,然后Eureka会把符合你需求的服务告诉你,同时服务提供方与Eureka之间通过“心跳”机制进行监控,当某个服务提供方出现问题,Eureka子让会把它从列表中剔除
这样就实现了自动注册、发现、状态监控。

负载均衡Feign

Feign可以把Rest的请求进行隐藏,伪装成类似SpringMVC的Controller一样。你不用再自己拼接url,拼接参数等等操作,一切都交给Feign去做。
在这里插入图片描述

网关Zuul

服务网关是微服务架构中一个不可或缺的部分。通过服务网关统一向外系统提供REST API的过程中,除了具备服务路由、均衡负载功能之外,它还具备了权限控制等功能。Spring Cloud Netflix中的Zuul就担任了这样的一个角色,为微服务架构提供了前门保护的作用,同时将权限控制这些较重的非业务逻辑内容迁移到服务路由层面,使得服务集群主体能够具备更高的可复用性和可测试性。
在这里插入图片描述
加入zuul后的架构
在这里插入图片描述
不管是来自于客户端(PC或移动端)的请求,还是服务内部调用。一切对服务的请求都会经过Zuul这个网关,然后再由网关来实现 鉴权、动态路由等等操作。Zuul就是我们服务的统一入口。

配置中心Config

SpringCloud Config提供服务器端和客户端。服务器存储后端的默认实现使用git,因此它轻松支持标签版本的配置环境,以及可以访问用于管理内容的各种工具。

是静态的,得配合Spring Cloud Bus实现动态的配置更新。

熔断器Hystrix

Hystrix是一个延迟和容错库,用于隔离访问远程服务、第三方库、防止出现级联失败、控制服务从而对延迟和故障提供更强大的容错能力,避免整个系统被拖垮。
复杂分布式架构通常都具有很多依赖,当一个应用高度耦合其他服务时非常危险且容易失败,这种失败很容易伤害服务的调用者,最后导致一个接一个的连续失误,应用本身就处于在被拖垮的风险中,最后失去控制,就像在一个高流量的网站中,某个单一的后端一旦发生延迟,将会在数秒内导致所有应用资源被耗尽,如何处理这些问题时有关系统性能和效率的关键性问题。
Hystrix使用自己的线程池,这样和主应用服务器线程池隔离,如果调用花费很长时间,会停止调用,不同的命令或命令组能够被配置使用他们各自的线程池,可以隔离不同的服务

熔断器工作机制:

在分布式系统中应用这一模式后,服务调用方可以自己进行判断某些服务器反应慢或者存在大量超时的情况时,能够主动熔断,防止整个系统被拖垮。
Hystrix可以实现弹性容错,当情况好装之后,可以自动重连。通过断路的方式,可以将后续的请求直接拒绝掉,一段时间之后允许部分请求通过,如果调用成功则回到原状态,否则继续断开。
当有服务出现异常时,直接进行失败回滚,服务降级处理。
当服务繁忙时,如果服务出现异常,不是粗暴的直接报错,而是返回一个友好的提示,虽然拒绝了用户的访问,但是会返回一个结果。

五大组件关系图

在这里插入图片描述