轉(zhuǎn)自:http://www.cnblogs.com/lushilin/p/6209976.html(魯仕林)
1.What is nmq?
nmq = new message queue;
一個(gè)通用消息隊(duì)列系統(tǒng)
為在線服務(wù)設(shè)計(jì)
什么是消息隊(duì)列剪勿?問什么需要哩至?有哪些功能握联?
消息隊(duì)列的本質(zhì):1.多個(gè)不同的應(yīng)用之間實(shí)現(xiàn)相互通信的一種異步傳輸模式2.異步3.解耦
業(yè)界有哪些比較好的mq镶骗?
yahoo YMB 、twitter Kestrel巡验、amazon SQS朵诫、apache kafka
百度的nmq和bigpipe
那么為什么會(huì)有這么多的實(shí)現(xiàn)呢?
影響設(shè)計(jì)的關(guān)鍵需求:
1.數(shù)據(jù)安全性
2.傳輸實(shí)時(shí)性
3.時(shí)序需求
4.吞吐需求
5.消費(fèi)方形態(tài)
6.消息關(guān)聯(lián)形態(tài)
現(xiàn)在介紹一下百度的nmq(看一下nmq的設(shè)計(jì)考量):
1.項(xiàng)目起源于大社區(qū)
2.重復(fù)開發(fā)毅哗、分散運(yùn)維;極大的人力浪費(fèi)捧挺;
并發(fā)+時(shí)序的難點(diǎn)虑绵,讓rd頭疼
核心+單點(diǎn)的運(yùn)維,讓op蛋疼
3.架構(gòu)的發(fā)展闽烙,讓老的系統(tǒng)不在適合
4.業(yè)務(wù)的發(fā)展翅睛,對性能、可擴(kuò)展性有了更高的要求黑竞;
mq的本質(zhì)需求:
1.數(shù)據(jù)安全性————》其實(shí)還好
2.傳輸實(shí)時(shí)性————》要求很高
3.吞吐需求————》很大
4.時(shí)序需求————》真的需要
5.消費(fèi)方形態(tài)————》多樣
6.消息關(guān)聯(lián)形態(tài)————》1vN
nmq的其他需求:
1.集中運(yùn)維
2.解耦
3.運(yùn)維平臺化捕发、自動(dòng)化
4.完善的功能,強(qiáng)大的時(shí)序+并發(fā)控制
5.支持國際化數(shù)據(jù)互通
模型設(shè)計(jì)(第一個(gè)問題)
nmq是基于消息的隊(duì)列很魂,還是基于消費(fèi)者的隊(duì)列
考慮點(diǎn):
1.存儲容量
2.運(yùn)維便利度
3.擴(kuò)展性
4.開發(fā)成本
所以最終選擇應(yīng)該基于消息本身扎酷。
模型設(shè)計(jì)(第二個(gè)問題):
1.推或者拉
2.核心問題:誰維護(hù)信息?
為了更加深入的對“推”和“拉”這兩種模式進(jìn)行對比遏匆,可以將consumer分為2類:
1.競爭模式:一個(gè)consumer模塊部署很多機(jī)器法挨,但所有機(jī)器競爭消費(fèi)同一份消息。
2.多主模式:一個(gè)consumer模塊部署很多機(jī)器幅聘,每個(gè)機(jī)器都消費(fèi)全量消息凡纳。
推模型的分析:
1.推模型是消息集中管理方式,消息隊(duì)列知道consumer的一切帝蒿。
2.可以支持2種consumer模式荐糜,容易實(shí)現(xiàn)各種策略。
3.優(yōu)點(diǎn)是靈活陵叽,什么都可以做
4.缺點(diǎn)是耦合狞尔,消息隊(duì)列本身的運(yùn)維是問題
拉模式分析
1.對多主的consumer:完美
消息隊(duì)列只負(fù)責(zé)消息的存儲和查詢
運(yùn)維便利、架構(gòu)清晰巩掺、簡單
2.對競爭的consumer:難以支持
兩種模式的選擇
1.競爭模式會(huì)是我們今后的主流模式和大趨勢偏序;
數(shù)據(jù)邏輯層和存儲引擎層的分離
數(shù)據(jù)的拆分和冗余,都會(huì)在存儲引擎層實(shí)現(xiàn)
2.PHP模塊實(shí)現(xiàn)“拉”有一定的難度
3.實(shí)現(xiàn)策略的靈活性和重要胖替,推模式有天然的優(yōu)勢
4.拉模式研儒,會(huì)帶來更大的遷移代價(jià)
5.最終選擇“推”模式
消息標(biāo)識:
1.msg = product+topic+cmd
2.product產(chǎn)品線標(biāo)識
3.topic
按業(yè)務(wù)劃分的消息序列,邏輯上的概念独令,可小可大端朵。
nmq只保證相同的topic內(nèi)的命令時(shí)序
4.cmd消息類別的最終標(biāo)識,不同topic之間可以同名
模型:
1.proxy
消息唯一入口燃箭,以topic為單位消息分流
2.topic-server(ts)
消息存儲冲呢。級聯(lián)和備份
3.pusher
消息發(fā)送,協(xié)議可擴(kuò)展
nmq集群圖片:
nmq的擴(kuò)展性設(shè)計(jì):
1.垂直擴(kuò)展
當(dāng)接收同一個(gè)topic的consumer增多招狸,導(dǎo)致pusher出現(xiàn)性能瓶頸敬拓。
可以通過ts級聯(lián)擴(kuò)展多個(gè)pusher解決邻薯,支持多級級聯(lián)
2.水平擴(kuò)展
當(dāng)一個(gè)topic的命令增多,導(dǎo)致超過單機(jī)ts性能極限
可以通過將該topic拆分到多個(gè)ts解決乘凸;比如按照某個(gè)partition key進(jìn)行拆分厕诡;拆分后,只有相同pk的消息才能保證時(shí)序营勤。
運(yùn)維設(shè)計(jì)
1.隊(duì)列的存儲粒度
一個(gè)ts內(nèi)部的所有topic串行存儲于一個(gè)隊(duì)列中灵嫌,共享一維transid;
犧牲性能換取簡單葛作,易運(yùn)維
2.主從同步和切換
ts級聯(lián)和備份合一寿羞;slave主動(dòng)從master拉數(shù)據(jù),配合資源定位进鸠,簡化主從切換步驟稠曼。
異步pipeline模式,強(qiáng)吞吐客年,支持跨機(jī)房霞幅。
并發(fā)+時(shí)序
1.一發(fā)一答的串行更新模式遠(yuǎn)不能滿足更新性能的需求
2.在并發(fā)的前提下,可以做到按照某個(gè)key的時(shí)需保證量瓜;
具有相同key的消息司恳,可以保證時(shí)序
比如接貼吧發(fā)帖的命令的consumer,可以通過配置做到不同發(fā)帖更新并發(fā)绍傲,但保證同一個(gè)吧的發(fā)帖是有序串行的扔傅;
3.實(shí)現(xiàn)
正在發(fā)送窗口+待發(fā)送窗口
發(fā)送先前check是否有互斥的消息正在發(fā)送
國內(nèi)跨城市方案:
國際化數(shù)據(jù)互通方案: