1號店11.11:從應用架構落地點談高可用高並發高性能

2020-12-20 站長之家

1.背景 1.1三高是電商核心交易系統的基礎

電商核心交易系統有很多特點,如分布式、高可擴展等,在眾多特性中,高可用、高並發、高性能是基礎。大到技術峰會、論壇、研討會,小到一場面試,高可用、高並發、高性能始終是焦點,是技術大牛、技術追隨者永遠津津樂道的話題,成為他們畢生的追求。

另,ArchSummit全球架構師峰會北京站將於2015年12月18日~19日在北京國際會議中心召開,大會設置了《揭秘雙十一背後的技術較量》專題來深入解讀雙十一背後的技術故事,歡迎關注。

1.2 三高首先依賴的是架構

日常和同行、同事的交流過程中,大家經常討論的問題就是,你們是如何做到高可用的?訪問峰值達到了什麼級別,系統怎麼撐住的?高並發下怎麼保證數據一致性?性能如何提升?採用了什麼新技術?

儘管大家的答案各有不同,從硬體到軟體、從程序到SQL、從靜態到動態、從C到JAVA,但大家最終總能達成一致,高可用、高並發、高性能依靠的不是某個硬體、某種技術、某種DB,而是好的架構。

1.3 能落地的架構才是好架構

好架構很多,網上隨便一搜,微軟、Google、阿里、京東等眾多大牛的架構圖很多,都是好架構。

當然今天我們不是來談什麼是好架構,因為我們從不缺架構圖。架構圖是形,怎麼落地是神;就如軍用材料,技術大家都懂,工藝才是關鍵。

所以,能落地的架構才是好架構,當然我們更缺的是好架構的落地點。

2.1號店如何做三高

1號店技術部從1個人做起到今天千人級別的規模,系統支持每天億級的訪問量、單Service支持每天億級的請求、訂單支持每分鐘幾萬單級別、Service服務可用性達到99.9999%,架構上也經歷了歷次演進,今天我們就從應用架構歷次演進的落地點談起。

1號店應用架構的演進大致經歷了以下歷程:強依賴-> Service化->業務解耦->讀寫分離->異步->水平/垂直拆分->服務邏輯分組等。

當然這個過程從不是串行的,永遠是並行的,並且這個過程永遠是在1號店這輛系統大巴行進過程中進行的,因為我們不能停車也不能剎車,而且還必須不斷提速。

2.1 應用架構的最大演進-SOA治理

早期的1號店系統,遵循簡單的MVC架構,Controller層處理了所有的業務邏輯包括與DB的交互,在系統初期這種Simple的架構方便快捷,成本低業務響應快。但當業務開始變得複雜、人員規模爆發式增長,這種強耦合強依賴帶來的弊端就成了巨大的瓶頸,代碼耦合度高互相衝突、出錯概率和事故概率明顯提升,業務需求不能快速響應,SOA治理迫在眉睫,解耦和去依賴成為第一需求,於是Service化成為第一前提。

2.2 SOA治理- Service日誌是保障

1. 做Service首先是規劃,Service規劃的第一步首先考慮什麼?大家可以先自行考慮下

2. 下單接口業務性強,其對可用、並發、性能的要求作為技術人你懂的。我們就從這個接口開始下手,但我們沒有先去分析業務,首先想的是如何定義日誌系統,讓以後的監控和問題定位更簡單更快捷。事實證明這個決定是對的,直到現在1號店的大部分訂單相關的監控、預警、問題排查定位等完全依賴這個日誌。

3. 日誌系統的設計基於以下:一是進資料庫、持久化有序化,二是分類化、層次化、錯誤code唯一。

4. 1號店現在有了很好的SOA中間件 – Hedwig,可支持百億級的訪問請求,它有SOA級別的日誌,也很完善。但應用級別的日誌我們還是建議各應用系統自己做,它的業務性、個性化是公共架構永遠代替不了的。

2.3 應用架構演進之落地

一定有人要問1號店採用的什麼RPC框架,好吧,是Hessian,這不是什麼秘密。

為什麼要用Hessian?我偷偷告訴你,PHP是最偉大的的開發語言。

2.3.1 業務垂直拆分

萬事具備,草船已借箭,要從業務角度規劃Service 了。

我們從產品、用戶、訂單三個維度上對Service進行了規劃,構成1號店應用架構上的三架馬車,確立了SOA治理的框架基礎。

在此基礎上,又陸續衍生出促銷、積分、支付等眾多Service業務,在三架馬車中同樣會細分至如文描、價格、庫存、下單、訂單查詢等垂直服務。

Service化是前提,Service化完成後,後面可以大刀闊斧地幹了,因為業務獨立了、DB讀寫權限收回了,哈,好像整個天下都是我的了。但,得天下易治天下難,真正的大戲在後面。

2.3.2 讀寫分離

讀寫分離的重要性不需多講,除了最簡單的讀寫分離,寫可以從應用層面繼續細分,讀也可以從應用和DB層面再細分,如訂單的讀寫分離:

2.3.3 水平拆分

早在2013年,1號店就實現了庫存的水平拆分,2014年又一舉完成訂單水平拆庫&去Oracle遷Mysql項目。

訂單水平拆庫&去Oracle遷Mysql兩個重量級的大項目合併為一個項目並完美無縫上線,在經濟上時間上節省的是成本,在技術上體現的1號店的整體技術實力和水平。

2.3.4 服務邏輯分組

前面說到了讀寫分離,大家也注意到了,這是物理隔離。

物理分離好處明顯,但其硬體成本、維護成本高的弊端也顯而易見。這時候,我們的大殺器-Hedwig又上場了,有興趣多來了解下我們SOA中間件-Hedwig,這可是獲總裁獎的項目。

Hedwig提供了服務自動註冊發現、軟負載均衡、節點踢出與復活、服務動態邏輯分組、請求自動重試等眾多SOA框架所需的強大功能,支持並行請求、灰度發布,其背後提供的調用鏈路及層次關係、日誌分析、監控預警等更是為SOA治理提供了強大的後勤保障。

2.3.5 業務解耦/異步

上面提到的讀寫分離、水平拆分、邏輯分組等主要是從技術層面保障,也是技術人員最喜歡的話題。業務流程的梳理、優化、改造往往不被重視,但作為應用架構,我們最不能忽視的是業務。

3.追求極致

開放、共享、追求極致是1號店技術人的理念。我們在追求極致上做了很多,簡單舉幾個例子:

3.1 一個下單接口定義了135個錯誤編碼

前面提到過日誌和錯誤編碼的定義,大家一定想像不到,我們僅一個下單接口就定義了135個錯誤編碼。接口上線後至今出現的錯誤編碼在50-60個,也就是說有50-60處不合理或錯誤的地方,這個不合理或錯誤既有業務的又有程序的也有我們對編碼定義的不合理。

出現一個我們就解決一個,系統自然越來越健壯和穩定,目前日常每天下單出現3-5個錯誤編碼,主要為業務性如特價商品已售完無庫存等。

那沒有出現過的幾十個編碼是不是就意味著我們工作白做了?

功夫下對了永遠不會浪費,在下單接口上線近2年後,一個之前從未出現過的錯誤編碼跳出來了,是一個很難出現的業務場景,但通過這個編碼,我們馬上定位了問題,都不用去看代碼。

我們永遠不能保證系統沒有bug,bug可以藏的很深埋的很久,但我們不怕,因為我們的伏兵也一直在,你一跳我們立馬抓,毫不猶豫。

3.2 Service服務可用性99.9999%

6個9的Service服務可用性,可能有人不信,看看我們真實的監控郵件,這是每天億級的調用量。

功夫永遠在戲外,結果僅僅是一個結果,一步步踏實走過來的旅程才是我們收穫最大的。

3.3 銷售庫存準確率99.9999%,超賣率為0

做過電商核心系統的人都明白庫存控制的難度,庫存不準甚至超賣的問題至今還有很多電商公司沒有完全解決。

這個問題也曾經困擾我們,為此還專門寫了一個庫存刷子的程序來刷數據,現在這個程序已基本宣告廢棄了,因為我們的庫存準確率達到了6個9,超賣率為0。

怎麼做到的?業務、業務、業務,重要的事說三遍。

我們團隊花了3個多月的時間,對所有庫存應用場景逐一排查,最終梳理出16個有問題的庫存場景,並逐一協調解決,讓庫存形成嚴格的閉環線路,保證了庫存的準確性。在這過程中,對庫存閉環方案和對業務的理解成為關鍵,純靠技術,我們能做的並不多。

4.應用場景 4.1 業務監控>

業務監控首提訂單監控,對訂單我們從實際訂單數據和Service接口調用量兩個維度去做監控,保證了監控系統的穩定和準確(監控系統也會出錯的),其中下單接口調用量使用的就是Service日誌數據。

4.2 服務監控 依賴查詢

(點擊放大圖像)

服務監控

(點擊放大圖像)

5.後言

電商核心交易系統的高可用、高並發、高性能不是一朝一夕的,需要好的技術,更需要好的架構,如何找到落地點並一步步踏實落地,這是關鍵。有想法、有目標、有執行力,必有所成。

我們是技術人,但我們的很多工作並不一定要多高深的技術,業務和技術的平衡點才是最重要的。業務敏銳性對應用架構師和開發人員來說都尤為重要,因為更多的時候我們要的是解決方案而不是技術方案。

謹以此獻給那些在追求高可用、高並發、高性能道路上飛奔的同學們!祝你們早日三高:)

感謝郭蕾對本文的策劃和審校。

給InfoQ中文站投稿或者參與內容翻譯工作,請郵件至editors@cn.infoq.com。也歡迎大家通過新浪微博(@InfoQ,@丁曉昀),微信(微信號:InfoQChina)關注我們,並與我們的編輯和其他讀者朋友交流(歡迎加入InfoQ讀者交流群)。

相關內容

相關廠商內容

看Scala如何顛覆傳統金融企業 高可用網貸系統讓您投資無憂 微眾架構首秀--基於自主可控技術的分布式架構實踐 企業級SaaS應用平臺--釘釘技術歷程之路

相關贊助商

相關焦點

  • 關於高並發,我想告訴你這些!
    因此,這篇文章我會將重點放在基礎知識、通用思路、和我曾經實踐過的有效經驗上,希望讓你對高並發有更深的理解。先搞清楚高並發系統設計的目標,在此基礎上再討論設計方案和實踐經驗才有意義和針對性。高並發絕不意味著只追求高性能,這是很多人片面的理解。從宏觀角度看,高並發系統設計的目標有三個:高性能、高可用,以及高可擴展。
  • 6年拉力經驗,學了P8架構師的7+1+1落地項目,跳槽阿里年薪40W+
    其次,校招生進入阿里(p5級)的學習路線,是7+1+1的學習路線,按照這個來學習:1:多線程高並發2:JVM虛擬機3:設計模式(看坦克大戰一期項目)4:redis永不宕機隨時在線之服務高可用設計方案彈性伸縮雖易擴展之服務高擴展設計方案無限擴流極限承壓之服務高性能設計方案任你左顧右盼我自恆定不變之冪等阿里P8級架構師第二篇:幹億流量高並發高可用分布式系統之技術底層支撐篇
  • 京東架構師閆文廣:訂單系統高可用架構及演變過程
    隨著訂單量的增長、業務複雜度的提升,訂單系統也在不斷演變進化,從早期一個訂單業務模塊到現在分布式可擴展的高並發、高性能、高可用訂單系統。整個發展過程中,訂單系統經歷了幾個明顯的階段,通過不同的技術優化方案解決業務上遇到的問題。
  • 20 年架構老兵:進階架構師要搞懂的 12 個實戰案例
    也因此,許多人都是通過博客、書籍,技術大會等等,來學習架構知識。但一方面,這些內容比較碎片化,比如這一次講的是技術的高並發處理,下一次講的是老業務的改造。表面上看,你腦子裡塞得滿滿的,但實際上,你很難循序漸進、系統地去學習架構。
  • 強一致、高可用、自動容災能力背後,阿里X-Paxos的應用實踐
    阿里巴巴 X-Paxos 應用實踐X-Paxos 的整體架構X-Paxos 的整體架構如下圖所示,主要可分為網絡層、服務層、算法模塊、日誌模塊四個部分:服務層服務層是驅動整個 Paxos 運行的基礎,為 Paxos 提供了事件驅動,定時回調等核心的運行功能,每一個 Paxos 實現都有一個與之緊密相關的驅動層,驅動層的架構與性能和穩定性密切相關。X-Paxos 的服務層是一個基於 C++11 特性實現的多線程異步框架。
  • 課程實錄:大規模高並發下的分布式存儲架構設計
    【IT168 資訊】雲計算、大數據、人工智慧等技術的廣泛應用,使數據開始呈指數級增長。在海量數據時代,傳統存儲系統已難以滿足業務運行需求,分布式存儲大放異彩,發展迅速。但對於許多企業來說,提高存儲系統的並發性能仍然是一大挑戰,此外系統穩定性、靈活擴展能力、整合異構存儲資源的能力、以及對資源進行智能化管理的需求也不斷增長。
  • 帶你探秘1號店百億業務背後的移動IT架構
    【51CTO.com原創稿件】在WOT2016移動網際網路技術峰會上,來自1號店的高級架構師施華, 同與會者交流了1號店在性能優化方面的心得體會。1.0時代問題百出施華介紹到,在1號店移動架構1.0時期,由於移動端業務佔比較小,獲得的投入並不多, APP基本是移動後臺提供所有的APP接口服務,技術人員直接讀寫它的庫。核心業務如購物流程、詳情頁等,技術人員直接基於接口做AS封裝,開發資源的瓶頸非常嚴重。
  • Java後端技術從0到1技術路線,一步步走向大神!
    由於篇幅的限制,還有很多節點無法顯示出來,需要完整思維導圖的小夥伴,公眾號回覆:0021   獲取!《深入理解Java虛擬機 JVM高級特性與最佳實踐-周志明.第二版》《分布式Java應用:基礎與實踐.林昊》《Java並發編程的藝術.方騰飛》《阿里巴巴Java開發手冊(公開版)》《編程隨想:Java新手的通病》《Spring+MyBatis企業應用實戰-瘋狂軟體》《精通Spring+4.x++企業應用開發實戰
  • 【CTO講堂】如何構建高可用和可伸縮的架構?
    關注服務安全、架構健壯性(高可用、可測試、可追溯)等領域,參與了多個高壓力項目的結構設計,推崇高可用、可伸縮、低耦合的架構設計。公司簡介:七牛由國內雲存儲領域領軍人物之一許式偉於2011年創立,專注以數據為中心的公有雲服務市場,公司核心團隊在海量存儲等領域擁有超過十年的技術積累,核心技術完全自主研發。
  • 架構師成長計劃|如何利用雲原生構建一個企業級高可用架構?
    雖然雲原生現在已經得到了足夠多的關注,也正在以一種勢不可擋的勁頭發展,但是其在企業技術棧的落地應用上還不夠成熟,也面臨著不少的挑戰。那如何克服雲原生落地階段的常見難題?如何利用雲原生實現企業級高可用架構呢?如果你正在思考、探究,亦或被雲原生的落地問題所困擾,那麼,這場技術課程一定不能錯過!!
  • SACC2017:移動技術專場的大佬都談點啥?
    閒魚架構組技術專家談架構實踐閒魚APP相信很多人都有使用過,無論是作為買家還是賣家,都或多或少進行過相關交易,而本屆大會的移動技術專場的第一位演講嘉賓是來自阿里巴巴的無線技術專家、閒魚架構組技術專家王樹彬先生,其主要負責閒魚架構升級,治理以及國際化工作,有十年網際網路研發經驗,擅長高可用分布式系統架構、大數據應用和移動開發。
  • 阿里雙11流控降級組件Sentinel Go正式GA,助力雲原生服務穩穩穩
    隨著業務從單體架構向分布式架構演進以及部署方式的變化,服務之間的依賴關係變得越來越複雜,業務系統也面臨著巨大的高可用挑戰。在生產環境中大家可能遇到過各種不穩定的情況,比如:大促時瞬間洪峰流量導致系統超出最大負載,load 飆高,系統崩潰導致用戶無法下單。
  • 郭憶:網易資料庫高可用架構最新進展!
    講師簡介:  郭憶——七年雲端資料庫開發經驗,主導了網易私有雲關係資料庫服務的建設,支撐了網易雲音樂、考拉海購、網易新聞等大型網際網路應用,專注於雲端資料庫的高可用架構和性能優化。  share nothing架構的高可用解決方案,在MySQL 官方的主導下也日趨完善。
  • 【足跡】除了打造高可用的應用環境,FreeWheel的運維還幹了什麼?
    如果說FreeWheel這些外在的「迷之任性」吸引了眾多求職者目光的話,那麼吸引記者的,就是這家公司內在的IT架構與運維。這家歐洲、美國、中國三地辦公,其廣告平臺為美國90%主流電視媒體和運營商所使用的跨國企業,如何保證協同的高效?FreeWheel成立十年,從剛成立時全年廣告播放量累計100萬次,到單日廣告投放接近10億,運維部門用什麼來保證產品穩定的應用環境 ?
  • 如何防止網站高並發引起的系統崩潰?
    如何解決高並發引起的系統崩潰?讓我們來看一下。由高並發引起系統崩潰的解決方案二、由高並發引起系統崩潰的解決方案1.提高硬體能力、增加系統伺服器2.消息隊列在高並發時,資料庫壓力劇增下使用消息隊列,用戶的請求數據發送給消息隊列後立即返回,再由消息隊列的消費者進程從消息隊列中獲取數據,異步寫入資料庫。由於消息隊列伺服器處理速度快於資料庫,因此響應速度得到大幅改善。
  • 雲資料庫機型版本和產品架構介紹
    雲資料庫UDB MySQL是基於成熟雲計算技術的高可用、高性能的資料庫服務,讓我們能夠在幾十秒內完成部署、設置、操作和擴展;提供雙主熱備架構、備份、數據回檔、讀寫分離、監控、資料庫審計等全套解決方案,大大簡化了資料庫運維工作,有利於我們專注於應用程式研發及業務的發展。
  • 高可用是什麼意思?該如何保障系統的高可用?
    在討論伺服器領域的時候,我們常常會聽到「高可用」一詞,那麼「高可用」到底是什麼意思,應該怎麼去理解呢?高可用(HA)是分布式系統架構設計中必須考慮的因素之一,它通常是指,通過設計減少系統不能提供服務的時間。
  • 工商銀行MySQL資料庫架構解密
    比較高,銀行議價能力又比較低;  在這種情況下進行IT架構轉型,整體的訴求是優化應用架構、數據架構、技術架構,建立靈活開放、高效協同、安全穩定的IT架構體系,強化對業務快速創新發展的科技支撐。  1.2 轉型的核心訴求和策略  在上面的轉型大背景下,數據作為核心,我們展開了對開放平臺的資料庫的架構轉型,同時提出了幾個核心的策略:  l 第一,在業務支撐方面,做到高並發、可擴展、支持海量數據存儲及訪問