《京東大促備戰思路2.0大揭秘》要點:
本文介紹了京東大促備戰思路2.0大揭秘,希望對您有用。如果有疑問,可以聯系我們。
文經授權轉自公眾號:開濤的博客(kaitao-1234567)
林世洪
畢業于北京交通大學,2011年加入京東,先后負責京東訂單履約體系和零售平臺架構工作,連續兩屆架構委員會成員,此期間主導和參與了京東研發若干規范的制定.
著力推動電商核心系統架構升級,總結形成了大型促銷備戰方法論,保障了電商主流程系統的穩定性,降低了整體系統建設成本.個人技術方面更多關注根據業務特點和技術要求對系統進行可運營化改造和治理.
前言
提到備戰,實際上不一定要到大型促銷時,工作應該做到平時.京東已發展到了一個比較大的體量,無論是大促還是平時,都容不得出現大問題,我們的思路和方法是:積極預防、及時發現、快速處理,這正是本文前半部分要介紹的.但要做到這十二個字并不容易,本文后半部分會介紹背后的兩個要素:日漸成熟穩定的團隊、日趨完善的流程和規范.
下圖是對本文內容的描繪:
在預防措施上,需要遵循 PDCA 方法:
P階段:
1. 分析系統職責,確立系統備戰的首要業務目標;
2. 依據業務量評估,對系統處理能力要求進行評估,根據評估結果和系統運行狀況,找出系統瓶頸.*特別地,如果是大促備戰,則要先給大促時的業務量評估.
D階段:
3. 針對系統瓶頸,進行系統改造;
4. 梳理系統間的依賴關系,各系統之間達成 SLA,以保證整體性能指標.
C階段:
5. 對系統進行壓力測試,驗證處理能力,確保達標.特別地,如果是大促備戰,則可以考慮在線上進行跨系統軍演;
6. 特別地,如果是大促前夕,則要對系統進行全面體檢.
A階段:
7. 如果系統改造達不到評估要求,則需要修正方案.
每個系統都會有自己的邊界,各系統負責人應該分析清楚系統的使命和職責是什么,分清主次,這同時也是制定應急預案的最重要依據,舉例:
總體思路:先進行需求評估,然后進行系統評估,找出差距.
總體思路:
公司層面首先要給出一個業務量的初估,然后各個團隊可以根據此值來把總的業務量評估分解到自己的系統的吞吐量指標上,接下來就是方案設計的問題了,目標就是將吞吐量指標提高到評估的水平,同時其它性能指標仍能滿足業務要求.這樣兼顧了性能和成本.
吞吐能力評估:
吞吐能力,指的是單位時間內處理請求的數量限制,一般用tps來衡量,指的是每秒處理請求的數量.
前面提到過要把總的業務量評估分解到自己的系統的吞吐量指標,可以把系統看成一個黑桶,看這個桶上邊界輸入的量和下面輸出的量.
假設一個系統是客戶訂單處理系統,每一個訂單向它輸入2條處理請求,并向外界輸出4條信息,如果一天的訂單量是1000萬,則這個系統要每天接收2000萬個請求,輸出4000萬條信息.
對于直接面對客戶的系統,輸入的評估需要更多的維度(如促銷、推廣),但也有簡單的評估辦法,那把上一次大促作為參照,按業務量同比擴大.
當然,實際評估時,不能只看一天的業務量,還要看峰值,而且要高度重視峰值.前端系統的峰值評估需要考慮比較多的維度(如促銷方式和力度等),后端相對簡單,用于平均值乘以一個系數即可,這個系統可以根據系統以住大促時統計而來,如果是一個新系統,可以讓上游系統協助評估.
并不是所有系統都要承擔高峰值.如果一個業務處理流程比較長,則上游的系統可以平滑峰值,讓下游系統享受一個平滑得多的請求流,這樣可以大大減少系統的建設成本.
例如,在訂單處理流程中,OFC 扮演了這一個穩壓器的作用,OFC 把上游訂單和峰值進行了平滑.所以吞吐能力的評估也需要團隊合作.
吞吐量的提升,往往伴隨著容量提升,需要做好容量規劃,主要考慮的因素有:
有了上面這幾個數據,就比較好評估了.特別是針對4進行說明,有一些過程數據,處理完就不必要在主系統中存留了,所以在評估時不必考慮,但當出現高峰值,且系統處理無法及時處理時,可以積壓一部分數據慢慢處理.
吞吐量的提升,也往往伴隨著流量的提升,需要做好容量規劃,這時主要考慮峰值時流量即可,評估時可以按峰值吞吐量同比擴大.如果這個值比較大,應該和運維同事一起評估并尋求解決辦法.
響應速度,是衡量服務對請求響應時間的指標,一般用毫秒計量,通常用 tp999,tp99,tp90 這幾個指標,其中 tp999 指 99.9% 的服務請求的響應時間不會高于這個值.
提高響應速度,可以提高系統吞吐量.假設一個服務的響應時間為100ms,允許的并發數是500,則理論上這個服務的吞吐量上限為 5000(500*1000/100)tps;如果響應時間降低到50ms,則理論上的吞吐量上限會降為 10000tps.
但是提高響應速度會增加成本,一般說來可以采用類似下面的標準:
前端系統:
后端系統:
一般有如下方法:
上下游系統之間進行 SLA 確認,是非常有必要的,如果被依賴的系統達不到性能需求,則依賴方的系統100%達不到性要求.因為問題影響首先會在依賴方顯現,所以依賴方更有動力去推動這項工作,如果沒有達成 SLA,則需要承擔責任.當然被依賴方也有義務配合,如果有分歧,則需要協商一個可以接受的 SLA.
這一個步驟,需要及早進行,只要指標確定,就可以開展了.下面是一個樣例:
其中,”是否可降級”,指的是當服務不可用或者性能下降,影響了調用方的可用性和響應時間到一定程度時,可以不調用或者有限調用.如果可降級,應該還要有具體的降級措施和補償措施.
“超時”指服務調用方的超時設置,超過這個時間將認為本次調用無效,調用方可以重試.如果存在多級依賴關系,如 A 調用 B,B 調用 C,則超時設置應該是 A>B>C,否則可能引起 DDOS 攻擊效果.
關于如何進行架構升級,不是本文的重點,建議大家去參考架構委員會的架構白皮書,白皮書系統地介紹了架構的原則和方法,非常有指導意義.這里只強調下大促備戰最常用的內容,并且主要從應用角度來闡述.
在評估階段,我們強調過,最主要的系統改造目標是提高系統處理能力,對應的主要措施是:
第一,?硬件升級,使用配置更高的硬件.但是,有的情況下即使硬件配置上去了,但分配給應用本身的資源沒變,這樣處理能力沒有得到提升,資源利用率很低,這點尤其要注意.
第二,擴容.系統要擴容,首先要使系統具備水平擴展能力,應用的每一層都要能水平擴展,不能留有瓶頸.系統到了一定規模后,可以考慮以集群為單位進行擴容,每一個標配的集群的有定量處理能力.而且線上系統出現瓶頸時,可以擴容或者替換若干個集群,這樣簡單高效.數據訪問層的擴展能力尤其重要,從京東系統現狀上來看,這一層往往是瓶頸,而且瓶頸一旦出現,解決起來時間比較長,建議大家引入公司內部的 JDAL 等中間件來實現.
第三,將系統進行拆分,從而將負載分攤,同時也降低問題影響面.可以按自頂向下,自業務到技術的線路去考慮對系統進行拆分,首先看是不是可以從業務域上切分,然后再從功能的相互依賴關系上分析,將相互依賴緊密但與其它應用交互很少的功能作為一個子系統拆分出來.當然,對于有用戶界面的系統,出于客戶體驗的考慮,系統拆分后,要注意盡量保持UI的統一.
第四,提高響應速度.詳見保持響應速度一節.
第五,使用編程技巧.如串行變并行、單個處理變批量處理等.
大促備戰一般不會提出更高響應速度的要求,主要是能保持原來的響應速度,甚至允許有一定程度的下降.主要是因為系統負載增大后,處理過程中可能出現等待資源的情況,傳輸過程中也可能出現阻塞情況,從而增大了處理時長.提高響應速度的方法一般有:
第一,Review系統.對系統的每一層,甚至硬件都進行審查,低性能的代碼和 SQL,低性能的中件間,有問題的硬件,都會影響性能,都需要改造或者替換.
第二,使用緩存.首先描繪出從客戶端發請求到接到服務端應答的全路徑,然后分析這條路徑上的每一個節點,是否有必要增加緩存.實際上,緩存的本質就是把內容存到離客戶端更近、訪問速度更快的節點上;緩存的內容可以整個網頁、一個完整的請求-應答、一個對象、一個變量值,等等.常用的緩存技術有:
第三,優化依賴.如果一個系統服務對外有依賴,則有必要對其進行分析,看是否要以優化.首先要進行流程分析,識別出主流程,對不是主流程中的邏輯,通常有優化的余地.常用的方法有:
第四,系統分解.涉及到的方法有很多,例如:
1.4.3. 保持可用性
為保持可用性,一般可以采取如下措施:
系統性能評估與驗證的方法同樣適用于本工作.
就像運動員備戰運動會一樣,需要進行體檢,以保證系統以優良的狀態迎接大促.下表列出了重要的檢查項:
為一個互聯網企業,業務發展和變更速度比較快,系統很難一直保持穩定,出現問題在所難免.問題發現的越早,才能越早介入處理;更進一步,如果能在問題發生之前就發現問題的趨勢,并及時介入處理,就可能避免問題發生.
及時發現問題的主要手段是完善監控與報警體系,涵蓋從業務,到應用再到硬件、網絡全方面的監控.本文主要涉及應用級別的監控.
系統運行時可能遇到各種各樣的問題,如果有對應的應急預案,并演練到位,則可從容面對.當真的出現了緊急情況,最要緊并不是去尋找問題的根源,而是果斷采取措施控制住影響.越早決策,影響就越小.
系統運行時可能遇到各種各樣的問題,常見的有:
3.1.2. 預案重要元素
3.2. 快速決策
由于互聯網業務發展變化較快,系統變更也比較頻繁,不適合開發和運營分家的模式,而是自己建設的系統,自己負責運營.這樣,不但能提高運營效率,大家又可以在運營過程中發現問題,體驗問題帶來的痛苦,所以會想辦法改進設計,以避免問題發生.
這樣的團隊建設的系統會更易于運營,性能更加穩定,團隊的設計能力也會顯著提升,也就會趨于穩定和成熟,這樣就形成了良性循環.
備戰大促,涉及到許多團隊,需要大家通力合作,也就需要遵循一定的制定和流程規范,下表列舉了其中一部分.
6. 總結
我們回顧一下備戰的思路和方法,這是平時就要認真做好的:
如果面臨大促,則有必要采取的措施有:
要能很好地執行以上方法,應該具備兩個要素:
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/4336.html