springcloud知识整理

1、什么是微服务?

  1、一套架构方法和体系。

  2、由很多体量小、实现特定功能或业务的服务构成。

  3、各服务松耦合、独立开发、独立部署。

  4、各服务可以用不同语言开发。

2、什么是springcloud?

  spring cloud 是一系列框架的有序集合。它利用 spring boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,

  如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 spring boot 的开发风格做到一键启动和部署。

3、Eureka的工作原理

  Eureka:服务注册中心(可以是一个集群),对外暴露自己的地址。

  提供者:启动后向Eureka注册自己信息(地址,提供什么服务)。

  消费者:向Eureka订阅服务,Eureka会将对应服务的所有提供者地址列表发送给消费者,并且定期更新。

  心跳(续约):提供者定期通过http方式向Eureka刷新自己的状态。

  自我保护机制:某时刻某一个微服务不可用了,eureka不会立刻清理,依旧会对该微服务的信息进行保存。

4、ribbon的负载均衡策略有哪些?

  1、轮询策略(RoundRobinRule)

    按照顺序选择server(ribbon默认策略)。当轮询了10个服务端节点还没有找到可用服务的话,轮询结束。

  2、随机策略(RandomRule)

    使用jdk自带的随机数生成工具,生成一个随机数,然后去可用服务列表中拉取服务节点Server。如果当前节点不可用,则进入下一轮随机策略,直到选到可用服务节点为止。

  3、可用过滤策略(AvailabilityFilteringRule)

    过滤掉连接失败的服务节点,并且过滤掉高并发的服务节点,然后从健康的服务节点中,使用轮询策略选出一个节点返回。

  4、响应时间权重策略(WeightedResponseTimeRule)

    根据响应时间,分配一个权重weight,响应时间越长,weight越小,被选中的可能性越低。

  5、轮询失败重试策略(RetryRule)

    以轮询的方式选择服务,当轮询到的服务不可用时,在最大重试时间的限定下重复尝试选取服务,直到选取出一个服务或者超时。

  6、并发量最小可用策略(BestAvailableRule)

    选择一个并发量最小的server返回(断路器打开的server忽略)。

    如何判断并发量最小呢?ServerStats有个属性activeRequestCount,这个属性记录的就是server的并发量。轮询所有的server,选择其中activeRequestCount最小的那个server,就是并发量最小的服务节点。

  7、区域权重策略(ZoneAvoidanceRule)

    复合判断server所在区域的性能和server的可用性,来选择server返回。

 5、ribbon原理

  1、获取@LoadBalanced注解标记的RestTemplate。

  2、RestTemplate添加一个拦截器(filter),当使用RestTemplate发起http调用时进行拦截。

  3、在filter拦截到该请求时,获取该次请求服务集群的全部列表信息。

  4、根据规则从集群中选取一个服务作为此次请求访问的目标。

  5、访问该目标,并获取返回结果。

6、Hystrix是什么?

  Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等,Hystrix能够保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高部分是系统的弹性。

  解决雪崩(指因基础服务故障导致为级联故障的现象叫雪崩效应)的方案就是 服务降级+服务熔断,服务限流,服务隔离等

  服务降级(fallback):防止用户一直等待,使用降级方式,调用FallBack(返回友好提示,不会去处理请求) 

  服务熔断(break):

    1、 开启熔断:在固定时间窗口内,接口调用超时比率达到一个阈值,断路器将会开启。进入熔断状态后,后续对该服务接口的调用不再经过网络,直接执行本地的默认方法,达到服务降级的效果。

    2、熔断恢复:一段时间之后(默认是 5 秒),这个时候断路器是 半开状态 ,会 让其中一个请求进行转发 。如果成功,断路器会关闭,若失败,继续开启。

  服务限流(flowlimit):限流即限制并发量,不至于让系统被高流量击垮。

  服务隔离:

    1、线程池隔离(舱壁模式):将各依赖服务的访问交由独立的线程池来处理,会为每个依赖服务创建一个线程池。

    2、信号量隔离:通过为各依赖服务设置信号量(或计数器)来限制并发调用,相当于对各依赖服务做限流。信号量模式下任务由当前线程直接处理,不涉及到线程切换,自然也就没有超时控制。

7、Feign的作用是什么?

  Feign整合了ribbon和hystrix,Feign是一种负载均衡的HTTP客户端, 使用Feign调用API就像调用本地方法一样,从避免了调用目标微服务时,需要不断的解析/封装json 数据的繁琐。

8、什么是gateway?

  Spring Cloud Gateway基于 Spring Boot 2.x,Spring WebFlux 和 Project Reactor 构建,使用了 Webflux 中的 reactor-netty 响应式编程组件,底层使用了 Netty 通讯框架。

  Route(路由):路由是构建网关的基本模块,它由 ID、目标 URI、一系列的断言和过滤器组成,如果断言为 true 则匹配该路由。

  Predicate(断言)参考的是 Java8 中的 java.util.function.Predicate。开发人员可以匹配 HTTP 请求中的所有内容(例如请求头或请求参数),如果请求与断言相匹配则进行路由。

  Filter(过滤):指的是 Spring 框架中 GatewayFilter 的实例,使用过滤器,可以在请求被路由之前或之后对请求进行修改。

  动态路由:开启后,默认情况下 Gateway 会根据注册中心注册的服务列表,以注册中心上微服务名为路径创建动态路由进行转发,从而实现动态路由的功能。例如:lb://CLOUD-PAYMENT-SERVICE #动态,lb://微服务名

9、什么是分布式链路追踪?

  将一次分布式请求还原成调用链路,调用情况集中展示,比如,各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态等等。

  通过分布式追踪系统,我们能很好地定位请求的每条具体请求链路,从而轻易地实现请求链路追踪,进而定位和分析每个模块的性能瓶颈。

  相关产品:阿里的鹰眼、大众点评的 CAT、Twitter 的 Zipkin、PinPoint 以及国产开源SkyWalking

springcloud知识整理

上一篇:python中判断变量的类型


下一篇:SpringCloud Ribbon组成和负载均衡规则