一、SpringCloud--Eureka--原理及源码解析

Eureka的基础架构及服务治理机制:

  服务注册中心:

    ureka提供的服务端,提供服务注册和发现的功能。

  服务提供者:

    将自己的服务注册到注册中心。

  服务消费者:

    从注册中心获取服务列表,Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,Feign可以帮助我们更快捷、优雅地调用HTTP API

  eureka注册和启动:http://www.heartthinkdo.com/?p=1933

 二、

fegion介绍:https://blog.csdn.net/kuibuzhiqianli/article/details/103356474

ribbon源码分析:https://www.jianshu.com/p/1bd66db5dc46 很好的源码分析总结

ureka原理:https://www.cnblogs.com/liconglong/p/13223182.html

 

三、

hystrix:

  熔断器:类似于电力保护器,根据最近调用的错误次数决定是否允许继续操作。

  熔断器是保护高可用的一道防线, 能够快速失败,防止雪崩效应。

  

1.断路器机制:大量失败超过默认比例50%-->OPEN,所有请求都无效-->5秒后HALF-OPEN==>下一次请求成功Closed,失败open.

2.fallback:可以设置缓存或者默认的返回值。

3.资源隔离:hystrix通过线程池实现资源隔离,防止不同业务在相同线程池下资源被耗尽。

hystrix原理:http://www.ityouknow.com/springcloud/2017/05/16/springcloud-hystrix.html

hystrix隔离策略:https://chenyongjun.vip/articles/95

4、线程池隔离技术与信号量隔离技术的区别

Thread Pools(hystrix线程池隔离)

,就是将多个依赖服务的调用分别隔离到各自自己的资源池内,避免说对某一个依赖服务的调用,因为依赖服务的接口调用的延迟或者失败,导致服务所有的线程资源全部耗费在这个服务的接口调用上

一旦说某个服务的线程资源全部耗尽的话,可能就导致服务就会崩溃,甚至说这种故障会不断蔓延

semaphore(hystrix信号量隔离)

信号量:适合,你的访问不是对外部依赖的访问,而是对内部的一些比较复杂的业务逻辑的访问,但是像这种访问,系统内部的代码,其实不涉及任何的网络请求,
那么只要做信号量的普通限流就可以了,因为不需要去捕获timeout类似的问题,算法+数据结构的效率不是太高,
并发量突然太高,因为这里稍微耗时一些,导致很多线程卡在这里的话,不太好,所以进行一个基本的资源隔离和访问,避免内部复杂的低效率的代码,导致大量的线程被卡住

四、zuul

zuul原理:https://www.cnblogs.com/jing99/p/11696192.html

1.zuul 的作用

  • 统一入口:未全部为服务提供一个唯一的入口,网关起到外部和内部隔离的作用,保障了后台服务的安全性。
  • 鉴权校验:识别每个请求的权限,拒绝不符合要求的请求。
  • 动态路由:动态的将请求路由到不同的后端集群中。
  • 减少客户端与服务端的耦合:服务可以独立发展,通过网关层来做映射。

 

 

2、网关访问方式

  通过zuul访问服务的,URL地址默认格式为:http://zuulHostIp:port/要访问的服务名称/服务中的URL

  服务名称:properties配置文件中的spring.application.name。

  服务的URL:就是对应的服务对外提供的URL路径监听。

 

3、网关全局变量配置

  网关配置方式有多种,URL、服务名称、排除|忽略、前缀

  网关配置没有优劣好坏,应该在不同的情况下选择合适的配置方案。

4、Zuul中提供了过滤器

  可以用来过滤代理请求,提供额外功能逻辑。如:权限验证,日志记录等。

  Zuul提供的过滤器是一个父类。父类是ZuulFilter。通过父类中定义的抽象方法filterType,来决定当前的Filter种类是什么。

  有前置过滤、路由后过滤、后置过滤、异常过滤。

5、Zuul网关的容错(与Hystrix的无缝结合)

  在Edgware版本之前,Zuul提供了接口ZuulFallbackProvider用于实现fallback处理。从Edgware版本开始,Zuul提供了ZuulFallbackProvider的子接口FallbackProvider来提供fallback处理。
  Zuul的fallback容错处理逻辑,只针对timeout异常处理,当请求被Zuul路由后,只要服务有返回(包括异常),都不会触发Zuul的fallback容错逻辑。

6、Zuul网关的限流保护

Zuul网关组件也提供了限流保护。当请求并发达到阀值,自动触发限流保护,返回错误结果。只要提供error错误处理机制即可。

全局限流和局部限流

  使用全局限流配置,zuul会对代理的所有服务提供限流保护

  使用局部限流配置,zuul仅针对配置的服务提供限流保护。

7.Zuul网关性能调优:网关的两层超时调优

zuul中的Hystrix内部使用线程池隔离机制提供请求路由实现,其默认的超时时长为1000毫秒。ribbon底层默认超时时长为5000毫秒。如果Hystrix超时,直接返回超时异常。如果ribbon超时,同时Hystrix未超时,ribbon会自动进行服务集群轮询重试,直到Hystrix超时为止。如果Hystrix超时时长小于ribbon超时时长,ribbon不会进行服务集群轮询重试。

那么在zuul中可配置的超时时长就有两个位置:Hystrix和ribbon