并发编程-26 高并发处理手段之服务降级与服务熔断 + 数据库切库分库分表
文章目录
- 服务降级与服务熔断概述
- 服务降级举例
- 服务熔断 VS 服务降级
- 服务降级要考虑的问题
- Hystrix
- 数据库切库分库分表
- 高可用的一些手段
服务降级与服务熔断概述
服务熔断: 一般是指软件系统中,由于某些原因使得服务出现了过载现象,为防止造成整个系统故障,从而采用的一种保护措施,熔断也可以称为过载保护
服务降级: 当服务压力剧增的时候根据当前的业务情况及流量对一些服务和页面有策略的降级,以此缓解服务器的压力,以保证核心任务的进行。同时保证部分甚至大部分任务客户能得到正确的响应。也就是当前的请求处理不了了或者出错了,给一个默认的返回。
服务降级举例
超时降级:主要配置好超时时间和超时重试次数和机制,并使用异步机制探测回复情况
失败次数降级:主要是一些不稳定的api,当失败调用次数达到一定阀值自动降级,同样要使用异步机制探测回复情况
故障降级:比如要调用的远程服务挂掉了(网络故障、DNS故障、http服务返回错误的状态码、rpc服务抛出异常),则可以直接降级。降级后的处理方案有:默认值(比如库存服务挂了,返回默认现货)、兜底数据(比如广告挂了,返回提前准备好的一些静态页面)、缓存(之前暂存的一些缓存数据)
限流降级: 比如当秒杀或者抢购一些限购商品时,此时可能会因为访问量太大而导致系统崩溃,此时我们会使用限流来进行限制访问量,当达到限流阀值,后续请求会被降级;降级后的处理方案可以是:排队页面(将用户导流到排队页面等一会重试)、无货(直接告知用户没货了)、错误页(如活动太火爆了,稍后重试)等等
服务熔断 VS 服务降级
两者其实从某些角度看是有一定的类似性的:
目的很一致,都是从可用性可靠性着想,为防止系统的整体缓慢甚至崩溃,采用的技术手段
最终表现类似,对于两者来说,最终让用户体验到的是某些功能暂时不可达或不可用
粒度一般都是服务级别,当然,业界也有不少更细粒度的做法,比如做到数据持久层(允许查询,不允许增删改)
自治性要求很高,熔断模式一般都是服务基于策略的自动触发,降级虽说可人工干预,但在微服务架构下,完全靠人显然不可能,开关预置、配置中心都是必要手段;
而两者的区别也是明显的:
触发原因不太一样,服务熔断一般是某个服务(下游服务)故障引起,而服务降级一般是从整体负荷考虑
管理目标的层次不太一样,熔断其实是一个框架级的处理,每个微服务都需要(无层级之分),而降级一般需要对业务有层级之分(比如降级一般是从最外围服务开始)
实现方式不太一样
服务降级要考虑的问题
核心和非核心服务
是否支持降级,降级策略
业务放通的场景,策略
Hystrix
具备拥有回退机制和断路器功能的线程和信号隔离,请求缓存和请求打包(request collapsing),以及监控和配置等功能
如何使用,请参考以前的博文
Spring Cloud【Finchley】-08使用Hystrix实现容错
Spring Cloud【Finchley】-09Feign使用Hystrix
Spring Cloud【Finchley】-10Hystrix监控
Spring Cloud【Finchley】-11Feign项目整合Hystrix监控
Spring Cloud【Finchley】-12使用Hystrix Dashboard实现Hystrix数据的可视化监控
数据库切库分库分表
数据库的瓶颈:
单个数据库数据量太大(1-2T): 对应的策略—>拆分为多个库
单个数据库服务器压力太大,读写瓶颈:对应的策略—>拆分为多个库
单个表数据量过大:对应的策略—>分表
切库的基础:读写分离 ( 主库/从库)
自定义注解完成数据库切库:见以前的博文
Spring Boot2.x-09 基于Spring Boot 2.1.2 + Mybatis使用自定义注解实现数据库切换
Spring Boot2.x-10 基于Spring Boot 2.1.2 + Mybatis 2.0.0实现多数据源,支持事务
高可用的一些手段
任务调度系统分布式: elastic-job + zookeeper , 请参考 elastic-job+zookeeper实现分布式定时任务调度的使用(springboot版本)
主备切换: apache curator + zookeeper 分布式锁实现 ,请参考 ZooKeeper + Curator 实现分布式锁
并发编程-26 高并发处理手段之服务降级与服务熔断 + 数据库切库分库分表相关推荐
- 并发编程-24 高并发处理手段之扩容思路 + 缓存思路
文章目录 概述 扩容思路 垂直扩展(纵向扩展) 水平扩展(横向扩展) 缓存思路 缓存特征 缓存命中率影响因素 缓存分类和应用场景 Guava Cache Memcache Redis 概述 这里只是讲 ...
- 并发编程-25 高并发处理手段之消息队列思路 + 应用拆分思路 + 应用限流思路
文章目录 概述 消息队列 消息队列特性 为什么需要消息队列 消息队列的好处 消息队列举例 应用拆分 应用拆分的原则 应用拆分的思考 应用拆分常用的组件 Dubbo Spring Cloud 应用限流 ...
- MySQL 高可用:mysql+mycat实现数据库分片(分库分表)
什么是MYCAT: 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务.ACID.可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群 一个 ...
- Java 高并发_JAVA并发编程与高并发解决方案 JAVA高并发项目实战课程 没有项目经验的朋友不要错过!...
JAVA并发编程与高并发解决方案 JAVA高并发项目实战课程 没有项目经验的朋友不要错过! 1.JPG (37.82 KB, 下载次数: 0) 2018-12-3 09:40 上传 2.JPG (28 ...
- java并发编程与高并发解决方案
知识点 线程安全,线程封闭,线程调度,同步容器,并发容器,AQS,J.U.C,等等 高并发解决思路与手段 扩容:水平扩容.垂直扩容 缓存:Redis.Memcache.GuavaCache等 队列:K ...
- 高并发大流量情况下带来的海量数据分库分表的正确姿势
注意!!! 不要为了分库分表而分库分表!!! 引入SOA架构中的一句话:架构不是一蹶而起的,而是慢慢演进的 一.为什么需要分库分表? 请求数太高: 在高并发情况下,大量请求落入数据库,最终会导致数据库 ...
- MySql高可用搭建 + 读写分离 + 分库分表
Mysql读写分离与分库分表 一.Mysql读写分离解决的问题 二.mysql处理请求运行流程 三.读写分离结构 四.读写分离产生场景 五.读写分离工具 5.1 MyCat 5.2 HAProxy 5 ...
- 【云风skynet】详解skynet的多核高并发编程丨actor模型丨游戏开发丨游戏服务端开发丨多线程丨Linux服务器开发丨后端开发
skynet中多核高并发编程给我们的启发 1. 多核并发编程 2. actor模型详解 3. 手撕一个万人同时在线游戏 视频讲解如下,点击观看: [云风skynet]详解skynet的多核高并发编程丨 ...
- JavaWeb 并发编程 与 高并发解决方案
在这里写写我学习到和自己所理解的 Java高并发编程和高并发解决方案.现在在各大互联网公司中,随着日益增长的互联网服务需求,高并发处理已经是一个非常常见的问题,在这篇文章里面我们重点讨论两个方面的问题 ...
最新文章
- 20110625 AD下DFS实现冗余文件服务器,加密软件等
- ios4--UIView的常见属性(尺寸和位置)
- 网络视频监控系统解决方案概述
- 二叉查找树(一)之 C语言的实现
- ASP.NET 常用验证
- IntelliJ IDEA 添加copyright
- (55)FPGA条件选择无优先级(if-else)
- 无法打开数据库‘mysql_MySQL数据库之MYSQL无法启动解决方法
- Redis:30分钟从入门到精通 - 2P
- python开发微信公众号开发教程_python编写微信公众号首图思路详解
- 佳能EOS 500D、尼康D5000、宾得Kx PK 纠结!
- H5链接调起支付宝APP支付(个人收款)
- JAVA对接发送SMS短信服务
- 3月18日 稠密光流FB,Deepflow,DIS,光流场的可视化
- 实现谷歌浏览器打开海康视频等OCX控件
- 4、spss做多元线性回归
- 棋牌游戏网站支付接口那些事儿
- 《Spring Cloud微服务架构实战派》PDF样章
- stl库的使用——队列queue和优先队列和优先队列小根堆(全家桶哎)
- nodejs+vue旅游网站设计