天天看點

消息中間件 - 目錄

消息中間件要解決什麼問題?

消息中間件要解決的問題是:

解耦:需要互相通信的應用之間的解耦

緩沖:如果一個應用正忙,但其他應用還在不停的給他發消息,這時候需要一個地方暫存無法被處理的請求。

消息中間件的通用屬性?

no spof: spof = single point of failure,你就一個單點,就一台伺服器,挂了整個系統的消息都跑不通了,你必須要有替補、要有搭檔。這一點,解決思路就是采用叢集,nsq和nsqlookup,都支援叢集架構

可拓展性強:當一台伺服器不夠用時,你是否支援友善的橫向擴充?nsq的擴充非常簡單,預設一個生産者配置一個nsq,如果你需要倆,那就配置兩個nsq位址即可

可靠性強:這一點,nsq并不具備,預設情況下,消息是儲存到記憶體的,一旦系統崩潰了,消息就沒了。就算消息持久化到磁盤了,也隻是做了一次備份,不像kafka的partition機制,可以做多次備份

性能好:這點毋庸置疑,采用push+記憶體的實作政策,再加上面提到的高可拓展性,nsq的性能可以得到保障

消息中間件的特殊屬性?

消息投遞政策:消息投遞是至少一次,還是最多一次,還是需要控制在準确一次?nsq選擇的是至少一次,這種适用面最廣的方式,kafka則支援全部三種,當然,這也給系統引入了更多的複雜性,而nsq則選擇一如既往的”極簡“

消息時序性:為了性能考慮,nsq選擇了不去無序,讓消息飛~ 當然,如果你能設計出一套可以在topic級别進行時序性控制的消息中間件,是最牛逼不過了,比如有贊自研的nsq

push or pull:為了追求實時性,nsq選擇了push,不同的消息中間件有不同的實作政策

記憶體 or 磁盤:通常,如果你選擇了push,那麼對應的就會選擇記憶體,當然為了消息可靠性,你還是得做一些刷盤的操作

常見的消息中間件

rabbitmq

繼續閱讀