NSQ被設計爲:sql
支持高可用和消除單點故障的拓撲結構緩存
實現更強的消息交付保證設計
單個進程的內存佔用(經過將一些信息持久化到磁盤)3d
極大地簡化生產者和消費者的配置要求cdn
提供直接升級的路徑blog
提升效率進程
1簡化的配置和管理內存
nsqdit
單個nsqd實例一次性能夠處理多個數據流。每一個數據流被稱爲一個「topic」,每一個topic擁有一個或多個「channels」。每一個channel都會收到從topic發出的全部message的副本(a copy)。一般一個channel是爲下流提供消費topic內信息的服務。io
topics 和channels並非提早設置好的。topic是在第一次使用時被髮布出來,或者在有channel訂閱時被命名的。channel也是一樣。
topic和channel都是獨自緩存數據的,這防止了存在有緩慢的消費者而致使其餘channel堵塞消息的狀況。
一個channel一般具備多個消費者鏈接。若是全部的消費者都在同一個分區裏的話,那麼從channel分發過來的message將會隨機落到每一個接受數據流的consumer那裏。
message是被topic多路廣播的到channel的,channel會將接受到的message隨機分發給全部鏈接了它的consumers,也就是每一個consumer只能收到channel通道里的一部分數據。
nsqlookupd
nsqlookupd是爲nsqd提供幫助consumer尋找應該訂閱的topic的路徑服務的幫助程序。根據配置文件,consumer和producer只須要知道去哪裏鏈接nsqlookupd實例就行了,consumer和producer之間是相互獨立無需知道對方存在的,這減小了維護的複雜性。
nsqd對nsqlookupd有一個長期的TCP鏈接,用來通知nsqd的定時的狀態,同過這個數據,nsqlookupd會決定向consumer展現哪些nsqd的地址。而consumer則將公開本身的HTTP/lookup 端點。