天天看點

在這個大促的日子聊一聊我的大促經曆

http://blog.cyeam.com/ctalk/2018/11/11/1111?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io

4個618,3個雙十一的經曆寫出來分享。
  • 壓測
  • 性能
  • 禁止讀庫、禁止跨機房調用
  • 監控
  • 服務降級
  • 兜底
  • 事故
  • 值班
  • 最後

之前在某東待了3年半,經曆了4個618,3個雙十一。之前所在的團隊是京東PC端三級清單頁,關于我們項目的架構介紹,可以參考這篇文章。每年兩次大促,每年也需要為這兩次大促進行長達一個月的準備。

壓測不光是要大促的時候壓,平時每個月都會壓。每個月壓單機,壓的連結是線上抓取的真實通路連結,我們線下找一台機器。壓測單機會根據不同的并發進行壓,一般從5并發開始,逐漸增加,直到TP99下降到不可接受為止。每次壓測都會和之前的進行對比,如果發現性能下降,需要定位原因和優化。

大促壓測每年集中在5月和10月,會在夜裡進行。整個項目組的所有機器(或者一個機房的所有機器)進行壓測,從入口開始壓。大促前的壓測标準是之前大促峰值的流量,能夠能扛得住之前峰值的倍數,能達标就行,不能的話需要優化或者加機器(主要還是加機器)。

全鍊路加測。這個是最近開始搞的,全公司的同一個夜裡一起加班壓。這個會模拟當時的實時流量,并不會像單獨壓測的時候那麼狠。

對于性能最重要的名額還是TP99,公司對性能其實有不成文的規定,TP99要小于200ms。如果大于這個值,使用者會明顯覺得卡頓。

線上隻讀服務,比如我們清單服務,禁止直連資料庫。使用者的任何操作都不能發生資料庫操作。平時我們經常會寫這種接口:取緩存讀資料,沒有的話去讀庫,然後把資料設定到緩存裡。這種方案隻适用于小流量的情況,一旦資料庫來個慢查詢或者資料量變大,所有接口都會挂,所有哦。這也算是雪崩的一種吧。

跨機房調用一個是慢,一個是這樣的話就失去了雙活的意義了。不過我們的降級方案裡有跨機房方案,不過正常方案裡要禁止。

監控非常重要。程式接口和關鍵子產品都需要加監控,包括性能和流量監控,報警門檻值也需要調整成一個合理的值。發送異常問題需要能立刻報警。

除了接口監控,還需要有執行個體監控,防止機器或者服務挂了自己沒有感覺影響到了使用者。一般我會選擇監聽端口擷取發起一個HTTP請求來檢測存活。之前就遇到一個問題,重新開機nginx失敗了,沒有設定報警,導緻重新整理頁面會偶爾跳錯誤頁,害得我會滾代碼第二天才重新上。

還有一種監控是針對頁面的,定時調用指定頁面,并渲染頁面,渲染完成後通過抓取頁面上的HTML資訊檢測業務是否正确。回歸測試中非常有用。

依賴的子產品有時候會發生異常,比如Redis,每過幾個月就會來一次,一般原因是某個分片過大,分片過大性能會下降。還有一些情況,比如硬體維修,這個時候需要摘機器等。

方案有很多,比如雙機房,雙叢集,多組Redis等。當時我們設計了十幾套降級方案,盡量把所有的降級操作都壓縮到最小。

上面說了,nginx出錯會跳錯誤頁,而不是nginx的預設錯誤頁。而我們的要求是三級清單頁能根據每個類目跳兜底頁面。也就是說,兜底的時候使用者有可能并不會發現我們兜底了。這樣可以保證在後端服務發生任何異常的時候都能給使用者一個友好的頁面。

對于一個電商而且是上市技術公司來說,兜底是非常重要的,它會影響到公司的股價。如果發生時間很長的故障,而且又引發一些輿論效應的話,損失的就不是那些訂單了,而是市值。分享一個真實的事情:有一次我的接口出了問題,沒有傳回正常的資料,前端接口沒有相容,在使用者端看到了nginx的404頁面,當時要求第一個要修複的是兜底方案。

寫到這裡,線上緊急問題的處理方法已經有了,自動的有兜底,手動的是報警+降級操作。可以這麼說,這幾個部分是影響績效的最重要因素。線上問題不管多麼嚴重,衡量級别的最重要因素是影響時間,處理得快,比如十五分鐘内,問題不算大;如果超過半個小時,事故級别就會往上走了。

處理事故最重要的,還是要快。自己操作時需要權衡,如何快速恢複。處理問題最差的方案是改代碼。如果實在找不到問題,可以考慮強制更改資料庫或者緩存來解決。緊急問題處理的快慢主要還是看平時項目預留了多少調試的方案和快速定位問題的輔助工具。真發生緊急問題一般會比較着急,沒辦法集中注意力,是以前面提到的調試工具或者降級方案就顯得很重要了。

進入6月份和11月份就要封版了,那個時候也沒啥需求了,主要就是值班。一般1号是秒殺日,那天淩晨需要值班。移動端的流量很大,移動是未來啊。有時候每個夜裡都得留人值班,不是每次都這樣,這個主要是上司決定。17和10号夜裡一定得留在公司值班,夜裡也不能回家,2點流量下來後需要到公司附近的酒店休息,早上8點前回來,因為早上8點有秒殺。

連夜值班我還是比較喜歡的,可以換調休,第二天還可以休息一天。一個組的會經常大促一起開房,大家的基情是其它公司比不了的。

每次值班上司都會給買吃的,各種吃的,還有飲料,我最喜歡的還是那個豚骨湯泡面,在每個值班的夜裡,泡一碗,周圍都是這個味,最後大家都開始吃這個了。

一般17号或10的時候就需要進值班室了,值班室挺擠的,大家在那裡呆一宿,全是味。在那邊有基礎服務的人,出了問題友善解決。0點的量真的很大,那個時候大家都很緊張。

繼續閱讀