1. 程式人生 > >分散式訊息匯流排比較

分散式訊息匯流排比較

應用場景:

l分散式元件/系統相互通訊 l資料複製、同步 ldelay queue l廣播通知

對分散式訊息系統機制的分析好文:

 我們再來看微博的方案,所以我們自己實現了一個多機房同步的方案。就是我們前端應用將資料寫到資料庫,再通過一個訊息代理,相當於通過我們自己開發的一個技術,將資料廣播到多個機房。這個不但可以做到兩個機房,而且可以做到三個、四個。具體的方式就是通過訊息廣播方式將資料多點分佈,就是說我們的資料提交給一個代理,這個代理幫我們把這些資料同步到多個機房,那我們應用不需要關心這個資料是怎麼樣同步過去的。

  用這種訊息代理方式有什麼好處呢?可以看一下Yahoo是怎麼來做的?第一個是資料提供之後沒有寫到db之後是不會消失的,我只要把資料提交成功就可以了,不需要關心資料怎麼到達機房。第二個特點YMB是一款訊息代理的產品,但是它唯一神奇的地方是為廣域網設計的,它可以把多機房應用歸到內部,我們應用不需要關注這個問題。這個原理跟我們目前自己開發的技術相似。


我們看一下推送架構怎麼從架構底層做到實時性的。從左上角的一條微博在我們系統釋出之後,我們把它放在一個訊息佇列裡面,然後會有一個訊息佇列的處理程式把它拿過來,處理以後放到db裡面。假如說我們不做持久化,因為我們推送資料也不能丟失,我們就要寫一個很複雜的程式,將資料非同步去存,這樣就會非常複雜,而且系統也會有不穩定的因素。從另外一個角度來說,我們做持久化也是做過測試的。我們推送整個流程可以做到100毫秒和200毫秒之間,就是說我們在這個時間能把資料推送出去。

對於一些商業網站,其需要在上海、北京、美國等多點部署,採用訊息匯流排可以解決資料一致性問題,當發生寫操作時,資料除了被儲存到本地,同時放到訊息佇列中,這樣可同步到其他資料中心。

Kafka

Kafka Architecture Design:http://kafka.apache.org/documentation.html#design

 譯文:http://www.oschina.net/translate/kafka-design

http://www.infoq.com/cn/articles/apache-kafka?utm_campaign=infoq_content&utm_source=infoq&utm_medium=feed&utm_term=global

Apache Kafka:下一代分散式訊息系統

Kafka是一個訊息系統,原本開發自LinkedIn,用作LinkedIn的活動流(activity stream)和運營資料處理管道(pipeline)的基礎。現在它已為

多家不同型別的公司 作為多種型別的資料管道(data pipeline)和訊息系統使用。

活動流資料是所有站點在對其網站使用情況做報表時要用到的資料中最常規的部分。活動資料包括頁面訪問量(page view)、被檢視內容方面的資訊以及搜尋情況等內容。這種資料通常的處理方式是先把各種活動以日誌的形式寫入某種檔案,然後週期性地對這些檔案進行統計分析。運營資料指的是伺服器的效能資料(CPU、IO使用率、請求時間、服務日誌等等資料)。運營資料的統計方法種類繁多。

近年來,活動和運營資料處理已經成為了網站軟體產品特性中一個至關重要的組成部分,這就需要一套稍微更加複雜的基礎設施對其提供支援。

活動流和運營資料的若干用例

  • "動態彙總(News feed)"功能。將你朋友的各種活動資訊廣播給你
  • 相關性以及排序。通過使用計數評級(count rating)、投票(votes)或者點選率( click-through)判定一組給定的條目中那一項是最相關的.
  • 安全:網站需要遮蔽行為不端的網路爬蟲(crawler),對API的使用進行速率限制,探測出擴散垃圾資訊的企圖,並支撐其它的行為探測和預防體系,以切斷網站的某些不正常活動。
  • 運營監控:大多數網站都需要某種形式的實時且隨機應變的方式,對網站執行效率進行監控並在有問題出現的情況下能觸發警告。
  • 報表和批處理: 將資料裝載到資料倉庫或者Hadoop系統中進行離線分析,然後針對業務行為做出相應的報表,這種做法很普遍。

支援多資料中心,但採用映象技術,實時性等各方面會有問題,本質還是各中心獨立


Hedwig


RabbitMQ

ActiveMQ

使用到訊息匯流排的場景:

l分散式事務 l資料複製 l日誌同步 ldelay queue l廣播通知