《李鑫-去哪兒網國內酒店訂單交易業務架構.pdf》由會員分享,可在線閱讀,更多相關《李鑫-去哪兒網國內酒店訂單交易業務架構.pdf(48頁珍藏版)》請在三個皮匠報告上搜索。
1、去哪兒網國內酒店訂單交易業務架構主講人:李鑫演講嘉賓介紹李鑫 Qunar國內酒店交易技術負責人 擔任軟件研發工程師,現負責國內酒店交易技術團隊 涉及訂單交易、訂單履約、資金結算、預售、輔營交易等相關業務領域迭代擴展和系統架構優化 對高并發、微服務高可用,有建設優化經驗 專注業務復雜度分離和突破技術復雜性、提升系統彈性之道 Qunar技術系列-領域驅動設計優秀講師業務架構BA(業務領域專家)從業務或產品視角,描述整個平臺或某個產品的實現(含業務模式、業務流程)業務架構定義企業做什么、業務流程定義 企業怎么做 業務領域專家更深入了解業務、從更高、更抽象層次表達業務需求、分析需求、業務建模 技術變動
2、取決于產品、產品變動取決于業務 講技術要結合業務,脫離業務講技術,就是”耍流氓”產品架構(產品專家)、應用架構(AA)產品架構將各業務板塊-細化出-功能板塊-細拆出-核心功能 應用架構(平臺視角)描述平臺架構,分為兩種(一種是企業級應用架構,一種是單系統的應用架構),是一組應用系統及其交互關系的描述,用于支撐業務功能、管 理數據資產;產品專家(新手-勝任-精通-專家)不僅保質保量完成任務、有思考、建立全局觀大局意識、探尋有創造力解決方案技術架構TA(技術架構師)、數據架構DA 技術架構,從技術層面描述業務實現,思考技術服務或技術服務及組件之間的交互關系,包括技術選型、語言、框架、部署方案、微服
3、務、存儲方案、一致性方案等等 數據架構是通過對企業戰略得到的數據資產管理藍圖,用于指導分析數據需求前言如何實現業務、產品、技術統一戰略BATA、DA、AA需求設計業務架構師技術架構師戰略是公司高層的設計是業務架構師的需求業務架構師是“戰略進業務架構出”業務架構是業務架構師的設計是數據、應用、技術架構師的需求環環相扣:上層驅動下層、下層支撐上層管理層設計需求戰略&4ACONTENT目錄目錄2023K+0 01 1領域驅動設計訂單交易業務架構訂單交易技術架構0 02 20 03 3Part 01領域驅動設計DDD理論篇DDD 理論篇 DDD 是什么領域驅動設計,通常需要進行大量的業務的知識梳理,然
4、后軟件設計最后軟件開發,在業務知識梳理梳理過程中,必然會形成某個領域知識,根據領域知識一步步驅動軟件設計就是領域驅動設計的基本概念DDD體系比較龐大,最核心的是領域邊界的劃分,對于我們開發來講,學習DDD思想,應用DDD戰術工具,對于提升我們的業務架構能力,駕馭復雜業務系統的設計都會有一定提升和幫助DDD也是一種架構設計方法論,通過事件風暴、讓我們能夠更清晰發現和理解業務價值,抽象化構建通用語言,幫我們設計出清晰的領域和邊界,再通過邊界劃分將復雜業務的領域化領域驅動設計并不是降低業務的復雜性 DDD 有什么價值清晰的業務模型邊界,可以讓我們更專注業務視角,夠幫助業務人員和開發人員梳理清楚復雜的
5、業務規則,開發出來的軟件也能夠準確表達業務規則通過建立通用語言、可以減少產品與研發、業務人員之間的溝通鴻溝,在不斷完善領域模型過程中可以使用新的工具戰略技術、戰術技術讓我們更清晰的劃分模塊與依賴、進行業務建?;驊糜谖⒎詹鸱值?DDD 核心支柱是什么(通用語言和限界上下文是DDD兩大核心支柱)如何構建通用語言,其最大的挑戰就是需要我們花費時間、精力去思考、分析業務和專家溝通共同構建改進通用語言,最終達成共識;再通過事件風暴,劃清業務邊界、分析領域模型、識別出限界上下文.DDD 核心概念讓我們先初步認識DDD中重要概念包括的內容:戰略設計、戰術設計、領域、限界上下文、實體、值對象、領域服務、聚
6、合、工廠、領域事件、事件風暴、倉儲等接下里我們講結合案例為大家一一講解什么是戰略設計?業務視角分析建立業務領域模型劃分領域邊界建立通用語言識別限界上下文如何實現戰略設計?事件風暴拆解業務(用例分析或場景分析.)建立領域模型梳理領域對象之間的關系發散收斂領域專家+團隊資源 事件風暴 通用語言 過程中產生的領域對象歸類形成聚合、劃分BC、建立領域模型DDD 戰略設計過程中必定會產生各種實體、命令、事件等領域對象我們將這些領域對象歸類聚合,同時劃分限界上下文,建立領域模型這是一個從發散到收斂的過程什么是問題空間?每個業務都有一個對應的業務模型(業務模型不是領域模型)設計業務模型的過程中無需關注軟件設
7、計思想,而是我們需要從業務本身出發,分析提煉業務邊界范圍、業務概念和確認業務之間的關系;什么是解決方案空間?在進行DDD領域驅動設計實踐時,需要進行需求分析、領域劃分、領域建模等工作系統落地實施則需要考慮解決方案,解決方案不宜過大弊端必定會導致各模塊或組件都耦合一起,不利于整個系統的維護和伸縮,所以我們需要把解決方案拆分為獨立【領域】和【解決方案】領域代表 問題空間 解決方案本代表 解決方案空間.解決方案該如何拆分?解決方案的拆分是多維度的需要從系統性能,架構,伸縮性等角度拆分,多考慮一些因素,使我們更好的進行解決方案空間的拆分【領域模型】是DDD軟件設計方法論中的核心概念,它是業務分析、軟件
8、設計的綜合結果,領域模型存在于某個解決方案空間里任何一個領域模型都是在特定的邊界內才有意義領域可以劃分大小結合重要性,拆分核心子域、支撐子域;限界上下文,就是為了表達上面某個解決方案的上下文邊界戰略設計思想考慮問題空間與解決方案空間DDD 戰略設計思想通用語言是什么針對對同樣的領域知識,不同的參與角色可能會有不同的理解,為了避免溝通鴻溝,領域建模過程中就出現了“通用語言”和“限界上下文”通用語言是在通過團隊交流、溝通、協商形成的統一定義,其作用能夠簡單、清晰、準確描述業務涵義和業務規則的一種語言,也包含業務術語,可以直接反映在代碼邏輯,其中通用語言中的名詞可以給領域對象命名、通用語言中的動詞則
9、表示一個動作或一個對應領域事件或者一個命令;事件風暴事件風暴,是一種快速探索復雜業務領域建模的實踐,從領域中關注業務事件,過程中團隊經過充分討論,統一語言,找到領域模型通過收集尋找領域事件、命令、角色、聚合 劃分領域、識別限界上下文、劃分子域(核心域、支撐域、通用域、或其他子領域)如何事件風暴前期準備階段項目成員任何角色都可以參加尋找領域事件場景分析、事件分析、按流程或順序梳理領域事件、注意連鎖反應、避免遺漏尋找命令、角色按事件運行機制和流程、確認 什么角色 在 什么條件 發送了 什么命令、觸發了 什么領域事件 尋找領域模型、聚合和邊界相同概念命令和事件聚合確認聚合根、實體、值對象、劃分子域和
10、限界上下文通用語言&事件風暴Part 02訂單交易業務架構技術架構升級解決支持復雜差異化業務發展業務概述(業務架構、系統交互、角色定位、簡要流程)訂單架構演化&技術架構升級賦能業務思考領域內資金業務通用性解決方案-資金流應用背景資金特性提取(原子性、可追溯、完整性、隔離性、實現原理)協議層 關心試圖、對外服務應用層 業務編排、驗證、集成多個領域服務解決問題領域層 通過分層架構、領域拆分、邊界劃分、負責業務完整性和規則描述商品域:引入電商模型與傳統電商不同、引入SPU/SKU 抽象了SU庫存單元、PU價格單元,解決產品定價策略問題訂單域:負責訂單信息流、資金流、狀態相關、正逆向流程等解決處理用戶
11、訂單交易問題支付域:負責支付業務分賬、資金正向、逆向流程、與支付結算平臺交互、封裝處理資金問題OFC:負責訂單履約業務、包括訂單確認或審核解決用戶支付之后訂單履約業務問題調度中心:通過規則引擎器,實現動態生產執行鏈、實現能力編排調度和配置化管理等,既增強了業務流程靈活性、減少了業務系統間耦合倉儲層:KV存儲架構、支持事務、提供共性問題統一的解決方案業務概述-業務架構 業務概述-簡要系統交互圖供應鏈完成貨源接入和貨源管理報價中心+營銷策略解決售賣產品定價業務問題搜索排序+召回精準返回用戶檢索結果網關層分發用戶預訂訴求請求構建交易訂單能力(包括生單、支付、逆向取消、離店解凍等服務)、解決用戶交易流
12、程問題結算財務:訂單履約之后交易完成資金分賬處理、通知結算財務和代理商交易基建(包括非結構化存儲方案,冷熱數據處理、數據歸檔、異步事件管理等)承載國內酒店訂單交易用戶交易行為和訂單履約交易服務,控制訂單全生命周期數據流轉、業務流程完成業務建模、結構建模、狀態建模 上游主站,依賴酒店交易完成用戶端交易行為工單/代理商,依賴酒店交易完成訂單履約流程 下游結算財務交易輸出訂單結算對賬業務 交易交易支撐系統保證訂單數據完整性、準確性、一致性提供訂單交易通用功能服務化、承接整個交易環節,保障酒店訂單業務正常流轉 業務概述-交易系統角色定位角色定位關系網生單預訂 業務概述-簡要生單流程領域事件必須對業務有
13、價值有助于形成完整的業務閉環(即一個領域事件將導致進一步的業務操作),當一個完整的業務流程通過上述方式匯總用戶,命令,事件、領域對象進行組合獲得聚合 業務概述-生單流程&事件抽取領域事件收集領域事件:場景分析+事件順序“角色”+“策略”發送“指令”產生了“領域事件”無法同時滿足用戶、商家、平臺多業務線等訴求 無法有效改變供需關系 無法支持差異化業務流程現存業務架構無法解決應對不同領域復雜性問題 酒店交易訂單系統架構演化架構缺陷領域問題商客架構業務發展創新發展復雜業務通用性解決方案高效率、低成本快速支撐復雜業務發展戰略支撐實現業務增長空間低價更優質服務履約流程增收增產收益多元化探索酒店交易架構發
14、展與收益提升商家領域平臺用戶領域技術架構升級賦能業務思考商單報價缺陷商客架構-領域拆分(解決確認問題空間)訂單架構升級,業務建模,重塑業務流程拆分對客域、對商域、履約域3個領域、建設商單交易、商單進訂、下沉系統、對賬系統4個系統以及異常流程保障機制對客視角業務領域 解決用戶預訂履約問題對商視角業務領域-解決商單訂單交易流程和對商定價問題商單交易系統 解決對商訂單交易問題處理(商單生單服務、支付服務、變更服務)商單進訂系統 搭建對商業務的定價流程、解決對客對商定價邏輯差異性,保證商客定價業務的獨立性,降低交叉影響和腐化;訂單履約領域建設-解決工單商客運營流程,滿足對客視角、對商視角不同業務訴求下
15、沉系統建設 商客通用能力打包整合下沉 提升研發效率40%和縮短交付時間 ACK機制 消息事件 檢查動作 重試機制 最終一致性 異常報警 人工兜底 業務健康度可視化 客單領域完成業務 商單領域數據同步商客架構-流程一致性處理核心思路方案兜底措施 構建商客資金最后一道防線、檢查對比糾錯每一筆資金 降低財務人力成本、自動化建設 消息驅動、任務分發、異常補償 ES 月維度創建賬單索引、提升查詢效率 雙邊對賬、滾動對賬核心思路核心業務商客架構-資金準確性保障-對賬系統采用專業對賬方式 措施包括(雙邊對賬+滾動對賬+差錯池人工審核)雙邊對賬:分別以交易訂單資金數據和支付中心資金賬單數據相互為基準進行對賬,
16、防止單邊滾動對賬:設計緩存池、解決系統因日期切入點不一致導致的單邊差錯數據問題差錯處理:支持人工復核差錯池訂單 訂單正向業務訂單創建普通支付、信用授信 訂單履約 發票業務 訂單逆向業務來源:用戶側、運營側、代理商訂單取消、階梯/非階梯、規則內外、多次退款指定間夜等、訂單拒單、產生缺陷 訂單返現業務流程申請、領取、兌換類型:傭金返現、促銷返現、任務返現 預售業務預售報價、APP端在線預約、逆向業務 對客、對商業務應對業務差異化、復雜性等業務概述-交易能力建設報價產品類型、優惠類型繁多業務場景復雜疊加報價類型 40+報價、促銷資金相關屬性150+繁雜定義專屬專用 二、領域內-復雜資金業務通用性解決
17、方案零散結構化定義資金主題多級目錄消除歧義 資金流特性提取-原子性 資金流特性提取-追溯&完整&流向我要用戶支付金額?資金流特性提取-隔離&原理資金主題:拆解最小顆粒度、消除語義二義性、保證原子性資金角色:依據主題匹配角色、確認資金出資、接受方資金動作:產生資金時機、只追加、不覆蓋、保證數據完整性資金行為:業務保證資金業務隔離性、消除專屬 資金流實體定義Part 03訂單交易技術架構存儲方案四層架構DDD 脫敏代碼實踐(核心要點、遵守原則)技術架構-演進技術架構-存儲方案常規關系數據模型存儲&困擾 維護成本高&可讀性差 可能經常性的修改表結構,采用關系數據庫,可能需要拆分幾十甚至上百張表中,理
18、清這些關系往往需要畫一張錯綜復雜的ER關系圖、維護成本大 致命缺點關系模型依賴業務人員編寫SQL(依賴索引設計、可能出現慢查詢、影響整個系統穩定性)對于訂單交易系統來說出現大量的事務帶來的死鎖、嵌套查詢、組合查詢等問題都是;酒店交易數據模型存儲方案理解訂單業務,拆分不同訂單實體或值對象(產品值對象、購買單元、資金實體、主單實體、履約實體等等)序列化為一個字符串存儲在關系數據庫中優勢:這種Schemaless的設計調整節點的結構,直接在業務代碼中修改即可存儲層沒有額外的成本文檔模型的結構更加直觀清晰,有效表示各種復雜的關聯關系訂單交易大多數的查詢場景都是基于訂單號的(一個訂單的所有數據聚合在一起
19、,相比于從幾百張表中按照關聯關系依次分散查詢,效率更高)基于關系數據庫事務ACID+采用非結構存儲 數據冷熱、數據歸檔 讀寫分離、緩存策略、垂直水平 Sharding策略,不停機動態擴容DB 最終一致性 熔斷機制 非結構化+ACID 降低SQL形式訂單檢索弊端 基于持久消息異步更新、數據不丟失保證數據的完整性、熱點數據高效訪問性、系統高可用壓縮率96%緩存命中率 98%響應時間 3-5ms可支持17倍流量增長 支持動態擴容 技術架構-存儲方案核心 用戶接口層只用于處理用戶顯示和用戶請求和數據的渲染展現,不應該包含領域或業務邏輯 應用層應用服務位于應用層中.用于控制持久化事務、安全認證、輕量級,
20、用于協調對領域對象的操作通常用途:接收來自用戶界面的輸入參數,再通過資源庫獲取到聚合實例,然后執行相應的命令操作 領域層或稱為模型層系統的核心,負責表達業務概念,業務狀態信息以及業務規則包含了該領域(問題域)所有復雜的業務知識抽象和規則定義,主要精力要放在領域對象分析上,可以從實體,值對象,聚合(聚合根),領域服務,領域事件,倉儲,工廠等方面入手 基礎設施層領域模型提供持久化機制四層松散結構功能簡介 用戶選購商品 生單支付、預定成功 代理商完成下單、成功或拒絕 或用戶發起逆向取消退款流程用戶接口層只用于處理用戶顯示和用戶請求和數據的渲染展現,不應該包含領域或業務邏輯訂單用戶接口層代碼實踐(脫敏
21、示例)安全驗證輕量級協調領域對象的操作持久化處理通過資源庫獲取聚合實例應用層代碼實踐(脫敏示例)要點&原則保護內部狀態對于領域結構非常重要使用getter&setter方會公開聚合的內部會導致聚合處于不一致狀態。工廠模式創建聚合根大型復雜業務系統,實體和聚合創建過程很復雜,很難去通過簡單構造器方式來創建對象;其他對象可以自動創建保證聚合不變條件、封裝復雜性工廠-聚合根(脫敏示例)要點&原則倉儲、持久化聚合根注解倉儲用于保存和獲取聚合對象,應該將倉儲看作一個對象的集合,而不是數據庫的CRUD倉儲層(脫敏示例)持 久 化聚 合 內 部 強 一 致 性要點&原則一個實體、獨立生命周期聚合根到聚合根:
22、通過ID關聯;聚合根到其內部的實體或值對象直接對象引用;要有公開行為接口保護內部狀態、封裝、不變條件全局標識、建模對象導航性、訪問原則根實體行為提交訂單、確認訂單、取消訂單聚合根(脫敏示例)要點&原則只有聚合根才能被外部訪問到聚合根維護聚合的內部一致性唯一標識生命周期有狀態體現相關業務行為行為資金實體(脫敏示例)要點&原則資金實體賦予資金相關方法領域中的服務表示一個無狀態的操作,用于實現特定于某個領域的任務。當某個動作不適合放在聚合對象上時,可以使用領域服務妥協措施、非必要支付領域服務(脫敏示例)要點&原則內外聚合內一致性處理方案文檔結構、聚合根、ACID聚合間一致性處理方案事件驅動、最終一致
23、性聚合一致性方案聚合內一致性(脫敏代碼示例)聚合內:以聚合根作為對外的接口人,聚合內部保證數據強一致性,代碼中通過版本控制以及同時更新的方式保證文檔結構、聚合根(實體、值對象)、利用 ACID特性 從而保證強一致性訪問原則通過全局唯一標識來引用外部聚合在邊界外使用最終一致性滿足一個事務只修改一個聚合原則、利用消息隊列提供失敗重試機制、完成最終一致性訂單聚合 支付聚合 避免 大聚合、加載、高耦合好處減少更新并發沖突獨立的生命周期和問題域避免大聚合兩個聚合的問題空間、解決方案空間、領域模型不一樣(訂單域處理訂單業務流程、資金信息流程等、支付域處理資金交互中心、分賬、解凍等)、通過事件驅動、保證狀態
24、的最終一致性聚合間一致性(脫敏代碼示例)要點&原則聚合外最終一致性(原則)一個事務只能更新一個聚合先保證聚合一致性再發送領域事件消息隊列、重試、冪等保證最終一致性,業務準確性要點&原則審核域訂單域支付域發送事件監聽監聽發送事件處理保存處理保存處理保存聚合外最終一致性(脫敏代碼)領域服務、應用服務、實體行為 設計原則戰略設計戰術設計領域分析領域建模領域驅動領域驅動設計一種思想、一種科學方法論、從戰略到戰術設計過程讓RD設計思路更清晰、更規范領域驅動處理高度復雜業務的方式、不是降低復雜度、建設核心穩定的領域內核模型、有利于知識領域傳承領域驅動強調團隊和領域專家合作、建立溝通良好的團隊,有助于RD提升OO思想和駕馭復雜業務系統設計能力戰略設計為我們提供一種高層視野來審視我們的軟件系統,主要包括領域/子域、通用語言、限界上下文和架構風格等概念,戰術設計的目的是保證戰略的實現在DDD中,不再需要那些無法得到實時更新的設計文,代碼就是設計本身;創建行為飽滿的領域對象,將領域對象當做是服務的提供方,多思考一個領域對象能夠提供哪些行為,而不是數據容器面向數據開發 VS 領域驅動THANKS