文档章节

因资源用尽导致服务宕机

北风刮的不认真了
 北风刮的不认真了
发布于 01/23 13:11
字数 803
阅读 20
收藏 0

1. 事故的发生

服务调用场景和发生的事件如下图所示,红色表示服务不可用. 第一个事件 第二个事件

服务A服务B都是内部服务,服务C_*为不同运营商提供的服务,遵循一样的协议。
某一天,突然发现所有服务A调用服务B的请求都被熔断了。去服务器上看下,发现服务B依然运行。日志不再打印,最近的日志都是调用服务C_3请求超时。尝试了下重启,2,3分钟后服务又处于不可用状态。

1.1 查找原因

第一时间想到了发生了死锁,立刻使用jstack查看一下,(忘记截图保存资料了)。
发现是RestTemplate里有线程处于wait状态,联想到爆出的服务C_3服务处于宕机状态,立刻想到了httpClient里配置的最大连接被占满,而且没有配置当连接数占满后的等待超时时间,导致其他请求处于一直等待状态!而正在使用的连接,因为请求服务C_3超时(当时配置了超时时间10s)....
当然故障的主要原因不仅于此,还有重试机制!当请求失败后,会间隔5s后重试,所以服务B的不可用状态不仅是因为新的请求而阻塞,主要原因是大量的重试。

1.2 临时的解决方案

  1. 立刻清除掉所有关于服务C_3的重试任务,清除掉后,服务B恢复正常。
  2. 缩短请求超时时间。因为协议约定接口是异步通知的方式,所以超时时间不应过长

2. 应该做的

调用外部的服务,我们是通过同一个RestTemplate实例做的,这是个错误

2.1 资源应该是隔离的

就像船舱一样,底部的船舱都会分隔成写小舱室,每个小舱室都可以做到完全隔离,以此确保某个舱室漏水时保证整个船是安全的。
同理,针对多个服务C_*,他们之间的资源应该是隔离的,都有不同的RestTemplate实例

2.2 快速的失败机制

如果单个服务C_*宕机后,在人工未介入前,应该在一定时间内,再请求该服务应该是快速失败,不阻塞。

3. 总结

其实这个教训主要来自于资源的滥用和当服务出现故障后没有熔断机制。

服务_c*属于外部服务,并没有按照spring cloud的开发方式去做,现在看来,哪怕不按照spring cloud的去做,也要参考一些它的机制。
防雪崩利器:熔断器 Hystrix 的原理与使用

© 著作权归作者所有

共有 人打赏支持
北风刮的不认真了

北风刮的不认真了

粉丝 36
博文 53
码字总数 27105
作品 1
朝阳
后端工程师
私信 提问
pacemaker+corosync实现资源调度

场景一:定义web资源实现web集群的高可用! 本次环境: Centos6系统 2台,各安装了http服务。 Pacemaker corosync服务已经安装 1、 查看当前环境 crm(live)configure# shownode erick.com a...

shy润物无声
2016/07/07
0
0
基于Web应用的性能分析及优化案例

一、 基于动态内容为主的网站优化案例 1.网站运行环境说明 硬件环境:1台IBM x3850服务器, 单个双核Xeon 3.0G CPU,2GB内存,3块72GB SCSI磁盘。 操作系统:CentOS5.4。 网站架构:Web应用是...

Amamatthew
2014/08/19
0
0
Java并发编程与高并发解决方案(一)-并发与高并发基本概念

并发: 多个线程操作相同的资源,保证线程安全,合理利用资源 高并发: 服务能同时处理很多请求(如12306的抢票,天猫双十一的秒杀活动,这会导致系统在短时间内执行大量的操作,如对资源的请...

monroeCode
2018/03/27
0
0
由重启引起的Oracle RAC节点宕机分析及追根溯源

作者介绍 某省份的电信业务系统由于业务量较大,按地市划分部署在4套配置相同的RAC上,相同主机版本,相同的CRS和数据库版本。该系统已正常运行3年多,其间也有重启主机等正常维护操作。从4...

裴征峰
2016/12/26
0
0
heartbeat之part1

heartbeat keepalive 高可用软件 heart beat作用:通过heartbear可以从资源(ip及程序服务)一台已经故障的计 算机快速转移到另一台正常运用的计 算机 heartbeat工作原理 通过修改heart bea...

泡海椒
2016/01/09
38
0

没有更多内容

加载失败,请刷新页面

加载更多

VMware下centos7.x 用yum快速搭建LAMP平台

实验环境: [root@nmserver-7 html]# cat /etc/redhat-release CentOS release 7.3.1611 (AltArch) [root@nmserver-7 html]# uname -aLinux nmserver-7.test.com 3.10.0-514.el7.cent......

皇冠小丑
58分钟前
1
0
搜索引擎(Solr-索引详解)

时间字段类型特别说明 Solr中提供的时间字段类型( DatePointField, DateRangeField,废除的TrieDateField )是以时间毫秒数来存储时间的。 要求字段值以ISO-8601标准格式来表示时间:YYYY-MM...

这很耳东先生
今天
6
0
Java成神之路

1、基础篇 01、面向对象 → 什么是面向对象 面向对象、面向过程 面向对象的三大基本特征和五大基本原则 → 平台无关性 Java 如何实现的平台无关 JVM 还支持哪些语言(Kotlin、Groovy、JRuby...

asdf08442a
今天
3
0
dubbo源码分析-服务导出

简介 dubbo框架spring Schema扩展机制与Spring集成,在spring初始化时候加载dubbo的配置类。 dubbo服务导出的入口类是ServiceBean的onApplicationEvent方法 ServiceBean的继承关系如下 publ...

王桥修道院副院长
今天
2
0
QQ音乐的动效歌词是如何实践的?

本文由云+社区发表 作者:QQ音乐技术团队 一、 背景 1. 现状 歌词浏览已经成为音乐app的标配,展示和动画效果也基本上大同小异,主要是单行的逐字染色的卡拉OK效果和多行的滚动效果。当然,我...

腾讯云加社区
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部