【译】AWS RDS性能降低 - 复盘 - Honeycomb

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: >原文:https://www.honeycomb.io/blog/rds-performance-degradation-postmortem/ >译:时序 # 概要 注:除非特别说明,所有时间都是UTC。 5月3号周四, 从00:39:08 UTC(周三 17:39 PDT)我们经历了一次Honeycomb服务的大约24分钟的彻底停机。大部分服务恢复时间是2018-05

原文:https://www.honeycomb.io/blog/rds-performance-degradation-postmortem/
译:时序

概要

注:除非特别说明,所有时间都是UTC。

5月3号周四, 从00:39:08 UTC(周三 17:39 PDT)我们经历了一次Honeycomb服务的大约24分钟的彻底停机。大部分服务恢复时间是2018-05-03 01:02:49,所有面向客户的服务恢复是在01:07:00。

影响

  • 在停机期间,客户不能登录或查看Honeycomb服务的图表。
  • 停机期间发送给Honeycomb API的事件被大量拒绝;大约86%的API不能服务,而且大约81%的应该已经提交的事件在停机期间没有被记录。(百分比的差距是由于一个单独的API可以处理不同的事件并且停机没有平均影响到所有数据集)
  • 由于Honeycomb API没有报告成功,一些仍存储在客户服务上的事件在Honeycomb API恢复正常后又被重新提交。
  • 停机期间大约有15%的事件成功保存

我们对这次停机影响的每一个客户都十分抱歉。我们对于数据的管理十分认真,并通过对系统的多项改进措施来确保未来这类的停机事件不会造成数据丢失,并确保我们在类似的失败中可以更快的恢复。

发生了什么?

事后看,故障链只有4点连通:

  1. 我们产品使用的RDS MySQL数据库实例经历了一次突然的和大规模的性能减低; P95(query_time)从11毫秒变成>1000毫秒,同时写操作吞吐在20秒内从 780/秒降到 5/秒。
  2. RDS没有识别到故障,所以 Mutil-AZ feature没有激活故障转移。
  3. 由于增加的query_time导致的延迟, Go的MySQL客户端连接池被等待慢查询结果的连接填满了并且作为补偿又打开了更多的连接。
  4. MySQL服务器的max_connections设置达到了上限,导致定时任务和新启动的后台进程不能连接到数据库并导致“Error 1040:Too many connections”的日志信息。

恢复部分很快:

  1. RDS数据库的延迟和吞吐突然出现改善;在20秒内P95(query_time)写从>600ms 掉到 <200ms, 同时总吞吐从<500OPS 变成>2500OPS。
  2. 排队的事件快速完成,数据库在70秒内的OPS大于3000, 并在回到正常状态时变成: 300-500OPS,<10ms 写。

我们如何得到答案的故事是一个如何使用Honeycomb来debug生产系统的有趣的例子。

根因分析

在之后第二天早上我们的复盘会议上,两个理论摆在桌上:

  1. 大量的连接数导致停机,并引起了数据库运行缓慢,或
  2. 数据库由于一些原因运行缓慢,导致大量的连接数。

我们担心一些bug隐藏在我们的应用里(或我们使用的其中一个Go库)导致我们的应用在不能连接数据库时关机,这样在同样情况再发生时又会导致一样的停机故障。
每个人都同意这很像是下层数据库的问题(存储,CPU或连接)是根因,但我们也同意如果我们以抱怨网络的方式忽略一个潜在应用级的bug会更有危险。

作为开发者的责任:这可能不是数据库,而可能是你的代码问题。

为了降低风险,我们决定在受控环境来重现Error 1040场景并观察系统表现。在我们的实验集群上重现连接池溢出清楚的表明了连接满确实会影响应用并导致定时任务失败,它不会导致失控的CPU或延迟升高。

我们现在有两个数据集:生产的停机和实验用的。由于我们使用Honeycomb来观察Honeycomb,所以在这个例子对比A和B很容易

实验生产停机
image.png
image.png

左边,实验集群从12:30到13:23(除了一些失败的定时任务很难看出证据)运行,而在右边,生产的停机很清楚地显示着。实验有个空结果:我们没有发现 Error 1040导致了停机。看起来像是系统的一些底层问题导致的。

有了这个信息,我们需要在生产数据上挖掘的更深入了。由于Honeycomb数据集是高保真的(我们不做任何聚合或预先的计算),可以将数据调整到每秒级别并调整数据来抽取模式。这里是从rdslogs里记录的性能数据。
image.png
有15秒没有活动,然后有一批query_time值达到了15秒的完成动作,看起来很明显。在结束时的性能异常也有一个有意思的热力图模式:
image.png
概括下,数据展示了高于23分钟的低吞吐,高延迟行为,并持续了少于30秒切换区域,之前是正常的高吞吐,低延迟,尖峰应用驱动的行为,接着是大量的追赶事件,最后切换到正常的高吞吐模式。

由于这不是一个全面的根因分析,但对于我们明确问题在数据库系统而不是我们的应用代码已经够了;我们的应用看起来运行正常。我们之后再SQL的normalized_query字符串上验证了我们的代码在恢复过程中工作符合预期。

得到这些信息后我们重新调查了我们的RDS配置并确认

  • Multi-AZ是打开的。
  • 实例监视面板没有显示任何健康事件。
  • AWS文档指出Multi-AZ不会考虑性能作为健康检查的内容

经验

  • 受管理的数据库很好,除非他们没托管。
  • 我们会优先考虑在“game day”运行我们的实验RDS做故障转移来重新验证在硬件故障时我们对于我们系统运行的理解。虽然我们不认为RDS会有很多硬件故障,但当我们需要处理RDS AZ故障转移时我们需要一个准备好的手册来执行。
  • 我们在改进我们的管道来保证在基础设施不能连接到数据库时接受的用户事件我们可以缓存它们而不是失败。硬件问题发生,这就是生活;丢失数据不需要发生。

时间线 (2018-05-03 UTC)

00:39 – outage starts

00:40 – first alert

00:42 – engineers start investigation

00:50 – escalation, multiple investigators looking at several potential avenues

00:55 – status.honeycomb.io updated to keep our customers informed

00:58 – first engineering interventions to attempt to heal system, minimal impact

01:03 – outage resolution starts

01:04:23 – resolution completes, system stabilized

01:15 – engineers conclude that outage is resolved, update status.honeycomb.io

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
安全 关系型数据库 MySQL
mysql安全性能
mysql安全性能
37 10
|
3月前
|
缓存 关系型数据库 MySQL
如何优化MySQL性能
对于使用MySQL数据库的开发人员来说,优化数据库性能是一个非常重要的任务。本文将介绍一些优化MySQL性能的方法,包括索引优化、查询优化、硬件升级等方面,帮助开发人员提高应用程序的性能和响应速度。
113 0
|
6月前
|
缓存 关系型数据库 MySQL
MySQL索引原理与实践:优化数据库性能的有效方法3.0
全文索引,主键索引,唯一索引,覆盖索引,组合索引,普通索引,外键索引,空间索引,前缀索引,哈希索引等 在接下来MySQL索引原理与实践3.0中我会重点介绍mysql索引优化等一些方面相关的理论与实践,有小伙伴是从3.0开始看的,可以优先看一下1.0/2.0 http://t.csdnimg.cn/hHn9A
75 0
|
3月前
|
关系型数据库 MySQL Serverless
阿里云云原生数据库 PolarDB MySQL Serverless:卓越的性能与无与伦比的弹性
阿里云原生数据库 PolarDB MySQL Serverless 拥有卓越性能和无与伦比的弹性。通过实验体验,深入了解其基本管理和配置、智能弹性伸缩特性和全局一致性特性。实验包括主节点和只读节点的弹性压测以及全局一致性测试,旨在亲身体验 PolarDB 的强大性能。通过实验,可以更好地在实际业务场景中应用 PolarDB,并根据需求进行性能优化和调整。
679 2
|
6月前
|
监控 关系型数据库 MySQL
企业实战(8)CentOS 6.8安装Zabbix-agent 5.0监控主机性能与Mysql数据库
企业实战(8)CentOS 6.8安装Zabbix-agent 5.0监控主机性能与Mysql数据库
|
16天前
|
存储 关系型数据库 MySQL
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
|
16天前
|
缓存 关系型数据库 MySQL
MySQL查询优化:提速查询效率的13大秘籍(合理使用索引合并、优化配置参数、使用分区优化性能、避免不必要的排序和group by操作)(下)
MySQL查询优化:提速查询效率的13大秘籍(合理使用索引合并、优化配置参数、使用分区优化性能、避免不必要的排序和group by操作)(下)
|
2月前
|
关系型数据库 MySQL 数据库
RDS数据库测评:性能超出预期,双11优惠还在继续
RDS数据库测评:性能超出预期,双11优惠还在继续
30 0
|
3月前
|
SQL 关系型数据库 MySQL
MySQL数据库进阶实战:优化性能、提高安全性和实现高可用性
MySQL数据库进阶实战:优化性能、提高安全性和实现高可用性
102 0
|
3月前
|
SQL 关系型数据库 MySQL
Mysql高可用,索引,事务与调优:提高数据库性能的关键技术
在当今互联网时代,高可用性、稳定性和性能是数据库的三大关键要素。本文将深入探讨Mysql高可用、索引、事务和调优等方面的技术,为读者提供实用的解决方案和经验。
24 0