GCP消息隊列Pubsub詳解,簡單好用還不用自己運維


我最新最全的文章都在 南瓜慢說 www.pkslow.com ,歡迎大家來喝茶!

1 簡介

GCP的Pubsub是一種異步消息傳遞服務,可將生產事件的服務與處理事件的服務隔離開。消息隊列的作用就不多作介紹了,與Kafka、RabbitMQ等差不多。使用Pubsub一個重要原因是不用自己去管理整個中間件的運維,將專業的事交給專業的團隊去做。這樣,其實也是一種節約成本的方式。

GCP還提供了更低費用的Pubsub Lite,這里不多作介紹了。

2 概念

2.1 基本概念

一些重要的核心概念:

  • 主題:生產者向其發送消息的資源;
  • 訂閱:單個特定主題的消息流資源,任何一個訂閱都要從屬於某個主題,對哪個主題感興趣,就訂閱哪個主題;
  • 消息:傳輸的數據和特性;
  • 發布者:也叫生產者,負責將消息發到主題;
  • 訂閱者:也叫消費者,負責將消息從訂閱中讀取。

他們的關系:發布者發消息到某個特定主題,而主題下有一個或多個訂閱,訂閱者從訂閱讀取消息。所以發布者和訂閱者的關系有如下:

  • 一對一;
  • 一對多;
  • 多對一;
  • 多對多。

如下圖所示:

2.2 消息傳遞過程

整個消息傳遞的流程大致如下:

(1)發布者向主題發送消息,消息包含要發送的數據和消息的特性;

(2)系統收到消息后,會存在GCP的系統中;

(3)系統將主題的消息轉發到訂閱中去;

(4)Pubsub將消息推送給訂閱者,或者訂閱者拉取消息;

(5)訂閱者收到信息后,返回Ack確認信息;

(6)Pubsub移除已確認的消息。

2.3 集成其它組件

整個GCP的Stack可以相互集成,其它組件如Pubsub集成如下:

3 Pubsub快速入門

3.1 使用gcloud命令行

使用SDK命令行工具gcloud的入門操作如下:

# 創建主題
$ gcloud pubsub topics create pkslow-topic

# 創建訂閱
$ gcloud pubsub subscriptions create pkslow-sub --topic=pkslow-topic

# 發布消息
$ gcloud pubsub topics publish pkslow-topic --message="www.pkslow.com"

# 接收消息
$ gcloud pubsub subscriptions pull pkslow-sub --auto-ack

3.2 使用客戶端庫

Pubsub支持的語言很豐富,包括Python、Java、C++、Go、Node.js、PHP等,一般項目都可以使用得上。之前的文章《整合Spring Cloud Stream Binder與GCP Pubsub進行消息發送與接收》講解了Java的整合,這里先不再展開講解。

4 消息排序

消息排序是一個很有用的特性,它能保證消息的順序,即發布者發的是消息A-B-C-D,接收就應該是A-B-C-D,而不是A-B-D-C或其它。Pubsub的消息排序需要發布者和訂閱者雙方配合:

(1)發布者必須在發消息時指定排序鍵(Ordering Key),這個Key不是告訴Pubsub按什么排序,而是告訴Pubsub我哪些消息要排序。排序都是按時間的,Key的作用是同一個Key的所有消息都要排序。不同Key的消息,沒有順序關系,不需要排序。所以,要為需要按時間順序的消息指定同一個Key。

(2)訂閱需要打開排序特性,不然即使消息有Ordering Key,也不會排序。

排序特性是很有用的,但會帶來性能的損傷。

遇到的一些難點:

(1)對於Java開發,Spring Cloud Stream還沒有支持Pubsub排序功能,所以需要使用Google的SDK來開發,或者對Spring Cloud Stream進行改造。

(2)對於多消費者的情況,Pubsub會盡量把同一個Key的消息分發到一個消息者中以保證有序性。這樣會造成在Auto Scale的情況下,有時難以讓其它消費者撿起消息來消費,這個可以通過配置Outstanding的大小來控制。

5 其它

5.1 監控

GCP有成熟的監控套件Cloud Monitoring,我們直接用就可以了。可以查看發送了多少消息、多少消息待消費等。

5.2 消費者自動擴容

如果消費者的處理速度太慢,可以增加它的數量來解決問題。方案是根據Pubsub滯留的消息數來自動擴容。可以有兩個方案,一個是利用Keda來做,另一個是利用Cloud Monitor來做。兩者都是類似的,獲取隊列的大小,然后通過Kubernetes的HPA進行彈性伸縮。

Keda的相關文章可以看:《Kubernetes使用Keda進行彈性伸縮,更合理利用資源

6 總結

Pubsub使用起來還是挺簡單的,畢竟只用寫生產者和消費者即可。但細節也很多,有空再慢慢道來吧。


歡迎關注微信公眾號<南瓜慢說>,將持續為你更新...

多讀書,多分享;多寫作,多整理。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM