SpringCloud

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来完成.

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

Ribbon

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

Feign

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服务客户端,它让我们可以想使用本地方法一样调用远程方法

Hystrix

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()方法。

 

Gateway,zuul

1,网关的作用是什么?

  网关是所有请求的入口,统一管理微服务请求,负责路由转发,权限控制,负载均衡,安全控制白名单黑名单等.

 

2,既然Nginx可以实现网关?为什么还需要使用Zuul框架?

  zuul是使用java编写的,可以对SpringCloud提供更加灵活的服务.

3.getway的使用

  注册getway信息到nacos上,在getway服务进行网关配置

    3.1创建路由:     

- id: contractInfo  //服务spring name
uri: lb://contractInfo
predicates:
- Path=/contractInfo/**

     3.2:在网关配置权限,白名单

    

继承 GlobalFilter接口,重写filter方法
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
//获得请求和响应对象
ServerHttpRequest request = exchange.getRequest();
ServerHttpResponse response = exchange.getResponse();
AntPathMatcher matcher = new AntPathMatcher();
//对白名单中的地址放行
List<String> whiteList = whiteListConfig.getWhiteList();    //这里读取配置信息允许访问的路由- /system/login

for(String str : whiteList){
if(matcher.match(str, request.getURI().getPath())){
log.debug("白名单,放行{}",request.getURI().getPath());
return chain.filter(exchange);
}
}

 


implements GlobalFilter
posted @ 2021-08-07 18:41  党王  阅读(199)  评论(0)    收藏  举报