NSQ
NSQ是一個實時分布式消息傳遞平台,設計用於大規模操作,能每天處理數十億條消息。
它促進了沒有單點故障的分布式和分散拓撲,支持容錯和高可用性,並提供可靠的消息傳遞保證。
優缺點
優點:
1、部署非常方便,沒有任何環境的依賴,一個二進制可執行文件
2、輕量級沒有過多的配置參數,只需要簡單配置即可直接使用
3、性能極高(基於go編寫)
4、消息不存在丟失的情況
缺點:
1、消息無順序
2、節點之間沒有消息復制
3、沒有鑒權
消息隊列場景
異步執行
將注冊信息寫入數據庫成功后,同時進行發送注冊郵件和發送注冊短信的操作。而所有任務執行完成后,返回信息給客戶端。同串行方式相比,並行方式可以提高執行效率,減少執行時間。
並行方式:

異步方式:

應用解耦
場景說明:用戶下單以后,訂單系統需要通知庫存系統。
傳統的做法為:訂單系統調用庫存系統接口。如下圖所示:

傳統方式具有如下缺點:
1、假設庫存系統訪問失敗,則訂單減少庫存失敗,導致訂單創建失敗
2、訂單系統同庫存系統過度耦合

那么如何解決上述的缺點呢?需要引入消息隊列,引入消息隊列后的架構如下圖所示:

- 訂單系統:用戶下單后,訂單系統進行數據持久化處理,然后將消息寫入消息隊列,返回訂單創建成功
- 庫存系統:使用拉/推的方式,獲取下單信息,庫存系統根據訂單信息,進行庫存操作。
流量削鋒
應用場景:秒殺活動,一般會因為流量過大,導致流量暴增,應用掛掉。為解決這個問題,一般需要在應用前端加入消息隊列。
1、可以控制參與活動的人數;
2、可以緩解短時間內高流量對應用的巨大壓力;
流量削鋒處理方式系統圖如下:

- 服務器在接收到用戶請求后,首先寫入消息隊列。這時如果消息隊列中消息數量超過最大數量,則直接拒絕用戶請求或返回跳轉到錯誤頁面;
- 秒殺業務根據秒殺規則讀取消息隊列中的請求信息,進行后續處理。
NSQ組件
nsqd:一個守護進程,它接收、排隊並向客戶端發送消息
nsqlookupd:匯總節點信息,提供查詢和管理topic等服務
nsqadmin:管理端展示UI界面,能有一個web頁面去查看和操作
NSQ安裝
1.下載nsq軟件包
$ wget https://github.com/nsqio/nsq/releases/download/v1.2.0/nsq-1.2.0.linux-amd64.go1.12.9.tar.gz
2.啟動nsqlookupd
$ ./nsqlookupd &
3.啟動nsqd,並注冊到指定lookupd
$ ./nsqd -broadcast-address=127.0.0.1 -lookupd-tcp-address=127.0.0.1:4160 &
4.啟動nsqweb界面
$ ./nsqadmin --lookupd-http-address=127.0.0.1:4161 &
5.訪問nsqadmin

