一.Hystrix断路器
-
1.为什么需要 Hystrix断路器?
雪崩现象: 复杂的分布式架构的应用程序有很多的依赖,当依赖的某个服务出现失败时(线程池阻塞),很容易拖垮整个应用。
解决办法:
对依赖做隔离,Hystrix就是处理依赖隔离的框架,同时也是可以帮我们做依赖服务的治理和监控
hysrix(豪猪):保证微服务群的健壮,做了隔离,熔断,降级,缓存等操作。
最终达到不会由于某个服务出问题而导致雪崩,让整个集群死掉。
资源隔离(限流):线程池隔离,信号量隔离。分配每个服务的资源,互不影响。
熔断:失败率达到阈值时自动触发降级
降级:超时降级,资源不足时降级,降级后配合降级接口返回托底数据。减少损失
缓存:提供了请求缓存,请求合并实现。
所谓降级,就是当某个服务熔断之后,服务器将不再被调用,此时客户端可以自己准备一个本地的fallback回调,返回一个缺省值。
熔断(服务提供方做)调用时不能用feign(有自己的机制),使用ribbon
1.导jar包依赖
2.启动断路器(@EnableHystrix)
3.配置断路注解(@HystrixCommand(fallbackMethod = "getUserFailBack") //出现短路(超时,异常,多次访问都失败),托底数据访问(通过方法调用获取的))
4.返回托底数据的方法(public User getUserFailBack(Long id){ return new User(id,"出现异常了亲!");})
Feign实现
-
为什么使用Feign?
每个方法都要加回调并且耦合。
-
解决方案:
可以使用spring面向切面编程,为feign的接口创建一个代理对象,完成对服务调用,当发现熔断后就调用同名托底方法。
-
如果我们服务消费者实现的技术为ribbon,必须在服务提供者方通过Hystrix的断路器.
-
如果我们服务消费者实现的技术为feign,必须在服务消费者通过feign的断路器,feign断路器底层还是Hystrix的断路器.
二.Zuul路由网关
Zuul 是netflix开源的一个API Gateway 服务器, 本质上是一个web servlet应用。
-
Zuul 在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架。Zuul 相当于是设备和 Netflix 流应用的 Web 网站后端所有请求的前门,也要注册入Eureka。
-
-
路由访问映射规则 :
安全加固:不用服务名,映射路径
忽略原来访问:原来模式不可以访问
加上统一前缀
-
yml配置
zuul: routes: myUser.serviceId: user-provider myUser.path: /user/** #以/user/开头的所有路径都转发给user-provider ignored-services: "*" #可以一个一个配置,但是很麻烦,用*来通配 prefix: "/services" #加上统一前缀
三.SpringCloud Config分布式配置中心
-
微服务架构中,每个项目都有一个yml配置,管理起来麻烦。要使用spring cloud config来统一管理。
-
在整个项目中需要一个config-server 所有的其他项目都对应一个config-clent,无论是provider consumer eureka等。
-
实现
gitjhub上面的数据就用yhptest的 服务端:能通过url访问配置 客户端:能够通过服务端最终访问配置信息 注意:config-server、和Eureka-sever的配置文件不能交给spring cloud config。注意先后
四.分布式事务
-
事务: 指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行.
-
本地事务: SqlSessionfactory
一个数据库范围类事务管理.
-
分布式事务:
跨了多个数据库事务管理,在微服务架构每个服务都有自己数据库,在微服务架构中必然要用到分布式事务.
-
为什么需要?
微服务架构所必须
-
-
实现方案
二阶段提交(耗时耗资源)
tcc(强一致性)
异步确保型(最终一致性-不实时)