日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

高德深度信息接入的平台化演进

發(fā)布時間:2024/9/3 编程问答 65 豆豆
生活随笔 收集整理的這篇文章主要介紹了 高德深度信息接入的平台化演进 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

簡介:?本文介紹了高德地圖中POI深度信息接入在平臺化過程中的一些思考和實踐,從最開始的單體應用,隨著業(yè)務發(fā)展面臨挑戰(zhàn),從業(yè)務角度提出解決問題的思路和方案,進而轉化成技術設計并落地實現(xiàn)的過程。

導讀
本文介紹了高德地圖中POI深度信息接入在平臺化過程中的一些思考和實踐,從最開始的單體應用,隨著業(yè)務發(fā)展面臨挑戰(zhàn),從業(yè)務角度提出解決問題的思路和方案,進而轉化成技術設計并落地實現(xiàn)的過程。

背景
POI是Point of Interest的縮寫,即我們通常理解的地點信息。對普通用戶而言,POI數(shù)據(jù)除包含名稱、坐標等基本信息外,還會展示圖片、評論、營業(yè)信息等內容,這些我們統(tǒng)稱為深度信息。作為真實世界在線上的直接體現(xiàn),其豐富度、準確度、新鮮度對用戶的出行決策起到了至關重要的作用,也是高德地圖從生活服務等多方面服務大眾的基礎。

為了豐富深度信息,我們通過多種途徑對接采集數(shù)據(jù)。每個數(shù)據(jù)接入源稱之為一個CP(Content Provider)。最初只有少量CP的時候,每個CP建立一個應用,完全獨立的存儲、獨立的代碼,甚至采用的是完全不同的技術棧。

然而,隨著接入規(guī)模不斷上漲,這種單體應對模式逐漸無力支撐,無法批量生產、更新、運維、監(jiān)控等問題成為了業(yè)務迭代路上的絆腳石,大家花在基礎維護等事務上的精力占比甚至超過了業(yè)務迭代。

用一組數(shù)據(jù)說明下深度業(yè)務的發(fā)展速度:一個季度工作日130天左右,新接入的任務數(shù)量卻多達到120個以上。截止目前接入的任務總數(shù)是研發(fā)人數(shù)的100倍以上,單日處理數(shù)據(jù)量達十億規(guī)模。基于對這個趨勢的預判,深度團隊提前開始了平臺化的探索。

平臺化實踐
平臺化的思路是明確的,但是平臺化的具體設計實施卻有諸多不同的選擇。

大多數(shù)數(shù)據(jù)接入系統(tǒng)的設計目標都相對比較純粹:作為接入系統(tǒng),只要把數(shù)據(jù)拿到并輸入到本業(yè)務體系內就可以,剩余的如數(shù)據(jù)解析,業(yè)務處理都由下游的其他系統(tǒng)再次加工才可形成真正的業(yè)務數(shù)據(jù),即接入系統(tǒng)從設計之初就是無狀態(tài)的,對數(shù)據(jù)本身的理解也基本與業(yè)務無關。

但是考慮高德深度信息接入業(yè)務的特殊性,我們平臺化時并沒有采用這個方案,而是采用一種更集約化的思路,接入平臺本身對數(shù)據(jù)就需要有充分的理解,不僅負責數(shù)據(jù)接入,還要負責數(shù)據(jù)解析、維度對齊、規(guī)格映射及生命周期維護等相關內容,平臺直接內置了深度信息處理流程的全部管控邏輯。

另外,不同于一般的接入系統(tǒng),除研發(fā)(RD)外,產品(PM)也是系統(tǒng)的第一用戶,平臺需要有能力讓PM在了解有限技術約束的條件下自主完成全流程數(shù)據(jù)接入、分析和調試,這就對平臺所見即所得的實時設計調試能力提出了極高的要求。從平臺設計角度要解決以下一些難點:

  • 數(shù)據(jù)規(guī)模不均勻:不同CP的數(shù)據(jù)量和數(shù)據(jù)體積相差巨大,有的源數(shù)據(jù)量有幾億條,最少的CP甚至只有一條數(shù)據(jù)。具體到每條數(shù)據(jù)大小也差距懸殊,如部分數(shù)據(jù)單條達到7.5M,有的則只有一個字段,僅幾個字節(jié)。
  • 業(yè)務場景不收斂:深度數(shù)據(jù)來源多且雜:有三方合作接口、離線文件、經濟體內OSS、ODPS、MetaQ等,且CP數(shù)據(jù)結構和關聯(lián)匹配規(guī)則多種多樣、無法預知,需要平臺在設計上能支持各種場景下的維度對齊。
  • 映射清洗邏輯復雜:這里還有一個和常規(guī)業(yè)務不同的點,高德深度數(shù)據(jù)采用Schema比較松散的JSON方式組織,有多層嵌套對象及數(shù)組字段,且不同行業(yè)的規(guī)格并不一樣,平臺最終需要把數(shù)據(jù)組織成近百套不同規(guī)格的數(shù)據(jù),這種松散的、非扁平二維表的數(shù)據(jù)處理也是挑戰(zhàn)之一,尤其是存在數(shù)組上下文的場景里。

    轉存失敗重新上傳取消

最終我們設計出如圖所示的平臺架構,平臺集成了基礎、轉換、推送和任務調度四個模塊,配合完成深度信息接入的全部工作。

平臺分為幾個模塊:

基礎模塊:負責CP、行業(yè)、規(guī)格、權限等基礎信息的在線化,實現(xiàn)統(tǒng)一管理。

轉換模塊:負責數(shù)據(jù)獲取、維度對齊、規(guī)格映射等處理。

推送模塊:負責轉換后規(guī)格數(shù)據(jù)推送至下游準入服務。

任務模塊:負責對任務的管理,如任務類型、積壓策略和數(shù)據(jù)差分等。

轉換引擎設計

轉換模塊由轉換引擎、轉換管理器、設計器和調試器四部分組成。

為了降低系統(tǒng)的設計復雜度,所有業(yè)務規(guī)則的自定義部分均由轉換模塊支持。轉換模塊作為業(yè)務自由度最高的模塊,使用相同的底層支持了上層業(yè)務的預轉換、轉換和數(shù)據(jù)分析三種場景,是系統(tǒng)能支持各種復雜業(yè)務場景的核心部分,轉換引擎要支持數(shù)據(jù)獲取、維度對齊、規(guī)格映射清洗等配置化及調試功能最復雜多變的部分。

數(shù)據(jù)獲取
數(shù)據(jù)獲取能力不僅要支持常見的HTTP、OSS、ODPS、MTOP、MetaQ及Push服務等多種方式,而且還要支持組合疊加。比如先從OSS下載一個文件,解析文件行,根據(jù)解析的數(shù)據(jù),再調用HTTP服務等場景。

為了支持近乎無限的業(yè)務疊加能力和所見即所得的設計效果,我們調研了阿里經濟體內外的多種解決方案,如Blink、Stream平臺等,沒有發(fā)現(xiàn)可以直接滿足我們業(yè)務需求的組件,主要問題為:

  • 基于技術維度組織,需要大量寫代碼或理解技術語義,無法提供業(yè)務視角,對數(shù)據(jù)PM的理解和使用有極大的障礙。
  • 步驟數(shù)據(jù)視圖是扁平二維表,無法實現(xiàn)松散結構傳遞和處理。如果在步驟間自定義業(yè)務約束及協(xié)議則過于復雜。
  • 無法支持實時無副作用調試,運行流程和調試流程數(shù)據(jù)會互相污染。

基于以上分析,我們決定不在上述平臺上進行二次開發(fā),而且直接基于當前業(yè)務場景定制一套引擎,雖然這些引擎無法直接使用,但是PDI的步驟組織及驅動方式和我們的業(yè)務場景比較匹配,從自由度、表達力和直觀性幾個角度考慮,轉換引擎舍棄了DAG這種依賴計算和并行調度都相對容易的技術模型,使用和PDI類似的有向圖模型進行組織。

轉存失敗重新上傳取消


為了最大限度的支持PM直接對業(yè)務場景進行描述,我們最終采納了PDI的轉換引擎設計思路,直接以原始有向圖方式對步驟進行驅動執(zhí)行,最大限度保持設計直覺和運行時的邏輯一致,從而不需要實現(xiàn)引擎層面的翻譯器、優(yōu)化器、執(zhí)行器等復雜組件。

轉存失敗重新上傳取消


為了保證引擎的執(zhí)行效率和安全性,我們保證步驟間數(shù)據(jù)傳遞不會跨進程,所有數(shù)據(jù)交互全部在內存內完成,且步驟之間均為異步并行執(zhí)行,通過背壓感知機制從后向前傳導,平衡各步驟間的處理速度差異。

維度對齊
維度對齊是指把不同數(shù)據(jù)源、不同維度的數(shù)據(jù)通過給定的業(yè)務規(guī)則關聯(lián)整合成某一種維度的數(shù)據(jù),比如深度信息業(yè)務一般需要整合成POI維度的數(shù)據(jù)。理論上有了引擎提供,能直觀表達并堆疊業(yè)務的能力可以實現(xiàn)維度對齊的需求。但是,深度信息還有一個問題要解,即面對數(shù)據(jù)PM使用實時調試的需求,所以無論復雜還是簡單的轉換都需要能隨時調試,并直觀地展示結果,方便數(shù)據(jù)PM快速分析和排查。

常規(guī)ETL里都會涉及維度對齊的問題,但是由于常規(guī)業(yè)務一般都是二維數(shù)據(jù)表間的關聯(lián)整合,所以像PDI之類的方案基本都是通過SQL+臨時表的方案進行處理,在設計時即綁定了輸入輸出,調試和運行并無本質的區(qū)別,或者調試時需要修改配置,強制輸出到一個臨時存儲,這意味轉換引擎需要依賴特定的外部環(huán)境(如特定的數(shù)據(jù)庫表),造成調試和運行時的數(shù)據(jù)會互相污染。

我們的數(shù)據(jù)天然不是二維結構,無法平鋪到表中,自然也就無法使用這種方案。我們采用的是只依賴本機內存+磁盤的方式進行數(shù)據(jù)處理,如flatten這種數(shù)據(jù)打散的需求直接用內存實現(xiàn),不需要借助存儲;像merge join等可能全量數(shù)據(jù)交叉運算的直接采用本地磁盤做輔助,實現(xiàn)了全部功能都不需要外部特殊環(huán)境支持,秉承這個思路,我們最終實現(xiàn)了具備如下能力的轉換引擎:

純引擎

  • 不寫數(shù)據(jù),不生成執(zhí)行記錄。
  • 不依賴任務及特殊執(zhí)行環(huán)境。
  • 可以隨時初始化并執(zhí)行。

數(shù)據(jù)透出
轉換配置不需要指定輸出,數(shù)據(jù)輸出步驟動態(tài)掛接。

多種場景管理器:任務場景會寫到DB,調試場景通過WebSocket回傳到前端頁面。

有了這樣的引擎,綜合考慮調試場景的要求,轉換在設計時不再需要指定輸出目標,輸出目標會在運行時由場景管理器根據(jù)調試場景和正常運行場景動態(tài)掛接,避免數(shù)據(jù)互相污染。平臺在Web端支持幾乎所有層次的所見即所得的調試分析功能,覆蓋了預轉換、轉換、清洗、推送等幾乎所有環(huán)節(jié)。

規(guī)格映射清洗
為了支持松散Schema映射和透明擴展,轉換的行模型(RowSchema)創(chuàng)新性的設計為雙容器結構。

  • 主數(shù)據(jù):承載上游步驟的直接結果數(shù)據(jù)。
  • 數(shù)據(jù)托盤:承載轉換參數(shù)、步驟變量、映射結果等內容。

    轉存失敗重新上傳取消

映射步驟通過映射類型、映射規(guī)則和清洗參數(shù)支持映射清洗一體化。

  • 正向映射:自上而下進行數(shù)據(jù)提取,以擴展JSONPath表達式(擴展了主數(shù)據(jù)、數(shù)據(jù)托盤、數(shù)組循環(huán)item等上下文語義)為主,多種映射類型為輔。
  • 反向清洗:自下而上逐層清洗,可任意疊加策略。

轉換模塊通過步驟、映射、字段清洗三個層次對數(shù)據(jù)進行處理,PM使用時只需要通過Web界面拖拽對應組件并簡單填寫一些業(yè)務參數(shù)即可完成配置。

為了避免業(yè)務黑盒問題,系統(tǒng)設計不同于Stream平臺的一個地方是系統(tǒng)組件會向后兼容,步驟插件、映射插件、清洗插件都沒有版本的概念。系統(tǒng)不支持的自定義業(yè)務在各個系統(tǒng)模塊均可以寫腳本(Groovy)的方式托底實現(xiàn),但是不允許上傳二進制包,代碼必須以配置形式直接體現(xiàn),避免后期的維護問題。

生命周期管理
生命周期是指系統(tǒng)要在適當?shù)臅r機觸發(fā)數(shù)據(jù)的新增、更新、刪除操作。站在數(shù)據(jù)接入的角度,刪除是一個較為復雜的過程,業(yè)務術語稱之為下線。要說清楚下線問題得先說下深度信息的任務模型。

目前我們支持批處理和流處理兩種模型,如大家直觀理解的,批處理任務每次執(zhí)行都會遞增一個批次號,比如常見的定時任務類型。流模型指任務一旦打開就會始終保持運行,數(shù)據(jù)一般是通過MetaQ、Push服務等方式被動接收的,沒有批次概念。

為了滿足業(yè)務需求我們支持批次過期、時間過期、條件下線三種策略,且支持多策略疊加使用。而這些策略設計時也有各自要考慮的內容,如批次過期怎樣避免掃描全批次的歷史記錄、歷史和重試場景批次號的共享遞增問題;時間過期如何避免對每條記錄綁定定時器造成的定時器數(shù)量爆炸等等。

生命周期管理涉及到比較多的任務模塊設計內容,比如任務調度模型及多機分片機制設計,任務預警熔斷邏輯設計,存儲表的設計等,由于深度信息業(yè)務的集成需求,接入平臺沒有選用開源或阿里經濟體現(xiàn)有的任務調度框架,而是自己定制開發(fā)了一個,篇幅有限這里不再展開論述。

小結展望
深度信息接入平臺見證了高德深度接入飛速發(fā)展的幾年,以極低的人力投入支撐了高德在各垂類領域的深耕拓源,為高德向生活服務類高頻應用拓展提供了底層數(shù)據(jù)支持。未來我們還將在全鏈路Debug、運營精細化場景支持、非標數(shù)據(jù)處理、自由業(yè)務編排平臺等方面繼續(xù)深化和演進。

總結

以上是生活随笔為你收集整理的高德深度信息接入的平台化演进的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。