天天看點

【系統架構】讀《大型網站架構系列:分布式消息隊列》整理

文章位址

拓展閱讀:

RabbitMQ + PHP (一)入門與安裝

RabbitMQ + PHP (二)AMQP拓展安裝

RabbitMQ + PHP (三)案例示範

1. 一些詞彙和技術

1)Zookeeper注冊中心 Storm叢集

2. 核心思想

1)【概述】

消息隊列中間件是分布式系統中重要的元件,主要解決應用耦合,異步消息,流量削鋒等問題。實作高性能,高可用,可伸縮和最終一緻性架構。是大型分布式系統不可缺少的中間件。

目前在生産環境,使用較多的消息隊列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ等

2)【應用場景】

異步處理,應用解耦,流量削鋒和消息通訊四個場景。

3)【消息中間件示例】

電商系統 日志收集系統

4)【日志系統】

ELK Static(新浪kafka日志處理應用案例)

-- Kafka:接收使用者日志的消息隊列。

-- Logstash:做日志解析,統一成JSON輸出給Elasticsearch。

-- Elasticsearch:實時日志分析服務的核心技術,一個schemaless,實時的資料存儲服務,通過index組織資料,兼具強大的搜尋和統計功能。

-- Kibana:基于Elasticsearch的資料可視化元件,超強的資料可視化能力是衆多公司選擇ELK stack的重要原因。

5)【Zookeeper】

Zookeeper 分布式服務架構是 Apache Hadoop 的一個子項目,它主要是用來解決分布式應用中經常遇到的一些資料管理問題,如:統一命名服務、狀态同步服務、叢集管理、分布式應用配置項的管理等

6)【storm】

是一種 實作一個實時計算系統

7)【兩種消息模式】

    -- 點對點(P2P模式) :

              a)每個消息隻有一個消費者(Consumer)(即一旦被消費,消息就不再在消息隊列中)

               b)發送者和接收者之間在時間上沒有依賴性,也就是說當發送者發送了消息之後,不管接收者有沒有正在運作,它不會影響到消息被發送到隊列

              c)接收者在成功接收消息之後需向隊列應答成功

      -- 釋出訂閱(Pub/sub模式)

            a)每個消息可以有多個消費者

             b)釋出者和訂閱者之間有時間上的依賴性。針對某個主題(Topic)的訂閱者,它必須建立一個訂閱者之後,才能消費釋出者的消息。

           c)為了消費消息,訂閱者必須保持運作的狀态。

3. 常見消息隊列中間件

1)【ActiveMQ 】

    ActiveMQ 是Apache出品,最流行的,能力強勁的開源消息總線,對JAVA支援好

2)【RabbitMQ】

-- RabbitMQ是流行的開源消息隊列系統,用erlang語言開發。RabbitMQ是AMQP(進階消息隊列協定)的标準實作。支援多種用戶端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支援AJAX,持久化。用于在分布式系統中存儲轉發消息,在易用性、擴充性、高可用性等方面表現不俗

-- RabbitMQ的安裝

3)【ZeroMQ】

号稱史上最快的消息隊列,它實際類似于Socket的一系列接口,他跟Socket的差別是:普通的socket是端到端的(1:1的關系),而ZMQ卻是可以N:M 的關系,人們對BSD套接字的了解較多的是點對點的連接配接,點對點連接配接需要顯式地建立連接配接、銷毀連接配接、選擇協定(TCP/UDP)和處理錯誤等,而ZMQ屏蔽了這些細節,讓你的網絡程式設計更為簡單。ZMQ用于node與node間的通信,node可以是主機或者是程序。

4)【Kafka】

Kafka是一種高吞吐量的分布式釋出訂閱消息系統,它可以處理消費者規模的網站中的所有動作流資料。 這種動作(網頁浏覽,搜尋和其他使用者的行動)是在現代網絡上的許多社會功能的一個關鍵因素。 這些資料通常是由于吞吐量的要求而通過處理日志和日志聚合來解決。 對于像Hadoop的一樣的日志資料和離線分析系統,但又要求實時處理的限制,這是一個可行的解決方案。Kafka的目的是通過Hadoop的并行加載機制來統一線上和離線的消息處理,也是為了通過叢集機來提供實時的消費。

參考文檔:

RabbitMQ + PHP (一)入門與安裝

RabbitMQ + PHP (二)AMQP拓展安裝

RabbitMQ + PHP (三)案例示範