SpringCloud常见⾯试题
SpringCloud常见⾯试题
⼀、系统架构的演变
单机版
把我们的所有的模块都放置⼀个项⽬上,最后将项⽬打包成war包或者jar包部署到你的服务器上;
优点:1、⽅便开发;2、部署简单
缺点:1、代码耦合,开发维护困哪;2、并发性差、容错率⾼;3、⽆法针对对不同的模块进⾏优化
分布式
不同的业务在不同的模块上,然后发布在不同的服务器上,物理上的分离,逻辑上的集中
优点:1、降低了代码的耦合度;2、相⽐提⾼了项⽬的并发、容错率;3、(相⽐微服务关系错综复杂)
缺点:1、⽐较难开发;2、部署较难
springcloud难学吗
SOA:⾯向服务
微服务:SpringCloud Dubbo 两套解决⽅案
⼆、微服务
是什么?
将传统的⼀站式的引⽤,根据业务的不同 拆分成⼀个⼀个的服务,去降低耦合度;
每⼀个微服务提供单个业务功能的服务,⼀个服务做⼀件事。
从技术的⾓度看就是⼀种⼩⽽独⽴的处理过程,类似进程概念,能够⾃⾏单独启动或销毁。
可以拥有独⽴的数据库;
根据业务的不同:拆分成怎么样,仁者见仁智者见智了;微服务是⼀种架构风格;
特点
单⼀职责;微;
⾯向服务:每个服务都要对象暴露Rest风格服务接⼝API,不在乎⾥⾯的实现技术
⾃治:团队独⽴、技术独⽴、前后端分离、数据库分离、部署独⽴。
三、Dubbo与SpringCloud的区别?
本质区别
dubbo是基于RPC(远程过程调⽤)
SringCloud是基础Http协议(超⽂本传输协议)
RPC和Http的区别
RPC:基于原⽣的TCP协议,⼯作于会话层,传输效率⾼;⾃定义数据格式;限定统⼀技术
HTTP:传输协议,也是基于TCP,⼯作于应⽤层,传输效率较低;统⼀的数据格式;不限制技术,只需要提供rest风格接⼝;消息封装臃肿
如果你的公司是使⽤java技术栈,可以使⽤Dubbo
但是如果使⽤技术栈的多样化或者青睐于Spring,使⽤SpringCloud
四、Spring、Spring FrameWork、SpringBoot和SpringCloud是什么?
Spring
Spring是⼀个⽣态体系(技术体系),是集⼤成者,包括了SpringFrame,SpringBoot、SpringCloud、Spring Data、
SpringSecurity 等等
Spring Frame
是整个Spring的基⽯,是⼀个⼀站式的轻量级的Java开发框架,核⼼是控制反转(IOC)和⾯向切⾯(AOP),针对开发WEB层的SpringMVC,业务层的AOP,持久层的JDBCTemplate等配置解决⽅案。
SpringBoot
SpringBoot是⼀个快速整合第三⽅框架的框架;有着简化配置、⾃动配置、独⽴运⾏和应⽤监控等优点
SpringCloud
SpringCloud则是微服务架构的⼀套解决⽅案;关注的是宏观,将SpringBoot开发的⼀个个单体的服务整合并管理起来,它为各个服务提供了注册中⼼进⾏服务发现,配置管理,负载均衡,断电器路由,微代理
由很多组件组成:
Eureka:注册中⼼;服务的注册与发现;
Zuul:⽹关组件;路由的请求分发、过滤器(Ribbon. hystrix)
Ribbon:负载均衡组件
Hystrix:熔断组件
Fegin:远程调⽤组件
五、Eureka(注册中⼼)
服务注册中⼼(可以是⼀个集),对外暴露⾃⼰的地址
提供⽅:使⽤eureka的客户端,启动向eureka注册⾃⼰的信息(地址、提供什么服务)
消费者:向eureka订阅服务,Eureka会将对应的服务提供者的地址列表发送给消费者,并且定期拉取服务进⾏更新
⼼跳(续约):提供⽅会定期的通过http⽅式向eureka刷新⾃⼰的状态
使⽤application.name即可访问服务器,其中还可做负载均衡、熔断;
使⽤步骤
注册中⼼:item-eureka
客户端:itcast-service-provider itcast-service-consumer
1、引⼊启动类
2、覆盖默认配置 spring.application.name 注册到eureka
eureka.client.service-url.defaultZone=localhost:10086/eureka
在服务提供⽅中,设置⼼跳时间
eureka:
instance:
lease-renewal-interval-in-seconds: 5 # ⼼跳时间
lease-expiration-duration-in-seconds: 15 # 过期时间
在服务消费者,设置拉取服务间隔时间
eureka. client:
registry-fetch-interval-seconds: 5
3、启动类添加注解@EnableDiscoveryClient
六、Ribbon(负载均衡)
1、eureka已经集成了
2、⽆需覆盖默认配置
3、在RestTemplate 这个组件上添加注解 @LoadBalanced
使⽤的负载均衡策略
1、默认使⽤的是:轮循
2、可以使⽤ 随机
s ervice-provider.ribbon:
NFLoadBalancerRuleClassName: comflix.loadbalancer.RandomRule
七、Hystrix(熔断)
Hystrix是⼀个处理分布式系统的 延迟和容错开源库;在分布式系统⾥,许多依赖不可避免的会调⽤失败,你如超时、异常
等,hystrix组件能够保证⼀个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提⾼分布式系统的弹性
对⽐
之前:请求阻塞,⼀直阻塞会导致其他的服务器等不到响应,可能会级联故障,导致整个系统雪崩;
现在:⽤户的请求将不⽤直接访问服务,⽽是通过线程池中空闲的线程来访问服务,如果线程池已满,或者请求超时,则会进⾏服务降级;(⽐如向调⽤⽅返回⼀个响应;向调⽤⽅返回⼀个符合预期的、可处理的备选响应[FallBack],⽽不是长时间的等待或者抛出调⽤⽅⽆法处理的异常)
服务降级:优先保护核⼼服务,⽽⾮核⼼服务不可⽤或弱可⽤
触发服务降级的条件
线程池已满;
请求超时
服务熔断:(断路器) 有三个状态
Close:关闭状态,所有的请求都能正常的访问
Open:打开状态,所有的请求都会被降级。Hystrix会对请求情况进⾏计数,当⼀定时间内请求次数达到20次以上并且失败次数的阈值达到了50%,则触发熔断,断路器会被打开;所有的请求都不能正常的访问;
Half-Open:半打开状态;Open的状态不是永远的,当休眠5秒后会⾃动进去半打开状态;会释放部分请求通过,如果这些请求是成功的,那么就是完全关闭断路器;如果不成功,那么继续进⾏休眠5秒,重复流程;
⼋、Feign(远程调⽤)
Feign(伪装):可以把Rest请求进⾏隐藏,伪装成SpringMVC的Controller⼀样,你不⽤在⾃⼰拼url和参数等,⼀切交给feign就可以
Feign也集成了Ribbon负载均衡(默认配置)和Hystix服务熔断(需要配置);
使⽤流程
1、引⼊openFeign启动器
2、配置 able = true ,开启我们的hystrix断路器;
3、配置启动类,@EnableFeignClients
4、创建⼀个接⼝,添加注解@FeignClient(value,class=断路器的class)
5、在接⼝中定义⼀些⽅法,这些⽅法的书写跟SpringMVC的controller类似,使⽤的都是SpringMVC的注解
6、创建⼀个熔断类,实现feign接⼝,实现对应的⽅法,才能实现Feign进⾏熔断
九、Zuul(服务⽹关)
不论是来⾃客户端(PC端或移动端)的请求,还是服务内部调⽤,⼀切对服务的请求都必须经过Zuul服务⽹关组件,然后再由⽹关来实现动态路由、授权等等操作;Zuul就是我们服务的统⼀⼊门
Zuul 如果需要负载均衡 可以⽤nginx进⾏做负载均衡和反向代理
使⽤流程(路由)
1、引⼊Zuul启动器
2、配置有4种⽅式
1、utes.<;路由名称>.path=/service-provider/**
2、utes.<;路由名称>.path=/service-provider/**
3、utes.服务名 /随意item/**
4、不⽤配置,默认是服务id为开头,如provider就是 /provider/**
3. 在启动类(引导类)@EnableZuulProxy
过滤器
创建⼀个类继承ZuulFilter⽗类(基类)
重写其四个⽅法
1、FilterType : Pre Route Post Error
2、FilterOrder:返回值越⼩执⾏的优先级越⾼
3、shouldFilter:是否执⾏run⽅法,true为执⾏
4、run 具体的拦截逻辑
Nginx
可做服务器也可做⽹关
反向代理;负载均衡;动态路由;请求过滤
⼗、分布式微服务架构
⼗⼀、Eureka 和 Zookeeper 两个区别
CAP是什么?
C:强⼀致性
A:可⽤性
P:分区容错性
分布式理论CAP
⼀个分布性系统不可能同时满⾜CAP;由于分区容错性P是分布式中必须要保证的;所以我们只能在A和C中进⾏权衡。Zookeeper遵循CP
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论