Spring Cloud

springcloud --- 服务熔断、降级、限流--之--Hystrix-服务降级

冷暖自知 提交于 2020-08-10 05:01:04
参考文章: springcloud----服务熔断、降级、限流--之--Hystrix-服务降级 服务降级、服务熔断、服务限流、服务隔离 分布式面临的问题: 负责的分布式体系结构中应用程序有数十个依赖 ,可能会形成 调用链 (一个阻塞,全体等待) , 引起服务雪崩 Hystrix 是一个用于处理分布式系统的 延迟 和 容错 的开源库, 在分布式系统中,许多不可避免的调用会失败, 比如超时,一场等。Hystrix 能够保证在一个依赖出现问题的情况下, 不会导致整体服务的失败、避免级联故障、以提高分布式系统的弹性 。 “ 断路器 ” 本身是一种开关装置,当某个服务单元发生故障之后,通过断路器的故障监控(类似保险熔断), 向调用方返回一个符合预期的、可处理的备选响应(FallBack) 而不是时间的等待或抛出调用方法处理异常 ,这样就保证了服务调用方的线程 不会长时间,不必要地占用 ,从而避免了故障在分布式系统无线的蔓延,从而导致 雪崩效应 。 重要概念 服务降级(fallback) : 服务器忙,请稍后再试,等友好的提示 哪些情况会出现服务降级 程序异常、超时、服务熔断触发服务降级、线程池/信号量打满也会导致服务降级 服务熔断(break): 类比保险丝达到最大服务访问,直接拒绝。然后调用服务降级的方法返回友好提示 服务的降级 -> 进而熔断 -> 恢复调用链路 服务限流

爆肝!82.3万字笔记让你彻底吃透分布式中的Spring Cloud微服务

孤者浪人 提交于 2020-08-10 02:42:08
本篇讲述Spring Cloud 微服务及其组件的专业技术。微服务系统作为分布式系统的一种形式,.必然会带有分布式系统的各种弊病,因此本篇也会介绍分布式系统的一些常见知识,以更好满足企业构建系统的需求。 本篇从企业的真实需求出发,理论结合实际,深入讲解SpringCloud微服务和分布式系统的知识。文中既包括SpringCloud微服务的各类常用组件的讲解,又包括分布式系统的常用知识的介绍。 SpringCloud组件方面主要讲解服务注册和服务发现(Eureka) 、服务调用(Ribbon 和OpenFeign)、断路器(Hystrix 和Resilience4j)、网关(Zuul和Gateway)、配置(Config)、全链路追踪(Sleuth) 、微服务的监控(Admin)等;分布式系统方面主要讲解分布式数据库、分布式缓存、会话和权限以及发号机制等。本篇的实践部分通过Apache Thrift 讲解了远程过程调用(RPC)在分布式系统中的应用,并且分析了处理高并发的一些常用方法,最后还通过一个简单的实例讲解了微服务系统的搭建。 本篇篇幅有些长总共4大部分,20个章节: 第一部分概述和基础 第二部分Spring Cloud微服务 第三部分分布式技术 第四部分微服务系统实践 第一部分概述和基础 第1章分布式和微服务概述 第2章技术基础 第二部分Spring Cloud微服务

当Tomcat遇上Netty

丶灬走出姿态 提交于 2020-08-10 02:39:20
故事背景 嘀~嘀~嘀~,生产事故,内存泄漏! 昨天下午,突然收到运维的消息,分部某系统生产环境内存泄漏了,帮忙排查一下。 排查过程 第一步,要日志 分部给到的异常日志大概是这样(鉴于公司规定禁止截图禁止拍照禁止外传任何信息,下面是我网上找到一张类似的报错): LEAK: ByteBuf.release() was not called before it's garbage-collected. See http://netty.io/wiki/reference-counted-objects.html for more information. Recent access records: #1: io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:273) io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:253) io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) io

零基础入行如何学习Java呢?

和自甴很熟 提交于 2020-08-10 02:17:24
  Java开发常年占据着编程语言排行榜的首位,是很多人学习的选择。但不少人都会因为Java的学习难度而退缩,觉得没有基础学习Java开发难度会非常大,那么学习Java开发难吗?初学者要如何学习呢?下面,千锋给大家介绍一下。   其实,Java的学习并没有想象中那么难,只要我们可以掌握正确的学习方法,Java学习还是很简单的。对于新手来说,学习Java要经历从认知到掌握,从理论到实战的过程。而这个过程中涉及到众多的知识点以及编程思维的转变,有一定的难度,但这样更能说明Java开发工程师的职业价值。   对于初学者来说,只要在学习过程中,掌握科学的学习方法,即使零基础的入行者也能充分掌握Java开发技术,那究竟如何才能学习Java呢?   第一阶段:企业入门级项目阶段,让学员可掌握Java核心基础、面向对象、JavaSE API、MySQL数据库、JDBS、HTML+CSS、Servlet、JSP、JavaScript等,学员可以完成常见中小型互联网项目开发,达到初级Java开发工程师能力。   第二阶段企业框架级项目阶段是进阶阶段,让学员增强Java基础、web基础、CSS/JavaScript进阶、Maven项目管理、Spring5、SpringMVC、Mybatis、SMM综合项目、学员项目等,完成本阶段学员可以胜任各行业企业级项目中高级工程师岗位。  

基于SpringCloud的微服务架构实战案例项目

╄→гoц情女王★ 提交于 2020-08-10 00:06:30
QuickStart 基于SpringCloud体系实现,简单购物流程实现,满足基本功能:注册、登录、商品列表展示、商品详情展示、订单创建、详情查看、订单支付、库存更新等等。 github源码地址: https://github.com/backkoms/simplemall 每个业务服务采用独立的MYSQL数据库,初期考虑用到如下组件: 服务注册、发现: eureka 配置管理:spring config , spring security 集群容错: hystrix(待实现) API网关: zuul(待实现) 服务负载:feign+ribbon api文档输出:swagger2 代码简化:lombok 消息队列:rabbitmq 分布式锁: redis (待实现) 链路跟踪:spring cloud sletuh ->zipkin 安全认证:oauth2/JWT(待实现) 服务监控:spring-boot-admin 各模块介绍 模块名称 端口 简介 admin-server 9002 服务监控中心,监控所有服务模块 conf-server 9004 分布式配置中心,结合spring-security/rabbitmq同时使用 eureka-server 9003 服务注册中心,提供服务注册、发现功能 sleuth-server 9001

当Tomcat遇上Netty

走远了吗. 提交于 2020-08-10 00:04:32
故事背景 嘀~嘀~嘀~,生产事故,内存泄漏! 昨天下午,突然收到运维的消息,分部某系统生产环境内存泄漏了,帮忙排查一下。 排查过程 第一步,要日志 分部给到的异常日志大概是这样(鉴于公司规定禁止截图禁止拍照禁止外传任何信息,下面是我网上找到一张类似的报错): LEAK: ByteBuf.release() was not called before it's garbage-collected. See http://netty.io/wiki/reference-counted-objects.html for more information. Recent access records: #1: io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:273) io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:253) io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) io

【SpringCloud】Gateway 配置全局过滤器获取请求参数和响应值

你离开我真会死。 提交于 2020-08-09 22:36:12
【SpringCloud】Gateway 配置全局过滤器获取请求参数和响应值 实现Ordered接口getOrder()方法,数值越小越靠前执行,记得这一点就OK了。 获取请求参数RequestBody @Component @Slf4j @AllArgsConstructor public class HttpRequestFilter implements GlobalFilter, Ordered { @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { ServerHttpRequest request = exchange.getRequest(); String method = request.getMethodValue(); String contentType = request.getHeaders().getFirst("Content-Type"); if ("POST".equals(method)) { return DataBufferUtils.join(exchange.getRequest().getBody()) .flatMap(dataBuffer -> { byte[] bytes = new byte

Spring Cloud Gateway设置session超时时间

允我心安 提交于 2020-08-09 22:27:31
在使用Spring Cloud框架的时候,Http的请求首先会到达Spring Cloud Gateway服务,并与之建立session对象,但是在默认情况下,请求结果之后,session会立刻过期。有些业务场景可能会在session中存储一些数据,比如登陆状态,如果登陆之后,长时间没有访问,再次访问的时候,让用户重新登陆等,都需要控制session的空闲时间。在Spring Cloud Gateway中,默认管理session的类是 InMemoryWebSessionStore ,它里面的内部类 InMemoryWebSession 实现了 WebSession 接口。在这个接口,有两个方法,有来设置和获取session的最大空闲时间: @Override public void setMaxIdleTime(Duration maxIdleTime) { this.maxIdleTime = maxIdleTime; } @Override public Duration getMaxIdleTime() { return this.maxIdleTime; } 所以,要想修改它的空闲最大时间,就需要调用setMaxIdleTime方法进行设置。 另外,session过期检测的方法如下: @Override public boolean isExpired() {

聊聊微服务架构及分布式事务解决方案!

无人久伴 提交于 2020-08-09 21:45:17
作者:伈情的博客 http://nickid.cn/2017/04/分布式事务/ 分布式事务场景如何设计系统架构及解决数据一致性问题,个人理解最终方案把握以下原则就可以了,那就是:大事务=小事务(原子事务)+异步(消息通知),解决分布式事务的最好办法其实就是不考虑分布式事务,将一个大的业务进行拆分,整个大的业务流程,转化成若干个小的业务流程,然后通过设计补偿流程从而考虑最终一致性。 什么是事务 事务(Transaction)及其ACID属性 事务是由一组SQL语句组成的逻辑处理单元,事务具有以下4个属性,通常简称为事务的ACID属性: 原子性(Atomicity): 事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行。 一致性(Consistent): 在事务开始和完成时,数据都必须保持一致状态。这意味着所有相关的数据规则都必须应用于事务的修改,以保持数据的完整性;事务结束时,所有的内部数据结构(如B树索引或双向链表)也都必须是正确的。 隔离性(Isoation): 数据库系统提供一定的隔离机制,保证事务在不受外部并发操作影响的“独立”环境执行。这意味着事务处理过程中的中间状态对外部是不可见的,反之亦然。 持久性(Durabe): 事务完成之后,它对于数据的修改是永久性的,即使出现系统故障也能够保持。 典型场景:银行转账业务 例如:李雷账户中有500块钱

SpringCloud异常处理统一封装我来做-使用篇

强颜欢笑 提交于 2020-08-09 18:11:48
SpringCloud异常处理统一封装我来做-使用篇 简介 重复功能我来写。在 SpringBoot 项目里都有全局异常处理以及返回包装等,返回前端是带上 succ 、 code 、 msg 、 data 等字段。单个项目情况下很好解决,当微服务模块多的情况下,很多情况开发都是复制原有代码进行构建另外一个项目的,导致这些功能升级需要修改多个服务,在这个基础上,我们封装了一个组件 unified-dispose-spring-cloud-starter 里面包含了一些基础的异常处理以及返回包装功能。 依赖添加启动功能 添加依赖 ps: 实际version版本请使用最新版 最新版本: 点击查看最新新版本 <dependency> <groupId>com.purgeteam.cloud</groupId> <artifactId>unified-dispose-spring-cloud-starter</artifactId> <version>0.3.0.RELEASE</version> </dependency> 启动类添加 @EnableGlobalDispose 注解开启以下功能。 @EnableGlobalDispose @SpringBootApplication public class GlobalDisposeSpringBootApplication {