ActiveMQ的設計
MQ消息服務產品功能(新版)
一.背景
消息中間件對目前大中型互聯網來說是非常重要的,在業務數據流動中僅次於RPC服務調用,擔負着越來越複雜的網站業務從主流程上解耦和減壓的重要責任。
目前,MQ在走秀網中廣泛用於如下生產系統:商品中心、促銷中心、渠道中心、CMS、搜索引擎、秀團。不像Web2.0網站,這些網站對消息的可靠性要求不是很高,走秀網電商的特點,它是一個在線交易系統,對商品、價格、庫存、促銷相關信息的發送和中轉,使得MQ作爲消息中間件,對消息的可靠性要求非常高,因此新的版本MQ設計和使用MQ必須遵循可靠性優先的設計原則。
二.功能特色
新版的基於ActiveMq的異步消息服務系統有如下特點:
1) 高可靠 基於事務、消息持久化的消息發送和存儲,以及提供本地消息存儲提供更高的可靠性
2) 高性能 異步消息發送可到7000-10000條/秒
3) 動態線性擴展 增加服務器可動態橫向擴容
4) 統一配置管理 通過spring相關配置文件,減少代碼量
5 ) 簡單易用 只需實現幾個API接口 見本文第七部分-編程接口
6)管理和監控
Ø 線性擴展服務器,應對系統規模發展
Ø 提供故障處理模式,更快處理故障
Ø 數據監控界面,輕鬆知道性能瓶頸
Ø 服務器端驗證隊列屬性,更少錯誤發生
二.設計思路
Ø 支持客戶端存儲,提高系統可靠性。發送端和接受端通過嵌入式數據庫Berkeley DB提供本地存儲。
Ø 實現連接池功能,提供消息數據源,簡化應用使用和配置難度。
Ø 封裝MQ接口,實現MQ系統對應用透明,以便支持多種MQ服務器,甚至實現不同服務器混合部署,目前已經實現對ActiveMQ 的支持。
Ø 支持客戶端Cluster支持以便取代效率不高的MQ系統的負載均衡。
Ø 支持1 .. N,N .. 1,N .. N多種客戶端對服務器的配置。
Ø 支持協議轉換和消息過濾。
四. 總體架構
五.功能模塊:
系統流程
功能層次
六.集羣
更好的可靠性、可伸縮性和可擴展性。新的版本中實現動態擴容增加系統規模和容量。
1.單個集羣
2.橫向擴展
向集羣中添加機器,橫向擴展集羣容量
七.編程接口
Connector
現有MQ系統以Queue爲單位抽象,每個Queue都要配置serverAddress,userName,password,連接數量等信息,每個客戶端都會配置連接池,配置複雜,連接重用效率低,加重服務器負載。本次設計借鑑數據庫概念,爲每組服務器配置一個數據源,每個Queue看成是數據源中的一個數據實體,類似於數據庫中表的概念,這樣應用只要兩個信息:數據源和Queue就可以配置一個Sender或者Reciever,簡化了開發人員對消息系統的理解,同時也因爲和數據庫配置類似,有利於降低學習曲線。
JmsSource接口說明:
說明:接口很簡單,只要使用getConnection()方法,就可以得到一個連接,但是需要注意的是,使用連接後必須釋放,否則會到致連接池耗盡。
Sender
JmsSender代表一個消息發送端,由一個JmsSource和一個queue唯一對應。接口說明如下:
接口說明:接口很簡單,只需要調用send(obj)方法就可以發送消息到對應的隊列中,對象必須實現Serializable接口。
Reciever
JmsReciever代表一個消息接受端,接受服務器push過來的消息,所以還需要實現一個JmsWorker接口,提供業務處理邏輯,義務功能。
接口說明:JmsReciever接口與JmsSender接口有所不同,因爲接收端是被動的接受,所以必須明確調用start()方法,告訴服務器已經準備好了,可以接受消息,在特殊情況下也可以調用stop()暫停消息接受。另外,還需要提供一個JmsWorker對象作爲JmsReciever處理消息的工具。
JmsWorker接口只要一個方法,processMessage(Serializable msg),應用需要在這個接口實現自己的義務規則來處理消息,如果處理成功返回True,否則爲False。
Extension
擴展部分包括JmsFilter和JmsTransformer,分別處理消息過濾和消息協議轉換。
接口說明: