SpringcloudAlibaba⾯试题
⽂章⽬录
1.微服务个⼈理解
微服务架构是⼀种架构模式或者说是⼀种架构风格,它提倡将单⼀应⽤程序划分为⼀组⼩的服务,每个服务运⾏在其独⽴的⾃⼰的进程中,服务之间相互协调、互相配合,为⽤户提供最终价值。服务之间采⽤轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API),每个服务都围绕着具体的业务进⾏构建,并且能够被独⽴的构建在⽣产环境、类⽣产环境等。另外,应避免统⼀的、集中式的服务管理机制,对具体的⼀个服务⽽⾔,应根据业务上下⽂,选择合适的语⾔、⼯具对其进⾏构建,可以有⼀个⾮常轻量级的集中式管理来协调这些服务,可以使⽤不同的语⾔来编写服务,也可以使⽤不同的数据存储。
2.什么是Spring Cloud&&Alibaba?
Spring Cloud是Spring开源组织下的⼀个⼦项⽬,提供了⼀系列⽤于实现分布式微服务系统的⼯具集,帮助开发者快速构建微服务应⽤。Spring Cloud Alibaba是Spring Cloud的⼦项⽬;包含微服务开发必备组件;基于和符合Spring Cloud标准的阿⾥的微服务解决⽅案。
3.服务注册和发现是什么意思?Spring Cloud如何实现?
当我们开始⼀个项⽬时,我们通常在属性⽂件中进⾏所有的配置。随着越来越多的服务开发和部署,添加和修改这些属性变得更加复杂。有些服务可能会下降,⽽某些位置可能会发⽣变化。⼿动更改属性可能会产⽣问题。 Nacos服务注册和发现可以在这种情况下提供帮助。由于所有服务都在Eureka服务器上注册并通过调⽤Nacos服务器完成查,因此⽆需处理服务地点的任何更改和处理。
4.什么是Nacos?
英⽂全称Dynamic Naming and Configuration Service,Na为naming/nameServer即注册中⼼,co为configuration即注册中
⼼,service是指该注册/配置中⼼都是以服务为核⼼。
5.Nacos注册中⼼原理
服务提供者、服务消费者、服务发现组件这三者之间的关系⼤致如下
1、微服务在启动时,将⾃⼰的⽹络地址等信息注册到服务发现组件(nacos server)中,服务发现组件会存储这些信息。
2、各个微服务与服务发现组件使⽤⼀定机制通信(例如在⼀定的时间内发送⼼跳包)。服务发现组件若发现与某微服务实例通信正常则保持注册状态(up在线状态)、若长时间⽆法与某微服务实例通信,就会⾃动注销(即:删除)该实例。
3、服务消费者可从服务发现组件查询服务提供者的⽹络地址,并使⽤该地址调⽤服务提供者的接⼝。
分布式和微服务的关系
4、当微服务⽹络地址发⽣变更(例如实例增减或者IP端⼝发⽣变化等)时,会重新注册到服务发现组件。
6.Nacos注册中⼼使⽤【Nacos-Client客户端】
(1)pom⽂件加依赖:alibaba-nacos-discovery
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
(2)启动类加注解
//Nacos服务端【早期版本需要加注解,现在0.0.9版本后已不是必须的】
@EnableDiscoveryClient
(3)在对应的微服务的yml配置⽂件【服务名称和nacos server 地址】
spring:
cloud:
nacos:
discovery:
#指定nacos server的地址,不需要写http
server-addr: localhost:8848
7.Nacos配置中⼼使⽤【Nacos-Server服务端】
1)加依赖–alibaba-nacos-config
<!--nacos-config nacos管理配置的依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2)加配置,新增l⽂件配置,配置属性如下
spring:
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848 #这⾥的server-addr⽤作配置管理
file-extension: yaml
application:
name: user-server
profiles:# profiles区分多环境配置
active: dev #切换配置⽂件,如dev、test、pro等环境
3)配置中⼼包含:配置管理、服务管理(微服务管理)、命名空间、集管理
4)通过配置更改动态刷新参数–@RefreshScope注解
普通application参数在配置中⼼直接配置皆可,如果需要可以动态刷新的配置,需要在相应类上加上@RefreshScope注解,⽰例如下,当在nacos配置中⼼更改配置后,⽅法getId的值也会刷新。
@RefreshScope
public class IdEntity {
@Value("${id}")
private int id;
public int getId(){
return this.id;
}
8.Feign介绍
Feign是Netfilx开源的声明式HTTP客户端,Feign是⼀个http请求调⽤的轻量级框架,可以以Java接⼝注解的⽅式调⽤Http请求。Spring Cloud引⼊ Feign并且集成了Ribbon实现客户端负载均衡调⽤。
9.Feign调⽤原理
Feign远程调⽤,核⼼就是通过⼀系列的封装和处理,将以JAVA注解的⽅式定义的远程调⽤API接⼝,最终转换成HTTP的请求形式,然后将HTTP的请求的响应结果,解码成JAVA Bean,放回给调⽤者。
基于重试器发送HTTP请求:Feign 内置了⼀个重试器,当HTTP请求出现IO异常时,Feign会有⼀个最⼤尝试次数发送请求。
10.Feign调⽤原理
(1)加依赖–openfeign
<!--feign依赖、服务通信-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
(2)启动类加注解
@EnableFeignClients//feign注解
(3)请求接⼝的类加FeignClient注解:
@FeignClient(value="article-server")
11.Feign使⽤中遇到的相关问题
(1)使⽤feign客户端调⽤其他微服务时,发送POST请求时,对象信息没有传递成功。关键在于加上注解:@RequestBody
(2)使⽤feign客户端调⽤其他微服务时,报错超时:e=feign.RetryableException: Read timed out executing POST
ribbon.ReadTimeout=60000
ribbon.ConnectTimeout=60000
12.什么是服务熔断?什么是服务降级?
熔断机制是应对雪崩效应的⼀种微服务链路保护机制。当某个微服务不可⽤或者响应时间太长时,会进⾏服务降级,进⽽熔断该节点微服务的调⽤,快速返回“错误”的响应信息。当检测到该节点微服务调⽤响应正常后恢复调⽤链路。在SpringCloud框架⾥熔断机制通过Hystrix实现,Hystrix会监控微服务间调⽤的状况,当失败的调⽤到⼀定阈值,缺省是5秒内调⽤20次,如果失败,就会启动熔断机制。
服务降级,⼀般是从整体负荷考虑。就是当某个服务熔断之后,服务器将不再被调⽤,此时客户端可以⾃⼰准备⼀个本地的fallback回调,返回⼀个缺省值。这样做,虽然⽔平下降,但好⽍可⽤,⽐直接挂掉强。
13.什么是服务雪崩效应?
雪崩效应是在⼤型互联⽹项⽬中,当某个服务发⽣宕机时,调⽤这个服务的其他服务也会发⽣宕机,⼤型项⽬的微服务之间的调⽤是互通的,这样就会将服务的不可⽤逐步扩⼤到各个其他服务中,从⽽使整个项⽬的服务宕机崩溃。
14.@LoadBalanced注解的作⽤
开启客户端负载均衡。
15. Nginx与Ribbon的区别
Nginx是反向代理同时可以实现负载均衡,nginx拦截客户端请求采⽤负载均衡策略根据upstream配置进⾏转发,相当于请求通过nginx服务器进⾏转发。Ribbon是客户端负载均衡,从注册中⼼读取⽬标服务器信息,然后客户端采⽤轮询策略对服务直接访问,全程在客户端操作。
16.Ribbon底层实现原理
Ribbon使⽤discoveryClient从注册中⼼读取⽬标服务信息,对同⼀接⼝请求进⾏计数,使⽤%取余算法获取⽬标服务集索引,返回获取到的⽬标服务信息。
17.Ribbon负载均衡算法
IRule是以下七种负载均衡算法的⽗接⼝
说明:
RoundRobinRule: 默认轮询的⽅式
RandomRule: 随机⽅式
WeightedResponseTimeRule: 根据响应时间来分配权重的⽅式,响应的越快,分配的值越⼤。
BestAvailableRule: 选择并发量最⼩的⽅式
RetryRule: 在⼀个配置时间段内当选择server不成功,则⼀直尝试使⽤subRule的⽅式选择⼀个可⽤的server
ZoneAvoidanceRule: 根据性能和可⽤性来选择。
AvailabilityFilteringRule: 过滤掉那些因为⼀直连接失败的被标记为circuit tripped的后端server,并过滤掉那些⾼并发的的后端server(active connections 超过配置的阈值)
18.分布式事务产⽣的背景?
在传统的单体项⽬中,多个不同的业务逻辑使⽤的都是同⼀个数据源,使⽤的都是同⼀个事务管理器,所以不会存在事务问题。
在分布式或者微服务架构中,每个服务都有⾃⼰的数据源,使⽤不同事务管理器,如果A服务去调⽤B服务,B服务执⾏失败了,A服务的事务和B服务的事务都会回滚,这时候是不存在事务问题的,但是如果A服务B服务执⾏成功之后出现异常,A服务的事务会回滚,但是B服务的事务不会回滚,此时就存在分布式事务问题。
19.seata是什么
Seata是阿⾥巴巴退出的⼀款⽤来解决分布式事务问题的框架,他经过天猫双⼗⼀的考验,很有可能成为解决分布式事务问题的主流框架

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。