疫情期間資料庫壓力激增的處理經驗 釘釘

2021-10-23 04:20:39 字數 2192 閱讀 1566

挑戰:

1、 系統所需要的容量是多少,無法預估

第一次容量評估,大家給2月3號定了個目標是日常峰值的3倍,隨著2月10號開課高峰的到來,又將2月10號的目標調整為10倍,之後又因為2月17號開學季的到來,再次將目標調整為40倍。所以總容量相比日常峰值,翻了40倍!

2 、時間緊,擴容需求眾多,資源不足

疫情流量的猛增,給系統帶來的衝擊不亞於每年的雙11。電商會花半年時間準備雙11,但這次留給我們的時間只能以小時來計。另一方面,出於成本的考慮,資源池中基本沒有空餘的機器,現有的資源部署密度也比較高,如何騰挪資源在較短的時間內為接近20個核心集群進行擴容是乙個很大的問題。

3、 極限場景下如何保障系統穩定性與使用者體驗

在各種因素制約導致集群無法擴容且系統已經達到瓶頸時我們能怎麼辦?有哪些應急手段能用? 是否存在乙個平衡點,將對使用者的影響降到最低?

應對措施

1 、人員合理化安排

1)資料庫團隊成立疫情期間業務保障小組

小組成員包含了資料庫團隊dba/資料庫核心/corona/tddl/dts/精衛/nosql各產品線同學。

根據業務線進行分工,每個dba跟進乙個業務線,參與高峰期的保障,及時播報線上系統狀況與水位,讓重保決策人員及時了解系統的狀況。對線上出現的問題緊急處理,保證問題在短時間內得到修復。對不合理的業務場景進行優化,保證已知問題只出現一次。參與系統的壓測,發現潛在風險點及時修正,對系統容量不夠的系統進行及時擴容,在資源滿足的情況下讓資料庫在高峰來臨之前已經具備足夠的容量。

2)資料庫團隊與穩定性團隊緊密合作

穩定性團隊主動站出來,幫dba分擔了大量的的壓力,他們將資料庫的擴容需求根據業務的重要性進行優先順序劃分,統一擴容需求,dba根據優先順序順序,結合業務的目標容量進行判斷,在有限的資源下有條不紊的進行擴容,保證資源優先用在刀刃上,大大提公升了擴容效率。

2、 資源緊急協調

為了保證資源不成為系統擴容的阻力,dba和雲資源團隊進行合理規劃,短期內通過借用集團上雲的機器,同時縮容其他bu資料庫集群,湊出400臺左右的機器,保證高優先順序系統的擴容需求,同時協調雲資源進行搬遷,在短短幾天內搬遷了300多台機器到資源池,保證了所有資料庫的擴容需求。

3 、應急與優化在系統高峰來臨之前,資料庫團隊內部已經準備好緊急預案:

4 、db容量預估及效能分析

通過經驗並和業務方一起進行全鏈路壓測進行db容量(集群能支撐多少讀寫)的預估,這種方式有以下幾個問題:

解決這個痛點問題的方法大家其實很容易想到–只要把線上的業務流量全部採集下來回放一遍即可,但實現起來是非常複雜的。我們真正需要的其實是針對db的一種通用的單鏈路壓測能力,並不依賴上游業務,db層可以自己進行流量的生成,放大或縮小,甚至將事務比例更改後再次壓測的能力。

成果及思考

1、人員組織:

首先在人員組織上,業務和開發要對突發流量具備敏銳的嗅覺,及時發現提早準備,由業務方穩定性負責人成立應急小組,梳理依賴業務以及對應後台系統,將各業務線owner和後台資料庫產品owner納入應急小組。由應急小組統一容量規劃、人力配備以及資源協調,實現業務方/後台產品團隊/資源團隊聯動。

2、技術架構:

在技術架構上,一方面是要使用具有足夠彈性的資料庫產品,保證使用的資料庫產品有自由擴容和縮容的能力,既要保證流量來了之後能擴上去,也要保證日常流量時可以縮下來。管控等各個運維元件需要在實現自動化運維的同時,對於很多關鍵操作留有應急開關,確保在一些極端場景下,可以較方便的從自動駕駛切換成手動模式,確保任務平穩高效的執行下去。

3、應急手段:

在面對系統瓶勁時,在業務上和資料庫產品上都要提前做好預案,在業務上要有降級和限流功能,在系統無法承受壓力時,可以降級一部分非核心功能,限制一些次核心功能來保核心業務的正常執行。在資料庫產品上需要具有在不擴容的情況下,通過一些優化手段瞬間提公升資料庫吞吐的能力,更重要的是這些能力需要有較好的相容性,在不同的部署環境,不同的db架構下都具有相應的工具和預案。

另一方面,我們需要有評估和檢測預案效果的手段,將能力透傳給業務的owner,在大促之前,自動進行大量的db單鏈路壓測,評估系統水位,發現效能瓶頸,優化db引數,驗證預案效果。

大學期間資料庫體驗

資料庫的種類多種多樣,我們常見到的有oracle mysql sql access等,而對我來說使用最為熟悉的還是sql2000和access,尤其大學期間我還參加了全國計算機等級考試二級access的考試。在大二的下學期剛學了資料庫這門課,對這門課的第一印象是書本蠻厚的,感覺學起來應該會很難很累。...

降低資料庫壓力的方法

1.合理增加索引 表索引可以加快對錶中資料的檢索速度,但是會降低表中資料的更新速度,所以增加表的索引一定控制在合理範圍內,過多的索引不但不會降低資料庫的壓力,反而可能增大資料庫的壓力,表索引的建立一般要從具體業務場景出發,對於讀多寫少的場景,可以通過適當的增加索引來提高效率,對錶的那些列建立索引?建...

面經 資料庫的索引(MySQL)

索引是資料庫中對資料查詢 檢索的一種優化方案。主要有hash索引和b tree兩種資料結構。mysql預設的innodb引擎中,預設的是b tree。hash索引底層是hash表,hash表以一種鍵值對儲存資料的結構 多個資料在儲存關係上沒有任何順序關係,在區間查詢時候無法直接通過索引查詢,就需要進...