一、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