據騰訊科技報道,6月18日零點,京東全民年中購物節拉開了高潮的序幕。第一個小時的銷售額超過去年同期的250%。從凌晨開始的海量訂單讓6月1日就拉開序幕的京東年中購物節奏出最強音,大量用戶瞬間涌入,峯值訂單被不斷刷新。爲了應對如此大規模的流量增加,京東研發團隊幾乎整年都在高築牆、廣積糧,一直着力從技術層面爲用戶提供流暢的交易體驗,以保證在峯值交易時期系統的高可用性。在京東整個電商體系中,交易系統佔據着其中的半壁江山,購物車、結算、庫存、價格等相關的環節都包含在其中,能夠說交易系統的高可用能力基本上決定了整個京東商城的高可用能力。在過去的一年時間裏,京東的交易系統作了哪些迭代和優化?今年又有哪些創新?總體的交易系統規劃是怎麼樣的?InfoQ記者帶着這些問題採訪了京東商城交易平臺高級總監王曉鍾。前端
ArchSummit全球架構師峯會深圳站將於2017年7月7日~8日在深圳·華僑城洲際酒店召開,京東商城運營研發部總架構師者文明策劃了《低延遲系統架構設計》專題,將會爲你們分享目前各大互聯網企業在低延遲系統架構設計上都有哪些新思路,歡迎關注。數據庫
下面是往年京東618以及雙11交易平臺相關的文章:編程
京東商城交易平臺系統架構變遷性能優化
王曉鍾,京東商城交易平臺高級總監,京東交易黃金流程與智慧營銷生態系統的掌舵人,帶領的產品與研發團隊爲京東商城提供了核心交易的系統保證。服務器
InfoQ:可否總體介紹下交易平臺目前的架構體系?微信
王曉鍾:交易平臺負責商品、價格、用戶、庫存、訂單等電商核心基礎信息的中心化管理,以及對購物車、結算頁、優惠券/禮品卡、訂單中心等黃金交易流程的管控和平臺化服務。交易平臺致力於技術改變生活,打造智慧營銷的交易平臺。爲用戶提供黃金交易流程;爲客戶提供智慧營銷解決方案包含促銷建議、智能庫存定位等智慧營銷工具;爲研發團隊提供穩定、可靠的交易服務。網絡
渠道是交易的流量入口來源,目前主要包含幾大部分,PC、APP、微信、手Q等。目前APP入口已經佔據了總體流量的70%以上。
組件完成對現有基礎服務的抽象與整合,將現有服務資源以多元化的方式展現給外界,靈活的組織並支持多種協議的交互,最終實現了系統的模塊化、服務平臺化、功能配置化。組件最大限度的減小外界對內部邏輯的耦合,從而實現對需求快速響應。
基礎服務位於整個黃金流程的最底層,其扮演者交易平臺心臟的角色。其中商品服務、價格服務、庫存服務、用戶服務、購物車等更是核心中的核心。
中間件、基礎設施是基礎服務的基石,對業務系統提供高性能,高可用的技術支撐。
InfoQ:過去一年,交易平臺在保證底層的基礎平臺穩固方面作了哪些事情?有哪些點讀者是能夠參考學習的?
王曉鍾:除了咱們一直在作的、已經造成常規的工做,好比線上壓測、性能優化、擴容、故障切換、限流、降級以外,過去一年,咱們在系統維穩方面作了一些精細化的工做。
核心調用鏈監控。在黃金交易流程中的各個服務入口點和服務相關依賴、調用方等進行聯合監控。當服務性能降低、可用率降低時,能夠快速的定位到故障點。把監控和故障解決方案聯動起來,好比一鍵切換、服務降級、限流等,能夠快速的發現和解決問題。
自動切換。對於成熟的切換流程,好比數據庫、緩存、服務等節點的客戶端,當檢測到故障時,能夠根據策略自動切換到健康的節點,同時在故障節點恢復後自動切換回來,減小人工操做的錯誤和耗時,提升系統的可用率。
異步化編程模式。部分服務經過完全的異步化改造來提高吞吐量,仍是有一些效果。可是因爲純異步化對於現有系統的改造仍是挺大的,因此目前還在嘗試前行階段。
共享資源池。提早準備一些資源共享池,各服務混用,平時設置較低的權重。當某個服務的常規資源組不足時,則增長其在共享池中的權重,這樣能夠快速的使用資源,而不用臨時擴容。
全鏈路壓測。從入口開始模擬用戶的行爲進行壓測,流量經過依賴傳遞,從瀏覽、搜索,到提交訂單以及最後的生產,自動覆蓋到鏈路中的全部環節。配合上面提到的核心調用鏈監控,解決以往只是單服務的壓測,覆蓋面不全的問題。
隨着業務的發展,功能的複雜度也在不斷增長,定位故障緣由變的困難了起來,不少時候線上發生故障大部分的時間都在定位問題,故障的解決只要有預案就能夠很快處理。調用鏈監控就很重要,能夠站在全局的角度,快速的定位問題,和故障預案處理結合能夠解決咱們的痛點。
隨着服務的不斷擴容,機器數量的增長,出現問題時,故障修復的速度變慢,自動化的故障切換可使人工解放出來,處理更重要的事情,可讓你們不用老是在半夜起來處理故障。
InfoQ:目前交易平臺的服務是依據什麼維度進行劃分的?
王曉鍾:目前交易平臺主要依據業務能力來劃分服務的:購物車、結算頁、促銷、價格、庫存、商品、用戶等,爲PC,手機,微信等渠道提供高可靠的大中臺服務。
這種劃分模式好處在於:
- 架構穩定,由於業務能力相對穩定和相互獨立。
- 開發團隊是自主的,圍繞着交付業務價值而不是技術特性來組織。
- 服務之間共同合做,鬆耦合。
InfoQ:可否分別從業務、系統、基礎設施三個層面談談大家的監控體系方案?
王曉鍾:在京東這樣的大規模分佈式系統面前,每時每刻服務器可能都宕機,網絡隨時可能都在抖動,大量接口調用量日均過億,同時具備流量彙集效應的促銷天天都會有好幾波,若是沒有一套強大的監控體系,咱們就像睜眼瞎同樣。通過多年的努力,京東目前已經造成多套監控系統,創建了比較完善的監控體系,時刻監視着系統的健康狀態,並在發現問題時第一時間進行預警:
1)業務層面的監控,主要是核心業務指標,好比實時訂單量,並按渠道、省份、運營商、機房、品類、活動等各個維度進行細分,從而在及時發現核心業務指標變化的同時,可以快速定位、排查問題,並作出應急響應。
2)系統層面的監控,主要是方法或代碼塊的調用量、成功率以及響應時間。同時,不一樣語言平臺有特定的監控指標,例如Java應用,咱們也很是關心JVM GC 狀況。這些指標咱們會按實例、集羣、機房等進行逐級彙總計算。對於響應時間,咱們更關心的是TP99甚至TP999任何一指標低於預設閾值都會觸發報警。在採集單一接口性能數據的基礎上,咱們將請求訪問鏈通過的一系列子調用串起來,包括RPC服務之間、訪問緩存、訪問數據庫等等,實現調用鏈條薄弱環節的快速發現,快速解決。
3)基礎設施的監控,主要是網絡質量和機器健康度的監控,像常規的帶寬、丟包率、重傳、連通性,CPU、內存、磁盤等等。在網絡方面,除了內網,咱們也很是關心公網網絡質量,一旦發現運營商或者區域故障,就會作當即出預案響應,7*24小時確保用戶購物體驗。
在監控指標完善的同時,咱們更多在解決監控自身的延時性。京東自身訪問量大,因此在提升監控的延時性同時又不能影響業務自身性能,自己就是就一個挑戰。目前咱們在業務層面、系統層面都作到了秒級粒度,基礎設施方面的重要指標也有了秒級數據。在預警方面,除了傳統的郵件、短信,咱們集成了京東內部IM工具,同時還有手機語音呼叫。
在這麼多指標,這麼精細的數據面前,傳統的監控儀表盤也會讓咱們再度迷失,所以咱們開發了天眼系統進一步將各個監控子系統進行集成,結合前述的調用鏈,在一個大屏上多個核心主流程的各環節、各調用層次的當前健康情況一覽無遺,一旦有故障咱們能夠在短期內快速響應並恢復。
InfoQ:對於惡意的流量攻擊,京東作了哪些準備工做?準備如何預防?
王曉鍾:惡意流量攻擊,是每一個互聯網企業都必須面對的難題。目前咱們把流量攻擊分爲兩大類:網絡協議層和應用邏輯層。
網絡協議層的,主要是SYNFlood、UDPFlood、DNSFlood、HTTPFlood這些4層或7層協議的各類流量攻擊,主要以帶寬或服務資源消耗爲主。目前咱們經過京東雲平臺自研的流量分析和清洗系統可以防護主流的惡意流量攻擊。除此以外,信息安所有門也會聯合外部力量進行上百G的流量攻防演練,確保合做和聯動等實戰能力。
應用邏輯層的惡意流量的範圍和影響則比較普遍。狹義上,惡意流量利用應用系統的軟件漏洞,作拒絕服務攻擊;廣義上,可以利用應用的實現邏輯或規則漏洞,非法實現各類商業利益的,不管流量大小,都屬於惡意流量攻擊。這一大類型攻擊由京東的多個部門配合進行總體防護。
1)信息安所有門會經過開展安全自查和外部合做報告漏洞的方式,由各業務研發部門實施安全漏洞消除,好比SQL注入、代碼執行、水平越權、信息泄露等。
2)風控部門會經過數據分析,創建各類等級的風險控制模型,造成動態的不一樣風險等級的帳戶池,供業務系統使用。
3)業務研發部門則根據業務特性、用戶風險等級、系統壓力等因素,提供不一樣策略的限流實現。
InfoQ:以商品的實時價格爲例,聊聊大家的讀邏輯和寫邏輯流程?
王曉鍾:京東實時價格面臨幾大挑戰:一是數據量大,幾十億的商品;二是調用量大,日峯值上百億;三是實時性要求高;最後是業務複雜度高,並非單一的京東價,不只要綜合計算各種促銷規則,還要對PC、手機、第三方合做渠道以及區域進行差別化運營。這裏,咱們運用讀寫分離、異步化策略,選擇支撐大併發、高性能的開源組件進行設計,確保可水平擴展、高穩定性。
1)寫邏輯流程:當採銷在後端調整價格或創建促銷時,同步寫入MySQL數據庫,而後經過異步任務更新促銷主Redis數據,並同時更新價格主Redis的過時時間戳,經過Redis自身複製機制,將數據傳播到從節點。
2)讀邏輯流程:當用戶在前端瀏覽商品列表、詳情等頁面時,異步訪問價格實時服務,此時內嵌Nginx 的Lua程序直接讀取本地Redis(從)中的價格數據,無過時則直接返回用戶;若過時或不存在,則回源訪問價格實時計算服務,即刻返回最新價格給用戶。
3)回源寫邏輯:價格實時計算服務讀取促銷主Redis,在返回最新價格給用戶的同時,異步寫價格主Redis集羣,價格主Redis同步數據至前置Nginx節點的從Redis節點。
InfoQ:今年618京東的交易平臺都作了哪些技術上的改進或者創新,以及將來將會考慮哪些優化和升級方向?
王曉鍾:除了上面提到的主要用來維護系統穩定的技術改造以外,今年交易平臺也投入了更多的精力在作提高用戶體驗、提高GMV的改進和創新工做。好比利用大數據技術和機器學習模型,來提供千人千價、千人千促的體驗。
咱們也在嘗試利用大數據和機器學習等在系統維穩上作一些工做,好比:
1)SQL注入和惡意代碼執行方面引入了機器學習模型,經過對已有的攻擊行爲進行學習,訓練特徵。引入半監督學習,讓模型能夠經過學習,自動發現新型的攻擊。大大提升了攻擊的發現效率和新攻擊的識別能力。各項指標已經徹底超越傳統的規則識別。
2)使用有向圖模型對惡意攻擊進行溯源檢測,更加準確快速的進行溯源分析,而且獲得了很是好的效果。
下一步,咱們會繼續嘗試在這個方向上作一些創新,好比:
1)在人機行爲檢測方面進行優化。使用聚類和nlp模型對惡意刷單行爲進行識別,提升惡意刷單行爲的驗證級別,從而極大地下降後臺接口壓力。
2)評論價值評定模型,識別真實評論和刷出來的評論。讓評論產生更大的價值。
3)咱們將在故障智能預測上進行探索。目前不少監控和預警都是過後的,咱們但願能作到事前。經過分析歷史性、週期性故障數據,結合當前實時健康度,快速識別出「瀕死」的機器、實例,真正作到監控預警智慧化