<del id="nnjnj"></del><track id="nnjnj"></track>

<p id="nnjnj"></p>

<address id="nnjnj"></address>

    <pre id="nnjnj"><pre id="nnjnj"></pre></pre>

      <noframes id="nnjnj"><ruby id="nnjnj"><ruby id="nnjnj"></ruby></ruby>

      • 自動秒收錄
      • 軟件:1973
      • 資訊:57811|
      • 收錄網站:279872|

      IT精英團

      談如何設計未來的倉庫建筑

      談如何設計未來的倉庫建筑

      瀏覽次數:
      評論次數:
      編輯: 陽煦
      信息來源: ITPUB
      更新日期: 2022-05-18 20:57:35
      摘要

      編輯:數據社全文共3758個字,建議10分鐘閱讀大家好,我是峰哥,夏天已經來了,小麥馬上要豐收了,今天分析一篇關于未來數倉架構發展方向的文章。Linked大佬JayKreps曾發表過一篇博客,簡單闡

      • 正文開始
      • 相關閱讀
      • 推薦作品

      編輯:數據社會

      全文共3758字,推薦10分.閱讀

      大家好,我是風哥。夏天來了,馬上就要麥收了。今天分析一篇關于倉庫架構未來發展方向的文章。

      Linked boss Jay Kreps曾經發表了一篇博客,簡要闡述了他對數據倉庫架構設計的一些想法。從Lambda架構的缺點到基于實時數據流的Kappa架構?;贙appa架構,本文將進一步討論數據倉庫架構的設計。

      01什么是Lambda架構?

      借用Jay Kreps的一個圖,Lambda架構主要由這幾部分組成:數據源(Kafka)、數據處理(Storm、Hadoop)和服務數據庫(Serving DB)。數據源和服務數據庫是整個架構數據的入口和出口。數據處理分為兩部分:在線處理和離線處理。

      當數據通過kafka消息中間件進入Lambda架構時,會同時進入離線處理(Hadoop)和實時處理(Storm)兩個處理模塊。離線進行批量計算,匯總大量T 1數據。實時處理是流處理或微批處理,計算秒和分的結果。最后,它們都被輸入到服務數據庫(Serving DB)進行匯總,并暴露給上層服務調用。

      Lambda架構的優點是:架構簡單,很好的結合了離線批處理和實時流處理的優點,實時計算開銷穩定可控。

      此外,它對數據修改也很友好。如果改變后期數據的統計口徑,重新運行離線任務,可以快速將歷史數據修正為最新口徑。

      但是,Lambda也有很多問題。

      其中Jay Kreps認為最突出的問題是需要同時維護實時處理和離線處理兩套代碼,并保證兩套處理結果一致。這無疑是一個非常令人頭疼的問題。

      02什么是Kappa架構

      杰伊克雷普斯認為,通過增加并行度,非常非??焖俚鼗胤艢v史,可以對實時數據進行再處理,從而避免在實時數據處理系統上“粘”上另一個離線數據處理系統。所以,他提出了這個架構:

      Kafka或其他消息中間件,具有保留多天數據的能力。一般情況下,kafka吐出的是實時數據,通過實時處理系統進入服務數據庫(Serving DB)。

      當系統需要數據修改時,重放消息,修改實時處理代碼,擴展實時處理系統的并發性,快速回溯過去的歷史數據。

      這種架構簡單,避免了兩個系統之間維護相同結果的問題,也解決了數據修改的問題。

      但它也有它的問題:

      1.由消息中間件緩存

      數據量和回溯數據有性能瓶頸。通常算法需要過去180天的數據,如果都存在消息中間件,無疑有非常大的壓力。同時,一次性回溯訂正180天級別的數據,對實時計算的資源消耗也非常大。

      2、在實時數據處理時,遇到大量不同的實時流進行關聯時,非常依賴實時計算系統的能力,很可能因為數據流先后順序問題,導致數據丟失。

      例如:一個消費者在淘寶網上搜索商品。正常來說,搜索結果里,商品曝光數據應該早于用戶點擊數據產出。然而因為可能會因為系統延遲,導致相同商品的曝光數據晚于點擊數據進入實時處理系統。如果開發人員沒意識到這樣的問題,很可能會代碼設計成曝光數據等待點擊數據進行關聯。關聯不上曝光數據的點擊數據就很容易被一些簡單的條件判斷語句拋棄。

      對于離線處理來說,消息都是批處理,不存在關聯不上的情況。在Lambda架構下,即使實時部分數據處理存在一定丟失,但因為離線數據占絕對優勢,所以對整體結果影響很小。即使當天的實時處理結果存在問題,也會在第二天被離線處理的正確結果進行覆蓋。保證了最終結果正確。

       


      03

      Flink的解法

       

      先整理一下Lambda架構和Kappa架構的優缺點:

      Kappa在拋棄了離線數據處理模塊的時候,同時拋棄了離線計算更加穩定可靠的特點。Lambda雖然保證了離線計算的穩定性,但雙系統的維護成本高且兩套代碼帶來后期運維困難。

      為了實現流批處理一體化,Blink采用的將流處理視為批處理的一種特殊形式。因此在內部維持了若干張張流表。通過緩存時間進行約束,限定在一個時間段內的數據組成的表,從而將實時流轉為微批處理。

      理論上只要把時間窗口開的足夠大,Flink的流表可以存下上百日的數據,從而保證微批處理的“微”足夠大可以替換掉離線處理數據。

      但這樣做存在幾個問題:

      1.Flink的流表是放在內存中,不做持久化處理的。一旦任務發生異常,內存數據丟失,Flink是需要回溯上游消息流,從而轉為Kappa的結構。

      2.數據窗口開的越大,內存成本越高。受限于成本,對大量數據處理仍然有可支持的物理空間上限。

      3.下游接收的通常都是處理結果,對于內存中的流表數據是無法直接訪問的。這樣無形中增加了開發成本。

      結合以上幾個問題,我們提出了混合數倉架構。試圖在綜合實時數倉和離線數倉的優點,盡量規避各自的缺點。

       


      04

      混合數倉(Omega架構)的解法


      什么是ECS設計模式

      在談我們的解法的時候,必須要先提ECS的設計模式。

      簡單的說,Entity、Component、System分別代表了三類模型。

      實體(Entity):實體是一個普通的對象。通常,它只包含了一個獨一無二的ID值,用來標記它是一個獨立的對象。

      組件(Component):對象一個方面的數據,以及對象如何和世界進行交互。用來標記實體是否需要進行這一方面的處理,通常使用結構體,類或關聯數組實現。

      系統(System):每個系統不間斷地運行(就像每個系統運行在自己的私有線程上),處理標記使用了該系統處理的組件的每個實體。

      Entity對應于數倉中的Table,Component對應Schema,System對應數倉中SQL邏輯。

      對于數倉來說,每張表的意義是由一群schema決定的。而每一個schema只代表一個含義。SQL代碼的作用是組裝schema到對應的table中,實現它的業務意義。對于一個OLAP系統,我們喜歡大寬表的意義就是因為OLAP分析的是schema之間的關系,用大寬表可以很輕易的提取所需要的schema,組裝一個業務所需的表。

      ECS設計模式的核心思想就是,所有shcema都獨立出來,整個數倉就是一個大寬表。當需要使用的時候,把對應的schema組裝成具有業務含義的table。這就像一個個Component組裝成一個Entity一樣。而SQL在其中起到的作用是就是產出對應的schema和組裝schema。

      將ECS設計模式引入數倉設計,希望開發者可以更加關注于邏輯,關注數據如何處理,也就是S的部分。業務則由從列構建表的時候產生。將表結構和數據處理邏輯進行拆分,從而希望能提升SQL代碼的可讀性和結構性。

       


      05

      傳統數倉的數據處理流程

       

      數倉通常是分為三層:ODS(原始數據),DW(數據倉庫層),ADS(應用數據層)。ODS是從消息中間件中拿到的最原始的數據。DW層則是對數據進行加工后的數據,通常還是分為:DWS和DWD。DWD層中是對ODS層的數據進行清洗后提取的出來的。而DWS層是經過了一些輕度匯總后的數據。用戶可以基于此層直接加工出ADS層所需的數據。ADS層則是產出應用最終所需的數據。

      所以我們一般的數倉數據處理流程是:

      基于ECS設計模式設計的混合數倉

      在ECS的設計模式下,核心考慮的是Component是產出。產出具有業務含義的component,組裝出具體的業務表(Entity)。

      Schema的注冊和Table注冊

      對應在數倉模型中,可以這么理解:數倉里的表,任何一個schema都是獨立的。它們不具有業務含義,只是業務的一個屬性。組合起來構成一個具有業務含義的表。

      因此,我們需要一個專門管理schema的系統。這里包含了schema注冊和shcema使用。schema注冊系統主要負責對schema唯一性作保證,避免schema重復從而影響使用。同時規定好Schema從元數據中提取的規則(正則表達式或者拆分字符串),保證不論在什么系統中都可以得到唯一的提取結果。

      schema的使用則依賴table注冊系統。通過table注冊系統,將一些具有相關含義的schema串聯起來,形成table提供給業務使用。

      如下圖:

      Schema開發與混合數倉架構

      有了schema注冊,就要提到schema產出的問題了。在上文提到過,在Lambda架構下,離線實時數倉需要同時維護兩份代碼,其實就是需要維護兩份schema的注冊和產出過程。在Kappa架構中,雖然只需要在實時數倉中做數據處理,但面對大量歷史數據處理時需要消耗非常多的資源,而且中間結果復用能力有限,不適合復雜的業務。

      由于我們將schema 注冊抽離出來,在ECS的設計模式下,數據加工過程只有schema之間的交互,所以只需要關心數據加工部分代碼。而對于Flink(Blink)與MaxCompute(ODPS)來說,數據處理部分的sql代碼都遵循相近的SQL規范(這里沒查到對應的SQL版本,但使用過程中感受是幾乎一致,差別在于一些函數上。這一點可以通過UDF等方式解決。),所以可以保證很好的復用性。如果實時數倉和離線數倉數據處理層面的代碼差異較大的話,可以引入編譯器的形式解決。在任務提交的時候對代碼進行差異化的編譯,適用于對應的數倉。

      從而我們可以畫出以下的架構圖:

      Kafka傳入的消息是這套架構的ODS層,這一點上跟Lambda和Kappa架構是保持一致的。

      數據進入數倉后,數據會被Schema Register中注冊的規則提取出來,產出一個個對應的schema。即對應DWD層。

      有了schema后,數據進入處理加工邏輯。即System部分。這里需要針對實時和離線數倉分別產出對應的加工代碼,并執行具體的加工。此處對應的是DWS層。

      最后,將加工后產出的schema和table Register系統結合,產出最終的ADS層的數據。

      這套架構的好處是通過ECS設計模式的思想,將數據處理過程拆分成:數據聲明(Schema Register,Table Register),數據處理(System)和結果拼接(Table Creater)三個流程。在這三個過程中,將Flink、Max Compute視為計算資源,將整體數據加工處理的邏輯獨立在底層中間件之上,與開發環境解耦。從而實現工程化的管理數據倉庫里的數據和加工過程。

      但這套架構也存在一定的問題。例如,實時數據和離線數據是不互通的。如果統計過去180天UV總數時,需要離線和實時數據合并去重的處理就會遇到麻煩 


      06

      總結

      我將這個架構命名為Omega架構,對應希臘字母中的Omega,含義是“終結”。我希望這套架構能解決目前實時數倉和離線數倉比較混亂的局面,可以讓大數據開發、管理的能力更上一個臺階,讓更多小伙伴可以更加方便的取數,加工,從而更好的服務于業務。

      文章提到的博客地址:https://www.oreilly.com/radar/questioning-the-lambda-architecture/?spm=a2c6h.12873639.article-detail.4.6a25e9411qbiqv


      標簽:數據 離線 架構
      高并發服務的幾點優化經驗
      ? 上一篇 2022-05-18
      Java原子變量中set()和lazySet()的區別
      下一篇 ? 2022-05-19
      • 如何在Ubuntu中保留文件系統并備份當前開發板鏡像
        0閱讀 0條評論 個贊
        在Ubuntu保留文件系統或者說備份當前開發板鏡像的需求在不斷增加。比如Ubuntu文件系統需要安裝庫文件的話直接使用apt-get工具就可以下載,但由于需要下載的核心板較多,比較費時間,這時需要將安……
      • 國產核心板全志T507助力消防系統升級
        0閱讀 0條評論 個贊
        9月16日下午,位于湖南長沙市區內的中國電信大樓發生火災,建筑高度218米,現場濃煙滾滾,數十層樓體燃燒劇烈。消防救援人員趕到現場后很快將火勢控制住,目前大樓火勢已被撲滅,所幸未發現人員傷亡。湖南電信……
      • 教大家如何處理Spring Boot易流中的用戶和群體!
        0閱讀 0條評論 個贊
        1.準備工作2.用戶操作2.1添加用戶2.2修改用戶2.3刪除用戶2.4查詢用戶3.組操作3.1添加組3.2修改組3.3刪除組3.4查詢組4.查看表詳情雖然說我們在實際開發中,……
      • 從PG15開始WAL壓縮優化
        0閱讀 0條評論 個贊
        PG15傳聞中的超級令人激動的功能大多數跳票了,年初我也寫過一個關于PG15新功能跳票的文章。PG15BETA已經發出幾個月了,似乎PG15里令人激動人心的功能不多,不過從長長的新功能列表里,……
      • 深入了解美團葉子發射器開源方案
        0閱讀 0條評論 個贊
        大家好,我是樹哥。之前我們有聊過「如何設計一個分布式ID發號器」,其中有講過4種解決方案,分別是:UUID類雪花算法數據庫自增主鍵Redis原子自增美團以第2、3種解決方案為基礎,開發出……
      發表評論 共有條評論
      用戶名: 密碼:
      驗證碼: 匿名發表
      • 如何使用spark或hive sql將Excel文件加載到hive表中
        0閱讀 0條評論 個贊
        .css-1yuhvjn{margin-top:16px;}.css-3jt6os.FileLinkCard{-webkit-align-items:center;-webkit-box-align……
      • 從PG15開始WAL壓縮優化
        0閱讀 0條評論 個贊
        PG15傳聞中的超級令人激動的功能大多數跳票了,年初我也寫過一個關于PG15新功能跳票的文章。PG15BETA已經發出幾個月了,似乎PG15里令人激動人心的功能不多,不過從長長的新功能列表里,……
      • 記錄在線超時的分析和故障排除過程
        0閱讀 0條評論 個贊
        .css-1yuhvjn{margin-top:16px;}.css-3jt6os.FileLinkCard{-webkit-align-items:center;-webkit-box-align……
      • 我們能從AlloyDb的架構中學到什么
        0閱讀 0條評論 個贊
        前些天我發了一篇解讀信通所分布式數據庫發展報告內容的文章,有些朋友對我把Aurora、AlloyDB、PolarDB等也歸類于分布式數據庫感到有些不解。實際上這是信通所在報告里的歸類,和國際上的常見歸……
      • [設計模式] Java設計模式-橋模式
        0閱讀 0條評論 個贊
        目錄【設計模式】Java設計模式-橋接模式簡介橋接模式實例代碼示例①、品牌接口②、汽車品牌③、抽象汽車類④、汽車類型子類⑤、橋接模式測試1|1簡介橋接(Bridge)是用于把抽象化與實現化解耦,使……
      • 高手面試一個人 問4個問題就夠了
        0閱讀 0條評論 個贊
        作者|Mr.K編輯|Emma來源|技術領導力(ID:jishulingdaoli)金九銀十求職季又要來了。據統計,今年的應屆畢業生已破千萬,加上社會面存量人才,相信今年的人才季的熱度,不會低于今年……
      • SQL Server的常用分頁SQL
        0閱讀 0條評論 個贊
        今天無聊和朋友討論分頁,發現網上好多都是錯的。網上經常查到的那個TopNotin或者Max大部分都不實用,很多都忽略了Order和性能問題。為此上網查了查,順帶把2000和2012版本的也補上……
      • 構建docker鏡像庫(1):用注冊表構建本地鏡像庫
        0閱讀 0條評論 個贊
        目錄一.系統環境二.前言三.使用registry搭建私有鏡像倉庫3.1環境介紹3.2k8smaster節點配置鏡像倉庫3.3k8sworker1節點配置從私有倉庫上傳和拉取鏡像3.3.1上傳鏡……
      • 如何優雅地轉換Bean對象
        0閱讀 0條評論 個贊
        背景我們的故事要從一個風和日麗的下午開始說起!這天,外包韓在位置上寫代碼~外包韓根據如下定義PO(persistantobject):持久化對象,可以看成是與數據庫中的表相映射的java對象。最……
      • Python系列入門(四)別傻了 別糊涂了:鏈表、元組、字典、集合的區別
        0閱讀 0條評論 個贊
        總結分析列表、元組、字典、集合的相同與區別之處,只有徹底分清之后,就會在應用的時候,得心應手。四句話總結列表是一個有序且可更改的集合,允許重復成員。元組是一個有序且不可更改的集合,允許重復成員。集合是……
      • MySQL中的存儲過程(詳細文章)
        0閱讀 0條評論 個贊
        文章目錄概述優點缺點MySQL存儲過程的定義存儲過程的基本語句格式存儲過程的使用定義一個存儲過程定義一個有參數的存儲過程定義一個流程控制語句IFELSE定義一個條件控制語句CASE定義一個循環語……
      • 百度工程師教你玩設計模式(工廠模式)
        0閱讀 0條評論 個贊
        作者|北極星小組想要寫好代碼,設計模式(DesignPattern)是必不可少的基本功,設計模式是對面向對象設計(ObjectOrientedDesign)中反復出現的問題的解決方案,本篇介紹……
      • SQL Server:觸發器的詳細說明
        0閱讀 0條評論 個贊
        1.概述2.觸發器的分類3.Inserted和Deleted表4.觸發器的執行過程5.創建觸發器6.修改觸發器:7.刪除觸發器:8.查看數據庫中已有觸發器:9.“Insteadof……
      • 碼頭工人日常工作的常用命令
        0閱讀 0條評論 個贊
        容器生命周期管理Docker創建新容器并運行[run]語法:dockerrun[OPTIONS]IMAGE[COMMAND][ARG...]OPTIONS說明:-astdin:指定標準輸入……
      • 詳細解釋MySQL隔離級別
        0閱讀 0條評論 個贊
        一個事務具有ACID特性,也就是(Atomicity、Consistency、Isolation、Durability,即原子性、一致性、隔離性、持久性),本文主要講解一下其中的Isolation,也……
      • Java接口自動測試框架系列(1)自動測試框架
        0閱讀 0條評論 個贊
        一、什么是自動化測試自動化測試是把以人為驅動的測試行為轉化為機器執行的一種過程。通常,在設計了測試用例并通過評審之后,由測試人員根據測試用例一步步執行測試,得到實際結果與期望結果的比較。為了節省人力、……
      • 教你如何構建JAVA分布式爬蟲
        0閱讀 0條評論 個贊
        在工作中,我們經常需要去獲取一些數據,但是這些數據可能需要從第三方平臺才可以獲取到。這個時候,爬蟲系統就可以幫助我們來完成這些事情。提到爬蟲系統,很多人都會想到使用python。但實際上,語言只……
      • Velox簡介:一個開源的統一執行引擎
        0閱讀 0條評論 個贊
        ?Meta正在引入Velox,這是一個開源的統一執行引擎(unifiedexecutionengine),旨在加速數據管理系統和簡化其開發。?Velox正在積極開發中,Meta在2022……
      • SQL Server合并(刪除)分區的歧義消除
        4閱讀 0條評論 個贊
        一、準備在SQLServer2005版本之后就有了表分區的概念與應用,在分區操作里面有一個叫做合并分區的功能,也被稱為刪除分區。分區所處的文件組和文件是不會被刪除的,只會對數據進行轉移合并。合并分……
      • Python入門系列(七)開發常說的"累"與"對象"
        0閱讀 0條評論 個贊
        類與對象Python是一種面向對象的編程語言。要創建類,請使用關鍵字classclassMyClass:x=5創建一個名為p1的對象,并打印x的值p1=MyClass()print(p1……
      最近發布資訊
      更多
      警花高潮嗷嗷叫
      <del id="nnjnj"></del><track id="nnjnj"></track>

      <p id="nnjnj"></p>

      <address id="nnjnj"></address>

        <pre id="nnjnj"><pre id="nnjnj"></pre></pre>

          <noframes id="nnjnj"><ruby id="nnjnj"><ruby id="nnjnj"></ruby></ruby>