消息隊列

大型網站設計中,進場須要用到消息隊列。 消息隊列的使用能夠有效的下降熊個模塊間的耦合,提升提醒的可擴展性,特別是在SOA影響下,本來一個獨立的系統被拆分紅多個不一樣的子系統,提升系統和模塊的複用性,大量的功能被API化,可是也增長了系統之間的耦合,好比一個用戶的請求,在服務器端可能要數十個甚至更多的模塊,子系統間相互配合,一塊兒做用才能獲得結果,而後返回客戶端,若是某個模塊,或功能速度慢,好比高併發場景下的多任務處理,單個點的延遲會影響到對用戶的總體反饋速度。消息隊列(Queue),能夠提供一種可靠的,異步處理能力,請求到達消息隊列後便可返回,好比訂單提交的過程當中,系統設計到各類後臺計算,整個過程能夠封裝成一個任務存儲到消息隊列,而後直接返回訂單提交成功的消息給到用戶,實際的處理過程能夠用另外一個消費者線程在系統後臺異步處理。服務器

 

有不少場景能夠用消息隊列,特別是那些會佔用系統處理時間,拖慢系統響應速度,但又不是必定要及時反饋追中處理結果的任務, 好比,日誌存儲,數據在不一樣系統間的同步,等,併發

咱們如今使用的消息隊列工具是RabbitMQ, Redis也有消息對列的功能支持。異步

 

RabbitMQ能夠提供高可用的,分佈式,並能夠持久化存儲的消息隊列服務,核心概念有 Broker, Virtual host, Exchange, Queue,Shovel,Federation. Broker能夠理解成是部署RabbitMQ的服務器,分佈式環境下,會有多個Broker. Virtual Host提供了不一樣Exchange/Queue的隔離,不一樣Virtual Host裏的 Exchange/Queue不能相互直接訪問。 Shovel提供跨Virtual Host/Broker的不一樣Exchage/Queue間的訪問,Federation和Shovel相似,可是Shovel運行的更底層一些,Shovel至關於一個消息隊列的消費者程序。分佈式

 

Redis本質上提供分佈式存儲服務的,相似MemoryCache,可是支撐更多的數據類型,好比Hash, List, Set, ZSet, 另外Redis 支持數據的持久化存成和高可用。另外Redis也有消息隊列的功能,能夠提供消息隊列服務高併發

相關文章
相關標籤/搜索