1月20日,由信也科技NYSE:FINV自主研發的PMQ消息系統正式對外發布。該系統是信也科技在調研業界消息系統的基礎上研發的一款易于監控、易于維護的輕量級消息系統。目前,其已在信也科技私有云平臺上穩定運行了四年,日消息量高峰時間超過30億條,高峰寫入超過20萬TPS異步模式。 據了解,消息系統在現代微服務系統中,起著至關重要的作用。不論是異步、解耦或削峰,都需使用到消息系統。而消息系統的穩定性,對系統的整體穩定性有著舉足輕重的意義。 信也科技PMQ消息系統的研發歷程并非一帆風順。早在2016年之前,信也科技曾嘗試使用Kafka與RabbitMQ,彼時經常面臨消息丟失、消息堆積等情況,嚴重影響了業務系統。自2016年年中以來,信也科技便著力開發PMQ消息系統,并于2017年發布2.0版本,實現了基本的消息發送與消費功能。自2017年年中開始研發3.0版本,至2018年年中,已實現重平衡、自助修改偏移等完善的消息治理功能。自2019年初發布的新版本,已逐漸實現了多語言、多環境等高級功能。 PMQ消息系統的整體架構示意圖 PMQ消息系統的架構可分為以下五部分: 第一,Admin Portal。用戶可在Admin Portal上創建Topic、消費者組、訂閱Topic等常見操作。這些操作會生成對應的元數據信息,而這些元數據信息會保存至Metadata數據庫中。 第二,Broker。Broker會定時將Metadata元數據信息同步至內存中。當Producer發送消息請求達到Broker時,Broker會跟進Topic對應的元數據信息,將消息保存到相關的數據庫表中。Consumer也會根據元數據信息從數據庫中拉取相關的消息。 第三,Producer,消息發送方。當Producer發送消息時,會將消息發送到Broker集群中的任何一個實例,當某個實例出現訪問異常時,會自動重試,將消息轉發到其他實例。 第四,Consumer,消息消費方。當消費方啟動時,會完成消息消費的注冊功能。注冊完成后Consumer會獲取到相關的元數據信息,Consumer會從Broker拉取消息進行消費。 第五,MySQL,消息存儲層。所有的Topic消息至少會保存在2個MySQL物理實例上,防止單點故障。每個MySQL物理機都有備份集群,當某個MySQL集群出現問題時,會自動進行主從切換,以此來保證MySQL的高可用。 同其他消息系統相比,PMQ消息系統采用了MySQL作為消息存儲層,最大程度地降低了消息系統的復雜性,易于運維。此外,PMQ消息系統實現了Broker與存儲分離,可實現Broker與MySQL的水平擴展。 依托于MySQL,PMQ消息系統可實現更豐富的治理功能。具體功能如下: 1、堆積告警。在PMQ控制臺中,可查看消息的發送與消費情況,當出現消息消費堆積的情況時,PMQ消息系統便發送告警消息給相關的負責人,通知其及時處理。 2、消息消費與發送監控。PMQ消息系統的客戶端內置了監控信息,可以監控消息發送與消息消費情況。特別內置了消息消費是否報錯,消費耗時等監控信息。 3、動態調整線程數。消息在消費過程中,經常會遇到消息堆積的情況。當相關負責人收到堆積告警時,負責人可根據監控情況來判斷是否可以增大線程數來加快消息消費速度。消費線程數可在后臺Portal界面動態修改,實時生效,無需用戶修改代碼,重啟等操作。采用此方式,可非常迅速地解決消息堆積的情況。 4、動態調整偏移量。消息在使用過程中,會遇到以下情況,當消息消費時可能會出現一些bug。當bug修復完成后,可能需要重新消費歷史消息,此時可在PMQ消息系統后臺控制頁面中,動態調整偏移量,消費方即可按照指定的偏移對歷史消息進行重新消費,無需修改代碼實時生效。 5、動態設置消費者組黑白名單。在本地代碼開發時,為了調試某個消費邏輯代碼,需要將某個消費者組指定給某個IP消費。對于此場景開發人員可在PMQ消息系統后臺對某個消費者組設置白名單,設置完成后,此消費者組對應的消息便會被指定IP消費。同理,也可以設置黑名單,不允許某些IP消費。對于此類需求用戶可在PMQ消息系統后臺自助操作,無需修改代碼,實時生效。 6、支持失敗消息。當用戶在PMQ控制頁面中給某個消費者組添加Topic訂閱時,會自動創建一個消費者組與Topic對應的失敗Topic,當客戶端消息消費失敗時,會自動將消費失敗的消息發送至對應的失敗Topic上,然后進行重試消費,如果重試失敗,用戶可在消息查詢界面查看到消息消費重試結果。 7、消息查詢。有相關權限的用戶,可在后臺檢索Topic歷史消息。 8、操作自助化。用戶可在PMQ消息系統后臺自助創建Topic,自助創建消費者組,自助訂閱Topic,自助查看消息消費情況、發送量、剩余量等信息。 9、權限控制與審計。PMQ消息系統權限管控采取的是誰創建誰負責的方式。同時用戶在后臺界面上的所有操作均會進行日志記錄,便于操作審計。 10、多語言支持。PMQ通過Proxy代理的方式支持多語言。對于其他非Java類型的應用,只要支持HTTP協議,即可進行消息的發送與消費。這樣PMQ只需維護一份代碼,即可支持所有的語言客戶端。 11、多環境支持。在測試環境中,為了支持多版本并行開發,會出現多套環境的情況。PMQ消息系統支持消息在多環境中有序流轉,同環境的消息默認會被同環境的實例消費。 12、監控報表。PMQ消息系統后臺會自動生成各類報表數據,方便查看系統運行情況。根據監控報表數據可清晰地知曉系統的運行情況,從而及時消除系統的資源隱患。 自2017年PMQ消息系統在信也科技上線以來,已穩定運行多年,且已接入了超過400多個應用、2000多個實例,經受住了生產實踐的考驗。 此次信也科技將成熟的科技服務對外輸出與賦能,是堅持探索創新的成果。未來,PMQ消息系統將引入消息軌跡、智能化運維與分析、PMQ集群多活等相關的功能。并且PMQ消息系統會全面兼容Kafka、RocketMQ等消息系統,使其他的消息系統也可使用到PMQ強大的治理功能。 樹高葉茂,系于根深。信也科技亦將不斷夯實根基,銳意進取,在科技行業中繼續做敢于探路的“急先鋒”,積極響應國家的號召,持續探索與發展科學技術,推動科技自立自強,并加強與合作伙伴的溝通與交流,實現互利共贏發展。 |