1.1. 【1】Spring Boot中的监视器

Spring Boot actuator

GET ip:port/actuator/health 报告应用程序的健康指标

GET ip:port/actuator/beans 描述应用程序上下文里全部的Bean

GET ip:port/actuator/env 获取全部环境属性

GET ip:port/configprops 描述配置属性(包含默认值)如何注入Bean

GET ip:port/env/{name} 根据名称获取特定的环境属性值

GET ip:port/info 获取应用程序的定制信息,这些信息由info打头的属性提供

GET ip:port/mappings 描述全部的URI路径,以及它们和控制器(包含Actuator端点)的映射关系

GET ip:port/metrics 报告各种应用程序度量信息,比如内存用量和HTTP请求计数

GET ip:port/metrics/{name} 报告指定名称的应用程序度量值

POST ip:port/shutdown 关闭应用程序,要求endpoints.shutdown.enabled设置为true

GET ip:port/trace 提供基本的HTTP请求跟踪信息(时间戳、HTTP头等)

1.2. 【2】什么是微服务

以前的模式是 所有的代码在同一个工程中 部署在同一个服务器中 同一个项目的不同模块不同功能互相抢占资源 ,微服务 将工程根据不同的业务规则拆分成不同的服务 服务部署在不同的机器上 服务之间通过远程相互调用

优点:

1、每个服务直接足够内聚,代码容易理解 2、开发效率高,一个服务只做一件事 3、易于第三方集成 4、解耦、易扩展

缺点:

1、开发人员要处理分布式系统的复杂性 2、多服务运维难度,随着服务的增加,运维的压力也在增大 3、服务间通讯成本 4、数据一致性 5、分布式链路跟踪问题

6、微服务框架代码侵入业务代码太强

1.3. 【3】什么是spring cloud

简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、服务调用等组件,Spring Cloud是基于Spring Boot来开发的,目前国内主流的是Spring Cloud Netflix,还有最近由阿里新起的Spring Cloud Alibaba等,我们面试也是以Spring Cloud Netflix为主

1.4. 【4】Spring Cloud Netflix有哪些组件

eureka (提供服务注册与发现功能) ribbon(提供负载均衡功能) Feign(内部整合了ribbon和Hystrix,具有负载均衡和熔断限流等功能) Hystrix (提供了熔断限流等功能) Zuul (提供了智能路由的功能) spring cloud config (提供了统一配置的功能)

1.5. 【5】SpringCloud如何服务注册发现

服务注册:服务在发布时会把将服务信息(IP地址和端口等) 注册到注册中心

服务发现: 只需要在main方法添加@EnableDiscoveryClient就可以了 默认会跟Ribbon组合使用

1.6. 【6】Ribbon和Feign的区别

Ribbon和Feign都是用于调用其他服务的,不过方式不同。 1.启动类使用的注解不同,Ribbon用的是@RibbonClient,Feign用的是@EnableFeignClients。 2.服务的指定位置不同,Ribbon是在@RibbonClient注解声明启动类上,Feign则是在定义方法的接口中使用 3.调用方式不同,Ribbon使用RestTemplate发送给其他服务, Feign则是在Ribbon的基础上进行了一次改进,采用接口的方式,将需要调用的其他服务的方法定义成方法即可,不过要注意的是方法的注解、方法参数要和提供服务的方法完全一致。

@EnableFeignClients(clients = UserService.class)
@RibbonClient(value="user-server")

1.7. 【7】springcloud断路器的作用

当一个服务调用另一个服务由于网络原因或者自身原因出现问题时 ,调用者就会等待被调用者的响应, 当更多的服务请求到这些资源时,导致更多的请求等待 这样就会发生连锁效应(雪崩效应) 断路器就是解决这一问题

1.8. 【8】spring cloud 和dubbo区别

1、服务调用方式: dubbo是RPC ,springcloud是 Rest Api 2、dubbo注册中心是zookeeper springcloud默认是eureka,也可以是zookeeper、Consul 3、springcloud服务组件更加丰富 比如:网关、断路器等等

1.9. 【9】REST 和RPC对比

比较项 REST RPC
通信协议 HTTP 比如dubbo默认用的是dubbo协议
性能
灵活度

1.10. 【10】负载均衡是什么

负载均衡适用于分布式环境中,主要优化资源使用,最大吞吐量,避免任何单一资源的过载

1.11. 【11】微服务之间是如何独立通讯的

1.远程调用,比如feign调用,RPC调用 2.消息中间件

1.12. 【12】什么是CAP理论

C——数据一致性,A——服务可用性,P——服务对网络分区故障的容错性

1.13. 【13】Eureka和Zookeeper区别

1、Eureka取CAP的AP,注重可用性,Zookeeper取CAP的CP注重一致性。 2、Zookeeper在选举期间注册服务瘫痪,虽然服务最终会恢复,但选举期间不可用。 3、eureka的自我保护机制,会导致一个结果就是不会再从注册列表移除因长时间没收到心跳而过期的服务 4、Zookeeper有Leader和Follower角色、observer角色,Eureka各个节点平等。

1.14. 【14】eureka自我保护机制是什么

当Eureka Server 节点在短时间内丢失了过多实例的连接时(比如网络故障或频繁启动关闭客户端)节点会进入自我保护模式,保护期间所有服务不会被删除,故障恢复时,自动退出自我保护模式。

1.15. 【15】为什么要使用服务保障

例如此时数据库压力太大速度很慢,此时还有不断的请求访问后台,就会造成数据库崩溃

1.16. 【16】什么是服务熔断/什么是服务降级

服务熔断:比如100个请求,有90个是异常请求,那么剩下10请求直接熔断,触发降级 服务降级:让其他请求快速结束,返回fallback的默认值

1.17. 【17】Hystrix隔离策略

线程池隔离 和 信号量隔离

默认情况下,Hystrix 使用线程池模式

线程池 信号量
开销 排队、调度、上下文切换开销 无线程切换,开销低
异步 支持 不支持
并发支持 支持(最大线程池大小) 支持(最大信号量上限)

1.18. 【18】Hystrix缓存机制

在执行HystrixCommand命令的时候会判断commandKey存不存在,如果存在的话就认为是同一个请求结果直接返回,不存在的话才走整个请求流程

1.19. 【19】什么是Ribbon

ribbon是一个负载均衡客户端,feign/eureka默认集成了ribbon

1.20. 【20】Ribbon有哪些负载均衡算法

1、RoundRobinRule(轮询算法)

2、RandomRule(随机算法)

3、AvailabilityFilteringRule():会先过滤由于多次访问故障而处于断路器跳闸状态的服务,还有并发的连接数量

过阈值的服务,然后对剩余的服务列表按照轮询策略进行访问

4、BestAviableRule():会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务

5、WeightedResponseTimeRule():根据平均响应的时间计算所有服务的权重,响应时间越快服务权重越大被选中的概率越高

6、ZoneAvoidanceRule():默认规则,符合判断server所在区域的性能和server的可用性选择服务器

1.21. 【21】Ribbon缓存机制

ribbon自身也是有30s缓存的,所以ribbon会每30s向Eureka客户端那里索要服务信息

好处:

减少了对注册中心的压力

缺点:

这样就更加剧了整个系统对服务上下线感知的延迟

1.22. 【22】Ribbon重试机制

ribbon实现了负载均衡,如果访问某服务的A节点超时后,会触发ribbon的重试机制

如何配置:

## 全局
ribbon:
    ReadTimeout: 6000
    ConnectTimeout: 6000
    MaxAutoRetries: 1
    MaxAutoRetriesNextServer: 2
## 局部
service-id:
    ribbon:
        ReadTimeout: 6000
        ConnectTimeout: 6000
        MaxAutoRetries: 1
        MaxAutoRetriesNextServer: 2

ribbon.MaxAutoRetries 设置为1,请求某服务6s超时后准备重试,该重试策略会先尝试再访问该实例,如果失败1次之后才更换实例访问。 ribbon.MaxAutoRetriesNextServer 决定了尝试更换2次实例。

1.23. 【23】什么是feigin?它的优点是什么

1.feign采用的是基于接口的注解 2.feign整合了ribbon,具有负载均衡的能力 3.整合了Hystrix,具有熔断的能力

怎么使用的: 1.添加pom依赖。 2.启动类添加@EnableFeignClients 3.定义一个接口@FeignClient(name=“xxx”)指定调用哪个服务

feign的重试与ribbon存在冲突,因为feign默认集成Ribbon,所以默认是关闭feign自身的重试机制

1.24. 【24】为什么用SpringCloudConfig

在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件

优点:

1、统一配置的增删改查 2、不同环境配置隔离(开发、测试、线上) 3、高性能、高可用性 4、请求量多、高并发

1.25. 【25】SpringCloudConfig配置仓库是什么

默认使用的是git配置仓库、支持数据库等等

1.26. 【26】为什么要网关服务

1、统一接收一切外界请求,转发到后端的微服务上去

2、服务网关中可以完成一系列的横切功能权限校验、限流、验签等等

1.27. 【27】在Spring cloud中,能够使用的网关服务主要有哪些

Spring Cloud Gateway

Zuul

1.28. 【28】Spring Cloud Gateway原理

1、Spring Cloud Gateway基于Netty异步非阻塞式的API

2、Gateway 工作原理 跟zuul的差不多,但是的 Filter只有 pre 和 post 两种,pre 过滤器逻辑先执行,执行代理请求;代理请求完成后,执行 post 过滤器逻辑。

1.29. 【29】Spring Cloud Gateway跟Zuul的区别

网关组件 基于框架 阻塞模型 容器
Zuul1.x Servlet 多线程阻塞模型 Tomcat
Spring Cloud Gateway Spring 5.+ 响应式的、非阻塞式模型 Netty

如何选择:

看公司业务需求Zuul的性能一般可以满足中小公司的业务,一台zuul的QPS一般可以到300以上

results matching ""

    No results matching ""