一款低延遲的分散式資料庫同步系統--databus

来源:http://www.cnblogs.com/xiexj/archive/2017/10/17/7652386.html
-Advertisement-
Play Games

每次看到馬路對面摩托羅拉的大牌子,都想起谷歌125億美元收購摩托羅拉移動,後來又以29億美元賣給聯想的事情。谷歌所做的決策都比較考慮長遠利益,在這串交易中,谷歌獲得了摩托羅拉最有價值的幾千項專利,穩健了Android的生態。谷歌曾經在美國一個地區占用巨大的面積建立了太陽能發電站,人稱“烤鳥”項目。因 ...


  每次看到馬路對面摩托羅拉的大牌子,都想起谷歌125億美元收購摩托羅拉移動,後來又以29億美元賣給聯想的事情。谷歌所做的決策都比較考慮長遠利益,在這串交易中,谷歌獲得了摩托羅拉最有價值的幾千項專利,穩健了Android的生態。谷歌曾經在美國一個地區占用巨大的面積建立了太陽能發電站,人稱“烤鳥”項目。因為鳥兒從此地飛過會因為太熱而從天上掉下來變成熟鳥。而產生的電能僅夠一個小村莊使用。但是正是這種願意去嘗試才推動了科技的發展。讓谷歌這麼多年屹立不倒。

 

  Databus是LinkedIn開源的一款低延遲的分散式資料庫同步系統(a source-agnostic distributed change data capture system),它提供可靠的數據捕獲、流轉和數據處理功能。

 

應用場景:

    主要應用場景:跨部門之間或者跨機房之間進行資料庫的數據訂閱。同類產品有阿裡的canal。支持Oracle和Mysql資料庫。

      Databus和canal一樣,數據都是基於資料庫日誌挖掘來做的。我之前的博客也提到了,當今的數據處理大致可以分為兩類:聯機事務處理OLTP(OnLine Transaction Processing)和聯機分析處理OLAP(OnLine Analytical Processing)。

  OLTP是傳統的關係型資料庫的主要應用,主要是基本的、日常的事務處理,例如銀行交易。但是平常所說的OLTP是集成到SQL Server中的資料庫引擎組件,因為微軟有個白皮書《SQL Server In-Memory OLTP Internals Overview》。但是OLTP實際上可以稱之為:面向交易的實時處理系統。性能指標是TPS。

  OLAP是快速響應多維分析的一種解決方案。面向的數據源是數據倉庫。支持複雜的分析操作,側重決策支持,並且提供直觀易懂的查詢結果。

  再回來說Databus,Databus最重要的特點是其無限回溯功能。當消費者完整數據拷貝,或者消費者的已有數據和主OLTP資料庫相差很大時能夠低延時的進行同步。

  

核心組件:

  Databus的核心組件是Databus Relay。主要負責兩個工作:

  1>從Databus源資料庫中讀取變化行,並序列化為事件流保存至記憶體中。

  2>接受客戶端的請求,並將數據變化事件流返回給客戶端。

 

實現原理:

  databus使用了open-replocator作為獲取資料庫變更事件的組件。功能是實時獲取mysql的binlog日誌,並封裝成Event對象,然後調用已註冊的listener進行處理。

 

技術架構:

  • Event Producer:用來讀取資料庫的變化事件,轉化為AVRO類型並存儲至記憶體中。

  下麵說說AVRO. Apache Avro是一個獨立於編程語言的數據序列化系統,該項目由Hadoop之父牽頭創建。它可以提供:豐富的數據結構類型,快速可壓縮的二進位數據形式,存儲持久數據的文件容器,遠程過程調用,同動態語言的簡單集成。讀寫數據文件和使用RPC協議都不需要生成代碼,而代碼生成作為一種可選的優化只值得在靜態類型語言中實現。

  • Circular Buffer:Relay有一個或多個環形的緩衝池用來保存按遞增的系統變化號(SCN)為順序的變化事件。

  細心的讀者會發現每個中間件都有自己比較獨特的緩衝策略,這種緩衝策略很大成熟決定了此中間件的好壞。

  • SCN Writer/Reader:用來讀取和吸入SCN號至硬碟。
  • RESTFUL interface:它暴露一個restful介面,用來推送數據變化事件至客戶端。

 

源碼:

  Databus是用java開發的。github地址是:https://github.com/linkedin/databus。  

 

跑題時間:

  自從畢業後上班開始就時不時自己能夠感覺到一些問題。比如:比較著急的時候我眉頭是緊鎖著的,說話客氣不起來了。再比如我說話的方式也是技巧不足的。這些看起來不是核心的問題現在卻是我的第一要務。因為之前有問題沒關係,我不做管理,我就管我自己。那麼這些小毛病頂多影響我自己。現在我的很多決定都直接影響到我們團隊。

  所以,在實際影響範圍可控的情況下,我反而會將問題更明顯出來,自己製造些小矛盾。為什麼這麼做呢,因為我從來不做“大家都說這樣做是對的”的事情。我只做自己心裡完全接受的事情。  

  之前認識我的人都知道我嗓門很大。現在好一點了,雖然也有時會忘了降低嗓門。我娘家在我們鎮上最繁華的地段,後面是菜市場。每天早上3點就很吵了。我屋的窗戶正好對著市場。所以我從小練就了“再吵和我沒關係”的本事,所以我對噪音很不敏感。所以我是花了很大力氣才讓自己心裡完全接受了“這樣會打擾別人,最好的音量是不要太大,震到別人耳朵,也不要太小,別人聽不清”

  我現在需要讓自己瞭解到自己的問題會產生什麼樣的後果,確實是有問題的。但是這樣做確實是很笨的方法。聰明人是自己完全可以預見到的,人生會走很多彎路。

  我工作十年,實質性的提高是沒有的。剛畢業的時候,我的學歷差不多就是目前所在這個級別的公司。人人,樂視,新美大。並沒有級別上的提升,反而職級上比同屆的要低。

  跟別人相比,可能我一年過了日語1級,去過日本。後來去過美國矽谷。也有上百個專利。我在想這些為什麼都沒能給我帶來實實在在的好處。

  我學語言能力確實很強,但是我單純只想做技術。自己的任性是要有代價的。代價就是語言能力沒有用武之地。

  去過日本和矽谷,這是工作機遇,並不是什麼能力。應該給我帶來的是氣質,談吐。但是我的氣質和談吐並沒有上去。也就是我白去了,去了沒學到東西。素養沒提高。

  專利是要真正給公司帶來利益才有價值的,和數量沒有關係。我並沒有哪個專利特別好,發揮了特牛逼的作用。

  總的來看,我是一個非常普通,還有1個半月就過31歲生日的老技術。完全沒有優勢。並且,我還有點浮躁。

  去樂視之前,我的每一次努力都發生在不得不努力的時候。升學前,因為擔心,考不上怎麼辦呀,於是努力成績上去了。危機沒了又回到原來。上班有任務壓我,我就努力乾。因為乾不完怎麼辦呀,這是我的責任。然後基本就是忙一個月兩個月閑個半年。

  去樂視的時候,我有個好開頭。為什麼呢,因為去樂視之前,我自己趟了趟渾水,當然不是工作上的。但是我在樂視的時間自己都很鬱悶。直到最後我在自己臉上身上刻了好幾個疤,近1年才好,這段時間我都在鬱悶自己身上的疤,原來因為什麼事情鬱悶完全都不記得了。所以這是我最不浮躁的一段時間。不過,我覺得和別人相比,也挺浮躁的。

  現在來說,我覺得起點是很低的。突然覺得自己一無所有。但是好歹各個階段該做的事情都做了,該試的錯也實實在在試過了。我得到了我真正想得到的東西。放棄的,都是自己覺得不值得。就剩一件事了,我想在工作上達到我應該達到的高度。因為IT行業對年齡和女孩子都是很殘酷的。我不圖名,不圖利,不愛權利,但是我想工作。

  現在的公司,大家都有我很多我值得學習的地方。不跟著別人學,自身的成長也需要很多的提高。方法論方面,架構方面。我還不能拖的時間很長來適應,我需要儘快能夠有一些時間,每天寫點代碼,根本的東西不想放下。

  一直以來都不喜歡被別人叫老。也一直以來都沒成熟大方得體。有時候頭髮很亂,有時候不經考慮。這是年輕,希望別人喜歡自己原本的樣子。現在,越來越多的考慮怎麼把事情做好。靜兒的文章哪有不秀恩愛的。今天我只想說謝謝男神在我還年輕的時候遇到我,一心做事情的人恐怕不會再愛上誰。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Gradle DSL method not found: 'compile() 遇見這個問題截圖: 解決: 在項目的根目錄的build.gradle文件中是不是用了compile方法 如果有的話,剪切,粘貼到app下build.gradle文件的dependencies中 重新構建一下項目解決 備忘 ...
  • 對與最近主要做的是電視機盒子端的開發,其中涉及到設備的狀態監聽比較繁瑣,所以對HDMI的連接狀態的監聽方法做個記錄,方便後續查看。 主要通過兩種方式: (1)比較常用的廣播監聽 註冊一個動態廣播來獲取HDMI介面的插拔,它的Action的name為 “android.intent.action.HD ...
  • 之前在做筆試題的時候遇到一個問題:Activity A切換到ActivityB時,A和B的生命周期變化。 事實上,它們的生命周期變化是這樣的: 1、A的onPause()方法被執行。 2、B的onCreate()方法,onStart(),onResume()方法被順序執行。 3、如果B是不透明的,A ...
  • 10月9日,中國首屆原型設計大賽在成都開幕。此次大賽由國內優秀原型設計工具Mockplus主辦,國內多家知名協會、企業、高校協辦。本次大賽專註原型設計,旨在推動中國產品設計行業的發展,挖掘和培育設計人才,在國內尚屬首次。 近年來,隨著各類軟體、App的井噴,用戶體驗設計的要求不斷提高,產品設計行業發 ...
  • 1. 進程和線程 1.1 進程 進程:正在運行的應用程式叫進程 進程之間都是獨立的,運行在專用且受保護的記憶體空間中 兩個進程之間無法通訊 通俗的理解,手機上同時開啟了兩個App。這兩個App肯定是在不同的進程中的。所以這兩個App之間是獨立的,記憶體中的數據不能互相竄來竄去,兩個App之間也沒有辦法進 ...
  • 本篇博客的內容也不算太複雜,算是AutoLayout的一些高級的用法。本篇博客我們主要通過一些示例來看一下AutoLayout中的Content Hugging Priority以及Content Compression Resistance Priority這兩個優先順序。下方我們先來簡單的看一下這 ...
  • 線性佈局(LinearLayout) 備註 match_parent 填充佈局單元內儘可能多的空間 wrap_content 完整顯示控制項內容 orientation 有兩個值, horizontal 水平顯示, vertical 垂直顯示 百分比 使用百分比需要將 width 屬性設置為0或0px ...
  • Oracle資料庫 內置系統函數主要分為以下類別:數學函數、字元串函數、日期函數、轉換函數、聚合函數、分析聚合函數 一、數學函數 返回數字 abs(n):返回數字n的絕對值 ceil(n):返回>=數字n的最小整數 floor(n):返回<=數字n的最大整數 round(n,[m]):做四捨五入運算 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...