1,spring cloud 是什么?
springcloud是一系列框架的有序集合,它基于springboot的开发将一些成熟的框架做的一键部署,省去了复杂的配置和实现.springcloud的组件有发现注册中心,配置中心,智能路由,熔断器,跨域调用,消息总成,负载均衡等.
2,springcloud的优缺点?
优点:1,降低耦合度,模块容易维护
2,可以并行开发,提高开发效率
3,可以使用不同的开发语言,不同的数据库.
4,配置简单,基本可以使用注解就可以通过组件调用服务通信.
缺点:1,部署比较麻烦,给运维工程师带来一定的麻烦
2,维护比较麻烦,以为每个模块可以有自己的数据库
3,系统测试比较麻烦.
4,性能监控比较麻烦.
3. springboot和springcloud的区别?
springboot是用于快速简单开发单个个体的微服务,springcloud是依赖于springboot 来集成管理治理各个微服务的全局协调的.
4,springcloud由什么组成?
1,nacos 注册发现中心
2,feign 声明式的web客户服务端. 像调用本地方法一样调用远程
3,断路器 防止一个服务导宕机致全体服务跟着雪崩
5,springcloudribbon 客户端负载均衡,有轮询,
springgetways 网关
5,springcloud config 分布式同一配置管理
5,spring cloud 和dubbo区别?
1,dubbo的注册中心是zookeeper springcloud是eureka,也可以使用zookeeper.
2,dubbo的调用时rpc,cloud的是rest api
3,dubbo没有网关等服务.springcloud有断路器和git完美整个的配置中心的同一管理.支持版本控制
6,服务注册和发现是什么意思?spring cloud 如何实现?
随着服务越来越多,相互调用有错综复杂,如何某些服务地址更改,修改代码维护成本高.于是所有服务在springcloudeureka注册和发现,调用时通脱eureka来完成.
7,什么是eureka的自我保护模式?
默认情况下,当eureka在一定时间内检测不到某个微服务心跳时,eurekaservice会启动自我保护,这时候eurekaservice不会删除注册表中的数据,当网络恢复正常后,会自动退回自我保护模式.
8,eureka和zookeeper都可以提供服务注册与发现的功能,请说说两个的区别?
zookeeper是cp强制性行,eureka是ap高可用.
当zk中主服务器挂了,进行选举时,注册服务不可用.而eureka集群,只要还有一个服务器就可以正常使用
9,eureka的使用步骤
1,添加依赖spring-cloud-starter-netflix-eureka-server.
2,配置application.yml文件
3.在引导类添加注解@enableeurekaserver 这个好像是客户端的@enablediscoveryclient
1,ribbon是做什么的?
当服务提供者是一个集群是,使用使用discoveryclient获取服务访问的post和host时候,不太好实现赋值均衡的调用.ribbon提供一套完整的配置项,如超时,重试等.简单来说就是,在配置中列出所有的服务,ribbon基于某种规则(如简单轮询,随机连接等)帮你实现连接
2,负载平衡的意义什么?
负载平衡可以改善计算机网络,磁盘启动器,中央处理器等多种计算机资源工作的负载分布,旨在优化资源使用.也就是说干活多的让休息,干活少的加工作这种.
3,nginx与ribbon的区别?
nginx是反向代理,客户端请求先发送到nginx,nginx在将请求进行转发
ribbon是客户端负载均衡,从注册中心读取到访问目标后,在客户端进行轮询策略对服务进行轮询访问,全程在客户端操作.
4,@loadbalanced注解的作用?
开启客户端的负载均衡.
]
5,ribbon负载均衡策略
随机: randomrule
轮询: roundrobinrule
最小并发: bestavailablerule
过滤: availabilityfilteringrule
响应时间: weightedresponsetimerule
轮询重试: retryrule
性能可用性: zoneavoidancerule
1,使用步骤?
(1)pom.xml
<dependency>
<groupid>org.springframework.cloud</groupid>
<artifactid>spring-cloud-starter-openfeign</artifactid>
</dependency>
(2)引导类上添加启动注解
@enablefeignclients
(3)application.yml/application.properties
(4)编写服务提供方对应的接口,参考-->接口文档
@feignclient("servername")
public interface xxxxx{
@xxxxmapping("/uri")
public xxx methodname(....);
}
(5)要进行远程调用的类中
@autowired
private xxxxx xxxx;
返回值 result = xxxx.method(参数)
feign的底层就是ribbon和resttemplate的一个封装.
2,什么是feign?
feign一个声明web服务客户端,它让我们可以想使用本地方法一样调用远程方法
1,隔离
1.1,线程池隔离:将线程池再细分,每个服务都有部分访问线程
1.2,信号量隔离:规定访问的次数
2,降级 :相当于在client和server方,默认备用方案.
2.1,服务端
2.1.1,引入依赖 [hystix]
2.1.2,定义降级方法 出现降级的情况:(出现异常,服务调用超时)
2.1.2,1:编写降级方法//方法返回值,参数和原方法一样
2.1.3,在controller类使用@hystrixcommand(fallbackmethod="指定降级后调用的方法",还可以设置hystrix超时时间)注解配置降级方法
2.1.4,在启动类上开启hystrix功能:@enablecircuitbreaker||或者@springcloudapplication
2.2,客户端
2.2.1:在配置类开启feign对hytrix的支持 [feign.hystrix.enabled=true]
2.2.2:定义feign调用接口实现类.复写方法,及降级方法.使用component,将该类的bean加入springioc容器
2.2.3: 在@feignclient注解中使用fallback属性设置降级处理类
3,熔断 :hystrix熔断机制,用于监控微服务调用情况,当失败的情况达到预定的阈值(5秒失败20次), 会打开断路器,拒绝所有请求,直到服务恢复正常为止。
打开-->关闭--半开
4,限流 :限定时间访问次数
1,什么是断路器?
当一个服务器调用另一个服务器时,由于网络原因或自身原因,调用失败,调用者就会处于等在状态,当更多的服务调用当前服务,导致的连锁反应,就会造成雪崩现象.
2,断路器有那三种状态?
1,打开状态,一定时间内,达到一定次数都无法调用,并监控没有恢复的迹象,断路器就会打开,下次访问就不会访问该服务
2.半打开状态,短时间内服务有恢复迹象,断路器就会将一部分数据交给该服务.正常调用时,断路器关闭
3,关闭状态,当服务处于正常状态,可以访问,
3,hystrix有四种防雪崩方式?
服务降级
服务熔断
服务隔离:隔离服务之间的相互影响
服务监控:服务调用时,会以每秒的调用次数,成功次数,记录下来.
4,服务降级底层是如何实现的?
hystrix实现服务降级的功能是通过重写hystrixcommand中的getfallback()方法,当hystrix的
run方法或construct执行发生错误时转而执行getfallback()方法。
1,网关的作用是什么?
网关是所有请求的入口,统一管理微服务请求,负责路由转发,权限控制,负载均衡,安全控制白名单黑名单等.
2,既然nginx可以实现网关?为什么还需要使用zuul框架?
zuul是使用java编写的,可以对springcloud提供更加灵活的服务.