如何承受系統增加的負載:我們談論黑色星期五的大規模準備

嘿哈布爾!

2017年黑色星期五期間,負載幾乎增加了一倍半,我們的伺服器已經達到極限。 一年來,客戶數量大幅成長,很明顯,如果沒有仔細的前期準備,該平台可能根本無法承受 2018 年的負載。

我們設定了盡可能雄心勃勃的目標:我們希望為任何(即使是最強大的)活動激增做好充分準備,並開始全年提前啟動新產能。

我們的技術長 Andrey Chizh (奇茲·安德烈)講述了我們如何為 2018 年黑色星期五做準備,我們採取了哪些措施來避免跌倒,當然還有精心準備的結果。

如何承受系統增加的負載:我們談論黑色星期五的大規模準備

今天我想談談 2018 年黑色星期五的準備工作。為什麼現在大部分主要促銷活動都已經過去了呢? 我們在大型活動前一年左右就開始準備,透過反覆試驗找到了最佳解決方案。 我們建議您提前做好高溫季節的防範工作,以防止在最不合時宜的時刻出現詐騙。
這些材料對於每個想要從此類股票中獲得最大利潤的人來說都是有用的,因為問題的技術面並不遜於行銷方面。

大拍賣的流量特點

與普遍看法相反,黑色星期五不僅僅是一年中的一天,而是幾乎整整一周:第一批折扣優惠在促銷前 7-8 天到達。 網站流量在整個星期開始平穩增長,週五達到峰值,週六急劇下降至商店的正常水平。

如何承受系統增加的負載:我們談論黑色星期五的大規模準備

考慮這一點很重要:線上商店對系統中的任何「減速」變得特別敏感。 此外,我們的電子郵件通訊系列的提交數量也顯著增加。

對我們來說,安全地度過黑色星期五具有戰略意義,因為… 網站和商店簡訊最重要的功能取決於平台的運營,即:

  • 追蹤並發布產品推薦,
  • 相關資料的發布(例如,推薦區塊的設計圖像,如箭頭、徽標、圖標和其他視覺元素),
  • 提供所需尺寸的產品圖像(出於這些目的,我們有「ImageResizer」——一個從商店伺服器下載圖像,將其壓縮到所需尺寸的子系統,並透過快取伺服器為每個產品生成所需尺寸的圖像每個推薦區塊)。

事實上,在 2019 年黑色星期五期間,服務負載增加了 40%,即Retail Rocket 系統在線上商店網站上追蹤和處理的事件數量已從每秒 5 千個請求增加到 8 千個請求。 由於我們正在為更嚴重的負載做準備,所以我們很容易就度過了這樣的激增。

如何承受系統增加的負載:我們談論黑色星期五的大規模準備

一般準備

黑色星期五對於所有零售業和電子商務來說都是一個繁忙的時期。 此時的用戶數量及其活躍度正在顯著增長,因此我們一如既往地為這個繁忙的時期做好了充分的準備。 讓我們在這裡補充一點,我們不僅在俄羅斯而且在歐洲都有許多線上商店,那裡的興奮程度要高得多,而且我們的熱情程度比巴西系列還要差。 需要做什麼才能為增加的負荷做好充分準備?

使用伺服器

首先,有必要找出我們到底需要什麼來增加伺服器的能力。 早在 10 月份,我們就開始專門為黑色星期五訂購新伺服器 - 我們總共添加了 XNUMX 台機器。 到XNUMX月,他們已全面投入戰鬥。

同時,一些建置機器被重新安裝以用作應用程式伺服器。 我們立即準備好讓它們使用不同的功能:既用於發佈建議,又用於 ImageResizer 服務,因此,根據負載類型,它們中的每一個都可以用於其中一個角色。 在正常模式下,Application和ImageResizer伺服器具有明確定義的功能:前者發布推薦,後者提供線上購物網站上的信件和推薦區塊的圖像。 為了準備黑色星期五,決定製作所有雙用途伺服器,以便根據下載類型平衡它們之間的流量。

然後我們為 Kafka (Apache Kafka) 增加了兩台大型伺服器,並獲得了一個由 5 台強大機器組成的叢集。 不幸的是,一切並沒有我們想像的那麼順利:在數據同步的過程中,兩台新機器佔據了整個網路通道的寬度,我們不得不緊急想辦法如何快速、安全地進行添加過程。整個基礎設施。 為了解決這個問題,我們的管理員不得不勇敢地犧牲他們的周末。

處理數據

除了伺服器之外,我們還決定優化文件以減輕負載,對我們來說,重要的一步是靜態文件的翻譯。 先前託管在伺服器上的所有靜態檔案已移至 S3 + Cloudfront。 我們長期以來一直想這樣做,因為伺服器上的負載接近極限值,現在出現了一個很好的機會。

在黑色星期五前一周,我們將圖片快取時間增加到 3 天,這樣如果 ImageResizer 崩潰了,就會從 CDN 檢索先前快取的圖片。 它還減少了伺服器的負載,因為影像儲存的時間越長,我們需要花費資源來調整大小的頻率就越少。

最後但並非最不重要的一點是:黑色星期五前 5 天,宣布暫停任何新功能的部署以及任何基礎設施工作 - 所有註意力都集中在應對增加的負載上。

應對困難情況的計劃

無論準備工作的品質有多高,fakaps 總是有可能的。 針對可能出現的危急情況,我們制定了 3 個應對計畫:

  • 減少負載,
  • 禁用某些服務,
  • 完全關閉服務。

計劃A:減少負載。 如果由於負載激增,我們的伺服器超出了可接受的回應時間,則應該被啟動。 在這種情況下,我們準備了逐步減少負載的機制,透過將部分流量切換到亞馬遜伺服器,亞馬遜伺服器會簡單地以「200 OK」回應所有請求並給予空響應。 我們知道這是服務品質的下降,但服務根本不起作用或不顯示大約 10% 流量的建議之間的選擇是顯而易見的。

B 方案:停用服務。 隱含部分服務降級。 例如,降低個人建議的運算速度,以減輕一些資料庫和溝通管道的負擔。 在正常模式下,建議是即時計算的,為每個訪客創建不同版本的線上商店,但在負載增加的情況下,降低速度可以讓其他核心服務繼續工作。

計劃C:以防世界末日。 如果出現完整的系統故障,我們已經準備了一個計劃,使我們能夠安全地與客戶斷開連接。 商店買家將不再看到推薦;線上商店的表現不會受到任何影響。 為此,我們必須重置整合文件,以便新用戶停止與服務互動。 也就是說,我們將停用我們的主要追蹤程式碼,該服務將停止收集資料和計算推薦,並且用戶只會看到一個沒有推薦區塊的頁面。 對於所有之前收到整合檔案的人,我們提供了將 DNS 記錄切換到 Amazon 和 200 OK 存根的選項。

結果

即使不需要使用額外的建置機器,我們也能處理整個負載。 由於提前做好了準備,我們不需要任何已製定的應對計劃。 但所做的所有工作都是寶貴的經驗,將幫助我們應對最意想不到的巨大流量湧入。
與 2017 年相比,黑色星期五期間服務負載增加了 40%,線上商店的用戶數量增加了 60%。 所有的困難和錯誤都發生在準備期間,這使我們和我們的客戶避免了不可預見的情況。

你如何應對黑色星期五? 您如何為關鍵負載做好準備?

來源: www.habr.com

添加評論