狂攬1592億!京東京麥平臺618備戰實踐總結

2020-12-21 IT168

  【IT168 資訊】近日,京東可謂是好事連連,「谷歌 5.5 億美元投資京東」、「京東 1.2 億美元增持唯品會股權」、「一年一度的京東 618 狂歡也終於落下帷幕,累計下單金額達 1592 億元」。

  京東 1592 億元的驚人戰績離不開強大的技術支撐,下面來自京東京麥平臺的資深架構師王新棟給大家揭秘京東年度大考背後的備戰實踐。

  作為技術研發人員,我們常戲稱京東每年只幹兩件事,一個是 618,另外一個是雙 11!

  確實每一次的大促都是一場全兵演練,技術人員在這場戰鬥中,從團隊合作、技術提升、用戶意識上都有一個立體的提高。實難想像還有比這樣規模的促銷更好的鍛鍊方式。

  京麥平臺是目前京東所有商家唯一使用的一站式店鋪運營管理平臺,商家藉助京麥可以實現商品發布、列印訂單、出庫、訂單消息接收等等一系列的日常工作。

  京麥平臺更是集合了眾多 ISV 廠商為商家提供了更加豐富的功能,更好的賦能於商家。

  京麥平臺的技術架構也在隨著京東業務的飛速發展不斷演化著。從早期的簡單 Nginx+Tomcat 部署,到現在功能服務模塊化,獨立部署,享受著微服務帶來的便利,但同時也給我們大促的備戰帶來了眾多挑戰。

  首先確定自己的備戰思路,梳理核心流程、找出薄弱點,對薄弱點具體優化。

  同時協調壓測對優化結果驗證,優化和壓測會有一個反覆的過程,後面我們還要實際演練,比如降級開關,防止實際情況發生的時候準備好的功能不可用。

  最後我們要做一輪培訓,在工具使用,快速定位問題,歷來的教訓總結都過一遍。

  從心理層面上我們也要輔導,大促期間發生的問題都不是小問題,研發人員在這種壓力下處理問題有時候會變形,我們會在這方面做一次心理疏解。

  這中間我們可以利用幾個規則,二八法則,找出 20% 重要核心的功能,比如京麥的登錄、交易、價格門消息推送。

  在找薄弱點的時候我們可以試試墨菲定律的幾點規則,「可能出錯的事總會出錯」,「如果你擔心某種情況發生,那麼它就有可能發生」。

  我們還會找大家一起列出心中最不可能出現問題的系統和功能點來重點對待,沒錯,是重點對待。

  我們常用的備戰技術,肯定不是重啟,回滾,加機器,我個人總結有:

  分離技術

  緩存技術

  SQL 優化

  快速失敗

  降級限流

  下面我們來逐一介紹。

  分離技術

  話說「天下大事,合久必分,分久必合」,但在軟體架構領域,一直是一個分的趨勢。

  比如京麥平臺有提供 ISV 的服務、提供京麥自有客戶端的服務、提供其他平臺的服務,同時還有監控服務,日誌服務,消息服務等。

  這需要將業務服務隔離部署,線下分析和線上運行隔離,同時還可以採取線程隔離,比如 JSF 裡面為每個不同重要的服務分別一個線程組的方式。

  資料庫層面上主從分離,京麥平臺的業務都是讀多寫少,可以充分利用分庫的資源。

  還可以再將資料庫細分,按照主要業務拆分不同的資料庫,結合 RPC 使用,更大降低資料庫層面的耦合程度。

  緩存技術

  如果軟體裡面真的有一種銀彈的話,我認為就是緩存,當你性能優化遇到瓶頸的時候,當你想抗量的時候,你都會想到緩存。

  這裡有一個鐵律,那就是,對外暴露的接口一定不能直達資料庫。我們常用的緩存是 Redis + JVMcache。

  計算 Redis 穿透率的時候我們可以,通過 UMP 來實現,在一個方法的總入口埋點,比如統計出 1 分鐘調用 M 次,在請求 Redis 的入口埋點,統計出 1 分鐘調用 N次,計算命中率:N/M。

  在使用 Redis 的時候要注意含有大數值的 key,常常量一上來會造成 Redis 集群的熱點訪問,直接將單一節點打死。

  這樣的情況下我們就要拆分這樣的大 key。同時將緩存 DB 化,就是不設置超時時間,這樣全部用 Redis 來抗量。

  本地緩存這塊我們常用的有 Guava-cache,通過本地緩存我們可以做三級防護,或者做託底數據等。

  如果數據「尺寸較小」、「高頻的讀取操作」、「變更操作較少」使用這種嵌入式緩存將非常合適。

  SQL優化

  每次大促前我們都要將系統中性能慢的 SQL 抓出來,而且這種工作投入產出比極高,也就是可以花費較小代價帶來極大的性能收益。

  SQL 性能問題,大多數情況下是沒有索引引起的,這可能是後續業務變化迅速,上線前代碼 review 的遺漏,需要這個時候統一過一遍。

  還有就是索引使用錯誤,比如索引欄位是字符串類型,但是程序中請求 DB 的時候傳的是 long 類型,索引失效,表中數量過多,做了一次全表掃描,性能會很差。

  還有時候我們添加索引的時候要看區分度,計算索引區分度的方法是不重複的索引值/總記錄數,值越接近 1,說明區分度越高,查詢的時候 MySQL 就會過濾掉更多的行數據。

  還有,添加索引最好結合 MySQL 執行計劃來判斷。有時候做了過多的 join 操作,比如超過 3 張表以上,我們就要想著去拆解這些 SQL 語句。

  再就是資料庫層面我可以把歷史數據轉出,減少數據量來達到提高查詢速度的目的。

  快速失敗

  快速失敗策略實際上是一種自我保護措施,比如調用第三方接口超時,如果超時時間設置過長,訪問量大的時候,就會導致請求線程積壓;如果此時有線程隔離還好,若剛好沒有,那麼訪問量一上來就會迅速導致 CPU 飆高。

  京麥平臺的特點之一,會大量調用第三方接口服務,我們會對每個方法動態的設置超時時間。

  如果 UMP 報警再結合 JVM 性能數據,我們會將這個接口的超時時間閾值調小,通過 Zookeeper 下發到每一個服務節點上。

  在大促前,我們會重點檢查 MySQL、Redis、JSF 等 RPC 調用的超時設置,確保每一次 RPC 調用都要有上限閾值。

  關於 RPC 調用超時,這裡多說一下,有時候我們會發現調用端性能比如超過 500ms,但是服務端卻是在 100ms 上線徘徊。

  這裡面我們除了檢查網關延時,TCP 重傳,還要注意一點,就是任何一個成熟的 RPC 框架都不會讓業務線程直接參與網絡請求。

  RPC 會提供一個消息隊列,調用端直接跟消息隊列打交道。此時,我們就要想到隊列這塊是否有問題了。

  降級限流

  這種技術實際上是保命的措施。降級一般有屛蔽降級和容錯降級兩種,對一些非核心的功能,比如京麥的麥圈,服務號,論壇等功能,而它們恰恰又請求著 MySQL,Redis 等公共資源。

  為了減少這種競爭我們就會對這些功能進行屛蔽降級,直接切斷 RPC 調用,不再發起遠程調用,返回空或者其他異常提示,減少公共資源的訪問。

  降級開關,目前京麥是採用統一配置中心來使用。同樣,限流技術在京麥平臺中也是異常重要的一個措施,尤其是對京麥網關的調用。

  我們目前是採用令牌桶的方法,實現方式是 Guava RateLimiter,簡單有效,再結合統一配置中心,我們可以動態調整限流閾值。不用重啟伺服器即可實現快速限流策略調整。

  我們在網關裡面還有一個設置,就是並發度,這個是方法粒度的,對每一個調用第三方的接口都有一個並發度數值設置。

  而且是動態設置,也是通過 Zookeeper 下發到每一個服務節點上。並發度的具體實現是通過 JDK 的 Semaphore。

  我們再來說一下,監控配置和性能壓測。

  監控配置是一定不能缺少,我們要求自己一定要第一時間早於用戶發現問題。

  平時開發在上線的時候我們都應該有統一要求每一個 RPC 調用都要有監控和錯誤棧的輸出。

  在備戰期間實際是對監控配置的一個治理過程,監控配置 key 要規則化,比如***.mysql.***,***.redis.***等讓我們一眼便知道是操作的哪一個資源。

  京麥平臺這次備戰的過程中通過採用 AOP 的方式,把所有類似的調用統一規範化處理,後續結合 Python 腳本對監控閾值進行統一調整。

  這樣走下來一方面把我們平時可能漏掉的監控給補全,另外一方面我們的監控配置按照統一的規則來生成。

  性能壓測這一塊,可以很好的檢驗我們優化的結果,壓測的過程中我們關注 QPS 的同時,還要結合伺服器的 CPU、IO、內存等機器性能指標來定位我們的性能瓶頸。

  最後來預估我們系統的承載能力,提供數據支撐來申請伺服器或者 Docker 資源。

  壓測工具研發可以自己寫腳本,藉助 jmeter、loadrunner 等工具,也可以有計劃的聯繫性能壓測組他們協助執行。最困難的還是產生真實的壓力。

  還有一個備戰點,返璞歸真,回到代碼,重點核心功能檢查一遍,把壞味道的代碼查出來。

  比如 join 了很多張表的 SQL 語句、日誌輸出沒有採用條件方式或者佔位符的方式、日誌重複列印、try 代碼塊放到了事務中、循環體中含有低性能的語句、鎖代碼塊中進行 RPC 調用,等等。

  最後,我們可以想一下備戰備的是什麼,總結歷次的大促,我認為主要在工具、知識、經驗三個方面的備戰:

  工欲善其事,必先利其器,我們要有一些好的工具輔助我們解決問題,比如 MDC(裡面含有 CPU,網絡等監控)、UMP(京東自研方法性能,可用率等監控平臺)、CAP(容器的總體監控,也含有 CPU 負載等信息查看)。

  知識層面,是我們歷來的積累,我們認識的提高,使用工具時候的指導。

  經驗是我們以往的大大小小的教訓的總結,前車之鑑,防止我們再次發生類似的事情。

  以「結硬寨,打呆帳」這句話結束對 618 備戰的總結,最重要的一點,還是要求我們備戰在平時。

  作者:王新棟

  簡介:目前就職於京東,一直從事京麥平臺的架構設計與開發工作,熟悉各種開源軟體架構。在 Web 開發,架構優化上有較豐富實戰經歷。有多年在 NIO 領域的設計、開發經驗,對 HTTP、TCP 長連接技術有深入研究與領悟,目前主要致力於移動與 PC 平臺網關技術的優化與實現。

相關焦點

  • 海信集團總裁賈少謙到訪京東總部 全方位備戰京東618目標翻倍增長
    6月9日,海信集團總裁賈少謙一行到訪京東總部,與京東集團高級副總裁、3C家電零售事業群總裁閆小兵深入會談,雙方總結了今年京東618全球年中購物節開門紅階段的成果和不足,對618下一階段的供貨保障、促銷玩法和服務聯動等進行了全面細緻的部署,以確保順利達成海信在今年京東618期間成交額翻倍增長的目標
  • 京東618汪汪卡分京豆活動玩法介紹 京東618攻略
    有很多的小夥伴們都想知道京東618汪汪卡分京豆活動怎麼玩,下面PConline小編為大家帶來京東618汪汪卡分京豆活動玩法介紹,感興趣的小夥伴們快來一起了解一下吧!手機京東軟體版本:7.0.4Android軟體立即查看京東618活動玩法用戶可以通過關注店鋪、和好友互贈卡片、AR掃618符號這三種渠道來收集5種汪汪卡(招財汪、神力汪、隱身汪、治癒汪、格鬥汪),集齊後可合成為JOY神卡。擁有JOY神卡的用戶可在6月1日12:00—24:00參與平分20億京豆。
  • 【淘寶618紅包季】40億神券天貓京東618超級紅包補貼領取入口
    【淘寶618紅包季】40億神券天貓京東618超級紅包補貼領取入口一年一度的618大促又要來了,小編給大家整理出來這次天貓618大促推出的一些紅包活動,後期出來新活動會及時更新,建議大家收藏此帖,每天關注一下。
  • 歷經4年618流量暴擊,京東京麥開放平臺的高可用架構之路
    京麥是京東商家的多端開放式工作平臺,是京東十萬商家唯一的店鋪運營管理平臺。它為京東商家提供移動端和桌面端的操作業務,京麥本身是一個開放的端體系架構,由京東官方和 ISV 為商家提供多樣的應用服務。
  • 京東618:超2億件五折商品登場,1元就能吃上漢堡王
    那麼,這次京東618活動,有何亮點?京東App:超2億件五折商品登場超過2億件5折商品,這是今年京東618的一大亮點。此外,京東還將邀請用戶一起參與疊蛋糕活動,瓜分10億紅包。PLUS會員:1元吃漢堡王、20倍返京豆如果你是京東PLUS會員,在此次京東618活動中,你還能解鎖新權益。
  • 2020京東618優惠力度有多大 京東618活動優惠匯總
    2020京東618優惠力度有多大 京東618活動優惠匯總 2020京東618的活動優惠力度大不大,今年618活動的補貼折扣看起來要比以前的618要更大,因此很多想要網購的朋友對今年的
  • 5分鐘,5張卡,4000京豆!京東618這是白送錢嗎?
    前兩天小編在虎撲日常灌水時,在步行街無意發現一熱帖,原來是某JR發了一個京東的集汪汪卡瓜分20億京豆的活動。「京東活動,送4000京豆,是什麼水平?」估計是這位網友對於京東如此大手筆的福利發放有點不敢相信,所以跑來虎撲發帖來求證,結果引發了大家更熱烈的討論和關注。
  • 京東618大趴讓你購不停
    京東618購物終極大趴    京東618購物終極大趴長達20天的活動,從6月1日至6月16日,每天都有一個品類的產品進行促銷2京東618joy對對碰    1、京東618joy對對碰    這樣的遊戲大家都玩過,也非常熟悉和喜愛,京東618把這樣的遊戲引入活動中可謂正中大家的口味,通過遊戲的方式讓網友在60秒的遊戲中獲取快樂,最終還能獲得遊戲的獎勵(
  • 京東天貓618紅包搶清空購物車大獎 淘寶618是什麼活動購物節
    購物少不了好嚮導,京東618幫你找!京東權威性榜單「京東金榜」也在6月15日首發上線。京東金榜是通過超100+專業媒體、機構、垂直領域意見領袖,為京東用戶提供精簡、權威且高品質的購物參考依據。如果你總是不知道買什麼,就讓這些專業人士幫你挑好物,不用猶豫不決,直接買即可!
  • 樂高玩具榮獲「京東零售最佳經營店鋪獎」 全力備戰京東618_電商資訊
    來源:金融界網站5月21日,2019京東618全球品牌峰會在北京召開。國內外近千家品牌商代表、合作夥伴、行業專家共同出席本次大會。大會現場,京東向合作夥伴頒發了十大獎項。作為京東的戰略合作夥伴,樂高玩具憑藉卓越的運營能力、獨一無二的產品體驗斬獲了2019「京東零售最佳經營店鋪獎」。對隨之而來的京東618購物節,樂高玩具也早已進入了全力備戰狀態。
  • 京東香港二次上市 618訂單破2692億
    同日,京東集團(09618.HK)正式港交所掛牌上市。上市首日,京東股價報收於234港元,較發行價上漲3.54%,市值超過7200億港元。  相比於此前已經赴港二次上市,京東對於「618」的在意和打造,意義非凡。時隔6年,京東此次赴港二次上市,總計募集資金298億港元(不行使超額配股權的情況下),也刷新了港交所2020年至今的融資紀錄。
  • 京東智聯雲:技術是京東618的堅實基石
    但殊不知,2692億全民的狂歡的背後,是京東技術面臨的一次前所未有的考驗——來自「數字世界」的洶湧的數據洪流、迸發的流量洪峰,給京東技術的穩定性、安全性、彈性帶來巨大挑戰。內部大考 京東技術「抗住了」與往年不同,今年618,是京東核心業務全面上雲的第一年,也是京東融合人工智慧、雲計算、物聯網等業務板塊成立京東智聯雲後對其技術能力的第一次大考。面對同2692億一樣再創新高的雲端的數據和流量洪峰,京東技術「扛住了」, 實現了穩定、安全、可信賴的技術護航。
  • 京東618將助150個品牌銷售破億,成數十萬品牌、商家最大增量場
    這是後疫情時代的首個全民購物節和史上最有意義的一次京東618,京東歡迎所有同行、線上線下零售企業一起參與到第17個京東618中,共同打造行業參與度最高的一次京東618。京東618也將通過創新賦能、補貼扶持等舉措,幫助超過150個品牌銷售破億,幫助超10萬中小品牌商家成交額同比增長超過100%,成為數十萬品牌、商家的最大增量場,攜手促進實體經濟恢復和加速發展。
  • 京東大牌VIP狂歡購活動瓜分1億京豆
    618來了!你確定不薅一次羊毛嗎?今天,京東618發布會啟動,據介紹,此次京東618將會是史上最簡單的618,「消費者不用撓頭比價算帳,不用苦等下單時機」,優惠力度最大,購物體驗最佳。2億件5折商品、牛排低至3.99元一片、小龍蝦6.6元一斤等等,讓人實在是挑花眼!這太吸引人了!
  • 京東618高潮期即將拉開大幕,看超級直播盛典搶618大額神券
    【天極網IT新聞頻道】京東618的大浪即將掀至峰值。   6月16日至6月18日,京東618高潮期來臨!618作為京東主場的周年慶盛典,致力於感恩回饋消費者,與億萬消費者共同慶生,用戶每天在「618主會場」可以領「生日禮包」,解鎖「每滿300減40」頭號京貼、滿299減15元全品類東券以及海量各品類大力度優惠券,共享生日福利。   高潮期臨近,如果大家此刻仍然沒有想好怎麼剁手,趕緊上京東逛一逛,最實惠只在京東618!
  • 什麼姿勢迎接京東618
    (  如果親趕時間,可以直接查看文中最後的京東各分類產品特惠頁面連結!  今年京東618促銷大招如何釋放?  1、分時段、分主題,每天都有大Party!  經歷過幾次京東618店慶的朋友,一定知道6.17-6.20日期的「老劉專場」是整個店慶促銷的高潮。
  • [預告]京東 618 競技裝備紀:1 元最高可抵 618 元
    IT之家5月26日消息 京東618全球年中購物節預熱期5月27日將開啟「競技裝備紀」主題日,活動商品主推體育用品和遊戲手機、電腦、數碼等品類,1元最高可抵618元,點此參與。電腦數碼會場:1億京豆發不停,影音神券最高減500元,筆記本預售1元抵618元、6.18元抵1000元,點此購買。
  • 2020京東618什麼時候開始 京東618活動時間匯總
    2020京東618什麼時候開始 京東618活動時間匯總 2020年京東618活動什麼時候開始,今年京東618
  • 京東京車會11.11:1元領618元車主禮包,邀請好友升級至1111元
    作為汽車後市場「商品+服務」線上線下一體化服務模式的踐行者,京東京車會於今年7月底首次推出車主令牌十大權益,並在京東11.11期間,以1元「領618元車主大禮包」的形式回饋車主。京東11.11全球好物節漸入高潮,京東京車會福利加碼,邀請好友即可升級權益至1111元。自此,京東京車會的會員體系得到進一步完善,加速會員精細化運營的進程。
  • 「徵稿活動」備戰618我們來啦!年中大促活動解讀/搶券紅包玩法,全...
    618這就來了!你準備好了嗎?前兩天新聞大家聽說了嗎?京東香港二次上市進程臨近,最快6月初啟動招股,預計6月18日掛牌。對於這一傳聞,京東方面表示:今年618將會有「大動作」,還透露說今年618除了超級百億補貼、千億優惠等一系列史上最大優惠力度,還有百餘項顛覆性的服務面世。