NSQ 是分布式實(shí)時(shí)消息系統(tǒng)。
對于任何分布式系統(tǒng)來說,都是通過智能權(quán)衡來實(shí)現(xiàn)目標(biāo)。通過這些透明的可靠性指標(biāo),我們希望能使得 NSQ 在部署到產(chǎn)品上的行為是可達(dá)預(yù)期的。
雖然系統(tǒng)支持消息持久化存儲(chǔ)在磁盤中(通過 --mem-queue-size
),不過默認(rèn)情況下消息都在內(nèi)存中.
如果將 --mem-queue-size
設(shè)置為 0,所有的消息將會(huì)存儲(chǔ)到磁盤。我們不用擔(dān)心消息會(huì)丟失,nsq 內(nèi)部機(jī)制保證在程序關(guān)閉時(shí)將隊(duì)列中的數(shù)據(jù)持久化到硬盤,重啟后就會(huì)恢復(fù)。
NSQ 沒有內(nèi)置的復(fù)制機(jī)制,卻有各種各樣的方法管理這種權(quán)衡,比如部署拓?fù)浣Y(jié)構(gòu)和技術(shù),在容錯(cuò)的時(shí)候從屬并持久化內(nèi)容到磁盤。
如上所述,這個(gè)假設(shè)成立于 nsqd
節(jié)點(diǎn)沒有錯(cuò)誤。
因?yàn)楦鞣N原因,消息可以被投遞多次(客戶端超時(shí),連接失效,重新排隊(duì),等等)。由客戶端負(fù)責(zé)操作。
不要依賴于投遞給消費(fèi)者的消息的順序。
和投遞消息機(jī)制類似,它是由重新隊(duì)列(requeues),內(nèi)存和磁盤存儲(chǔ)的混合導(dǎo)致的,實(shí)際上,節(jié)點(diǎn)間不會(huì)共享任何信息。
它是相對的簡單完成疏松隊(duì)列,(例如,對于某個(gè)消費(fèi)者來說,消息是有次序的,但是不能給你作為一個(gè)整體跨集群),通過使用時(shí)間窗來接收消息,并在處理前排序(雖然為了維持這個(gè)變量,必須拋棄時(shí)間窗外的消息)。
這個(gè)服務(wù)(nsqlookupd) 被設(shè)計(jì)成最終一致性。nsqlookupd
節(jié)點(diǎn)不會(huì)維持狀態(tài),也不會(huì)回答查詢。
網(wǎng)絡(luò)分區(qū)并不會(huì)影響可用性,分區(qū)的雙方仍然能回答查詢。部署性拓?fù)淇梢燥@著的減輕這類問題。