RDS性能下降 - 覆盤 - Honeycomb數據庫
原文: https://www.honeycomb.io/blog...
譯:祝坤榮
注:除非特別說明,全部時間都是UTC。緩存
5月3號週四, 從00:39:08 UTC(週三 17:39 PDT)咱們經歷了一次Honeycomb服務的大約24分鐘的完全停機。大部分服務恢復時間是2018-05-03 01:02:49,全部面向客戶的服務恢復是在01:07:00。服務器
咱們對此次停機影響的每個客戶都十分抱歉。咱們對於數據的管理十分認真,並經過對系統的多項改進措施來確保將來這類的停機事件不會形成數據丟失,並確保咱們在相似的失敗中能夠更快的恢復。微信
過後看,故障鏈只有4點連通:網絡
恢復部分很快:post
咱們如何獲得答案的故事是一個如何使用Honeycomb來debug生產系統的有趣的例子。性能
在以後次日早上咱們的覆盤會議上,兩個理論擺在桌上:spa
咱們擔憂一些bug隱藏在咱們的應用裏(或咱們使用的其中一個Go庫)致使咱們的應用在不能鏈接數據庫時關機,這樣在一樣狀況再發生時又會致使同樣的停機故障。
每一個人都贊成這很像是下層數據庫的問題(存儲,CPU或鏈接)是根因,但咱們也贊成若是咱們以抱怨網絡的方式忽略一個潛在應用級的bug會更有危險。.net
做爲開發者的責任:這可能不是數據庫,而多是你的代碼問題。scala
爲了下降風險,咱們決定在受控環境來重現Error 1040場景並觀察系統表現。在咱們的實驗集羣上重現鏈接池溢出清楚的代表了鏈接滿確實會影響應用並致使定時任務失敗,它不會致使失控的CPU或延遲升高。
咱們如今有兩個數據集:生產的停機和實驗用的。因爲咱們使用Honeycomb來觀察Honeycomb,因此在這個例子對比A和B很容易
實驗生產停機
左邊,實驗集羣從12:30到13:23(除了一些失敗的定時任務很難看出證據)運行,而在右邊,生產的停機很清楚地顯示着。實驗有個空結果:咱們沒有發現 Error 1040致使了停機。看起來像是系統的一些底層問題致使的。
有了這個信息,咱們須要在生產數據上挖掘的更深刻了。因爲Honeycomb數據集是高保真的(咱們不作任何聚合或預先的計算),能夠將數據調整到每秒級別並調整數據來抽取模式。這裏是從rdslogs裏記錄的性能數據。
有15秒沒有活動,而後有一批query_time值達到了15秒的完成動做,看起來很明顯。在結束時的性能異常也有一個有意思的熱力圖模式:
歸納下,數據展現了高於23分鐘的低吞吐,高延遲行爲,並持續了少於30秒切換區域,以前是正常的高吞吐,低延遲,尖峯應用驅動的行爲,接着是大量的追趕事件,最後切換到正常的高吞吐模式。
因爲這不是一個全面的根因分析,但對於咱們明確問題在數據庫系統而不是咱們的應用代碼已經夠了;咱們的應用看起來運行正常。咱們以後再SQL的normalized_query字符串上驗證了咱們的代碼在恢復過程當中工做符合預期。
獲得這些信息後咱們從新調查了咱們的RDS配置並確認
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
本文來自微信公衆號「麥芽麪包,id「darkjune_think」轉載請註明。交流Email: zhukunrong@yeah.net