背景知識(shí)
分布式系統(tǒng)中,我們廣泛運(yùn)用消息中間件進(jìn)行系統(tǒng)間的數(shù)據(jù)交換,便于異步解耦反璃。消息中間件這塊在我們前面的學(xué)習(xí)中,是使用python中的queue模塊來提供秃臣,但這個(gè)模塊僅限于在本機(jī)的內(nèi)存中使用涧衙,假設(shè)這個(gè)隊(duì)列需要其他服務(wù)器的程序也訪問的話,就需要利用socket了奥此。不過弧哎,現(xiàn)成的方案很多,輪子已經(jīng)有了稚虎,我們沒有必要反復(fù)造輪子撤嫩。直接拿來用就可以了。
消息中間件解決方案
流行的消息隊(duì)列解決方案很多:
ZeroMQ: 號(hào)稱最快的消息隊(duì)列蠢终,由于支持的模式特別多: TCP序攘、IPC、inproc寻拂、Multicas程奠,基本已經(jīng)打到替代Socket的地步了。站點(diǎn)地址:http://zeromq.org/
Kafka: 是LinkedIn開源的分布式發(fā)布-訂閱消息系統(tǒng)祭钉,目前歸屬于Apache定級(jí)項(xiàng)目瞄沙。 一個(gè)消息發(fā)布訂閱系統(tǒng),現(xiàn)在常用于日志團(tuán)隊(duì)使用的工具慌核,如程序?qū)⒉僮魅罩九慨惒降陌l(fā)送到Kafka集群中距境,而不是保存在本地或者DB中。Kafka可以提供批量提交消息/壓縮等垮卓,對(duì)Producer而言垫桂,幾乎感覺不到性能的開銷。Consumer可以使用Hadoop等其他系統(tǒng)化的存儲(chǔ)和數(shù)據(jù)分析等扒接。站點(diǎn):http://kafka.apache.org/
RocketMQ: 阿里開源的一款高性能伪货、高吞吐量的消息中間件们衙, 純Java開發(fā)。RocketMQ思路起源于Kafka碱呼,但并不是Kafka的一個(gè)Copy蒙挑,它對(duì)消息的可靠傳輸及事務(wù)性做了優(yōu)化,目前在阿里集團(tuán)被廣泛應(yīng)用于交易愚臀、充值忆蚀、流計(jì)算、消息推送姑裂、日志流式處理馋袜、binglog分發(fā)等場(chǎng)景。站點(diǎn): https://github.com/alibaba/RocketMQ
RabbitMQ: RabbitMQ是一個(gè)由erlang開發(fā)的AMQP(Advanced Message Queue )的開源實(shí)現(xiàn)舶斧。
等等....
使用消息中間件的理由欣鳖?
使用消息中間件的10個(gè)理由,請(qǐng)參照oschina的這篇博文: http://www.oschina.net/translate/top-10-uses-for-message-queue