| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> springcloud: 服务熔断与网关 -> 正文阅读 |
|
[Java知识库]springcloud: 服务熔断与网关 |
一,Hystrix简介? ? Hystrix是一个用于处理分布式系统的延迟和容错的开源库, 在分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等,Hystrix能够保证在一个依赖出问题的情况下, 不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性。(理念设计和思想) 服务雪崩 Hystrix重要概念- 服务降级fallback, 服务熔断break, 服务限流flowlimit; 服务降级:fallback 1,服务器忙,不让客户端等待立即返回一个友好提示 2,哪些情况会发出降级:程序运行异常,超时,服务熔断触发服务降级,线程池、信号量打满也会导致服务降级 服务熔断: 1,类比保险丝达到最大访问服务后,直接拒绝访问,拉闸限电,然后调用服务降级的方法友好显示 2,服务的降级->熔断-恢复调用链路 服务限流 秒杀高并发等操作,严禁一窝蜂拥挤,大家排队,一秒钟N个,有序进行 1,构建cloud-provider-hystrix-payment8001(带hystrix的provider服务端)注册进入eurake,启动7001,和该模块, http://localhost:7001/ http://localhost:8001/payment/hystrix/ok/1 http://localhost:8001/payment/hystrix/timeout/1 正确->错误 降级熔断 恢复 假设上万个请求访问一个借口, tomacat的默认的工程线程数被打满了,没有多余的线程分解压力和处理 假设外部消费者80访问,消费者只能干等,服务端8001拖死 2.新建80消费者(带hystrix,hystrix一般用在消费侧) http://localhost:8083/consumer/payment/hystrix/ok/3 假设上万个请求访问8001服务端一个借口,那么8001同一层次的其他接口服务被困死,因为tomcat线程池里的工作线程已经被挤占完毕,80此时调用8001,客户端访问响应缓慢 解决的要求: 解决 二,Hystrix之服务降级支付侧fallback1.服务降级 2,8001从自身找问题:设置自身调用超时时间的峰值,峰值内可以正常运行,超过了需要有兜底的方法处理,作服务降级fallback @HystrixCommand报异常后如何处理 业务类启用@ HystrixCommand, 主启动类激活 http://localhost:8001/payment/hystrix/timeout/1?(超过3秒,调用兜底方法) 1.超时异常 三,Hystrix之服务降级订单侧fallback客户端进行降级(一般在客户端) yml: ?主启动:加@EnableHystrix 业务类: @HystrixCommand(fallbackMethod = "paymentInfo_TimeOutHandler", commandProperties = { @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "500") }) 启动客户端80,服务端8001,服务端没有问题,但客户端出现异常调用兜底方法 http://localhost:8083/consumer/payment/hystrix/timeout/1 四,Hystrix之全局服务降级DefaultProperties兜底方法与业务逻辑方法耦合度高,每个方法需要兜底代码膨胀 客户端80 问题解决 http://localhost:8083/consumer/payment/hystrix/timeout/1 五,Hystrix之通配服务降级FeignFallback要解决的问题: 解决: 解耦 本次案例服务降级处理是在客户端80实现完成的,与服务端8001没有关系 常见异常 操作: 修改cloud-consumer-feign-hystrix- order80 3,fallback = PaymentFallbackService.class ?http://localhost:8083/consumer/payment/hystrix/ok/1?没有问题 关闭8001(相当于宕机),再次访问,错误降级 六,服务熔断 熔断机制概述 断路器关闭-》打开-》半开 正常每秒100个请求->现在每秒600个请求->断路器打开->现在每秒80个请求->半开->关闭
在Spring Cloud框架里,熔断机制通过Hystrix实现。Hystrix会监控微服务间调用的状况,当失败的调用到一定阈值,缺省是5秒内20次调用失败,就会启动熔断机制。熔断机制的注解是@HystrixCommand.
七,Hystrix之服务熔断案例操作: 修改cloud-provider-hystrix-payment8001 http://localhost:8001/payment/circuit/1 测试:多次错误,然后慢慢正确,发现刚开始不满足条件,就算是正确的访问地址也不能进行 服务熔断总结 2.熔断关闭 3.熔断半开 断路器开启或者关闭的条件 断路器开启后 八,服务监控hystrixDashboar 1,新建cloud-consumer-hystrix-dashboard9001 2,启动cloud-consumer-hystrix-dashboard9001该微服务后续将监控微服务8001 3,测试 1.修改cloud-provider-hystrix-payment8001 ?2.监控测试 测试地址:http://localhost:8001/payment/circuit/1 一,GateWay简介是什么 Gateway是在Spring生态系统之上构建的API网关服务,基于Spring 5, Spring Boot 2和Project Reactor等技术。 SpringCloud Gateway是Spring Cloud的一个全新项目,基纡Spring 5.0+Spring Boot 2.0和Project Reactor等技术开发的网关,它旨在为微服务架构提供-种简单有效的统一的API路由管理方式。 SpringCloud Gateway作为Spring Cloud生态系统中的网关,目标是替代Zuul,在Spring Cloud 2.0以上版本中,没有对新版本的Zuul 2.0以上最新高性能版本进行集成,仍然还是使用的Zuul 1.x非Reactor模式的老版本。而为了提升网关的性能,SpringCloud Gateway是基于WebFlux框架实现的,而WebFlux框架底层则使用了高性能的Reactor模式通信框架Netty. Spring Cloud Gateway的目标提供统一的路由方式且基于Filter 链的方式提供了网关基本的功能,例如:安全,监控/指标,和限流。 三大核心概念: Route(路由):路由是构建网关的基本模块,它由id,目标URI,一系列的断言和过滤器组成,如果断言为true则匹配该路由 Predicate(断言) : 开发人员可以匹配http请求中的所有内容(列如请求头或请求参数),如果请求与断言相匹配则进行路由 filter(过滤): 指的是spring框架中gatewayfilter的实例,使用过滤器,可以在请求路由前或后对请求进行修改 工作流程 ? ?核心逻辑是路由转发+执行过滤链 (nigix是对外网关,gateway是对内网关) 1.新建Module:cloud-gateway-gateway9527 ?2, 启动7001 http://localhost:8001/payment/get/1 http://localhost:9527/payment/get/1 1.在配置文件yml中配置(上一篇博客) http://localhost:9527/game 二,GateWay配置动态路由默认情况下Gateway会根据注册中心注册的服务列表,以注册中心上微服务名为路径创建动态路由进行转发,从而实现动态路由的功能 1.启动:一个eureka7001 +两个服务提供者8001/8002 2,需要注意的是uri的协议为lb,表示启用Gateway的负 载均衡功能。 ?地址:http://localhost:9527/payment/lb 三,PredicateRoute Predicate Factories是什么 Spring Cloud Gateway包括许多内置的Route Predicate工厂。所有这些Predicate都与HTTP请求的不同属性匹配。 多个Route Predicate工厂可以进行组合Spring Cloud Gateway创建Route对象时,使用RoutePredicateFactory创建Predicate对象, Predicate对象可以赋值给Route。Spring Cloud Gateway包含许多内置的Route Predicate Factories. 所有这些谓词都匹配HTTP请求的不同属性。多种谓词工厂可以组合,并通过逻辑and. 常用的Route Predicate After Route Predicate 四,GateWay的Filter是什么: 路由过滤器可用于修改进入的HTTP请求和返回的HTTP响应,路由过滤器只能指定路由进行使用。 生命周期: GlobalFilter 自定义过滤器 ?http://localhost:9527/payment/lb?uname=111 http://localhost:9527/payment/lb 参考尚硅谷周阳老师springcloud |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 3:30:52- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |